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四个域对象中最小的。
复制代码