17-撩课-Java面试宝典-第十七篇

116.说下Struts的设计模式

MVC模式: 
web应用程序启动时
就会加载并初始化ActionServler。
用户提交表单时,
一个配置好的ActionForm对象被创建,
并被填入表单相应的数据,
ActionServler根据Struts-config.xml文件
配置好的设置决定是否需要表单验证,
如果需要就调用ActionForm的Validate()
验证后选择将请求发送到哪个Action,
如果Action不存在,
ActionServlet会先创建这个对象,
然后调用Action的execute()方法。
Execute()从ActionForm对象中获取数据,
完成业务逻辑,
返回一个ActionForward对象,
ActionServlet再把客户请求 
转发给ActionForward对象指定的jsp组件,
ActionForward对象指定的jsp生
成动态的网页,返回给客户。

117.拦截器和过滤器的区别?

1、拦截器是基于java反射机制的,
而过滤器是基于函数回调的。

2、过滤器依赖于servlet容器,
而拦截器不依赖于servlet容器。

3、拦截器只能对Action请求起作用,
而过滤器则可以对几乎所有请求起作用。

4、拦截器可以访问Action上下文、
值栈里的对象,而过滤器不能。

5、在Action的生命周期中,
拦截器可以多次调用,
而过滤器只能在容器初始化时被调用一次。

118.struts2框架的核心控制器是什么?它有什么作用?

1)Struts2框架的核心控制器是
StrutsPrepareAndExecuteFilter。  

2)作用:  

 负责拦截由<url-pattern>/*</url-pattern>
指定的所有用户请求,
当用户请求到达时,
该Filter会过滤用户的请求。
默认情况下,
如果用户请求的路径  

不带后缀或者后缀以.action结尾,
这时请求将被转入struts2框架处理,
否则struts2框架将略过该请求的处理。  

可以通过常量"struts.action.extension"修改action的后缀,
如:  
<constant name="struts.action.extension" value="do"/>  
如果用户需要指定多个请求后缀,
则多个后缀之间以英文逗号(,)隔开。
<constant name="struts.action.extension" value="do,go"/>   

119.struts2如何访问HttpServletRequest、HttpSession、ServletContext三个域对象?

方案一:  

HttpServletRequest request =
ServletActionContext.getRequest();  

HttpServletResponse response =
ServletActionContext.getResponse();  

HttpSession  session=   
request.getSession(); 

ServletContext servletContext=
ServletActionContext.getServletContext();  

    

方案二:  

类 implements ServletRequestAware,ServletResponseAware,SessionAware,ServletContextAware  

注意:框架自动传入对应的域对象 

120.ActionContext、ServletContext、pageContext的区别?

1)ActionContext是当前的Action的上下文环境,
通过ActionContext可以
获取到request、session、ServletContext等
与Action有关的对象的引用;  

2)ServletContext是域对象,
一个web应用中只有一个ServletContext,
生命周期伴随整个web应用;  

3)pageContext是JSP中的最重要的一个内置对象,
可以通过pageContext获取其他域对象的应用,
同时它是一个域对象,
作用范围只针对当前页面,
当前页面结束时,
pageContext销毁,  

生命周期是JSP四个域对象中最小的。   

猜你喜欢

转载自blog.csdn.net/lkitlike/article/details/84997541