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 四个域对象中最小的.
来源: http://www.jianshu.com/p/42e4ad42eb84