一:Struts2框架技术简介
1.Struts2的一些优点:(1)取消了ActionForm类 (2)使测试变得容易 (3)增加了拦截器功能 (4)能够支持多种视图技术(FreeMarker、Velocity、JasperReports等)
(5)提供了类型转换功能 (6)功能强大的OGNL
2.开发流程总结:(1)搭建支持Struts2框架的项目环境,添加Web项目开发所需要的Jar包 (2)编写Jsp (3)编写业务控制Action类 (4)在struts.xml配置文件中定义Action、Action返 回的视图资源,以及包命名空间信息等内容 (5)在web.xml文件中配置Stuts2框架的核心控制器StrutsPrepareAndExecuteFilter或者FiterDispatcher
(6)发布测试 (7)错误修改
二:Struts2框架基础
1.Struts2的体系结构:四大模块(Servlet Filters、Struts Core、Interceptors、User created)
(1)Servlet Filters(Servlet过滤器):
1>ActionContextCleanUp:该过滤器主要用于和FilterDispatcher过滤器一起集成其他的过滤器,如SiteMesh。当使用了该过滤器之后,FilterDispatcher过滤器将不会清除
ActionContext中的内容,而是由该过滤器后续代码来执行清除,该过滤器为可选项,Struts 2.1.3之后不推荐使用。
2>Other filters:一般是第三方框架。该过滤器可选。
3>FilterDispatcher:该过滤器是Struts2核心过滤器,负责拦截所有用户的请求。该过滤器主要通过ActionMapper来决定需要调用哪个Action。该过滤器是必选项。但是
在Struts 2.1.3之后推荐使用StrutsPrepareAndExecuteFilter过滤器。
如果要使用其他的过滤器(如SiteMesh),那么在web.xml文件中的设置顺序为ActionContextCleanUp 、SiteMesh、FilterDispatcher。
如果是在Struts2.1.3之后设置顺序为StrutsPrepareFilter、PageFilter、StrutsExecuteFilter。
(2)Struts Core(Struts 核心):
1>ActionMapper:负责实现HttpServletRequest和请求调用的Action之间的映射。
2>ActionProxy:真正的action之间充当代理角色,作用是如何获取Action,负责创建ActionInvocation实例。
3>ActionInvocation:当一个请求被调用时,ActionInvocation确定如何执行Action,一旦执行完毕,还负责根据Action返回的结果在struts.xml配置文件中找到相对应的视图资源
4>ConfigurationManager:负责配置文件的初始化及管理。
5>Result:action返回的结果是一个字符串,字符串的类型用于选择在struts.xml配置文件中配置的result元素。
6>标签库:Struts2提供了不依赖于显示层的标签库。
(3)Interceptors(拦截器)
(4)User Created(用户创建的代码),如struts.xml、Action和模版
2.Struts2的核心控制器
核心控制器StrutsPrepareAndExecuteFilter类实现了Filter接口。类中有4个方法:init()、doFilter()、destroy()及一个回调方法postInit(Dispatcher dispatcher,FilterConfig filterConfig)
3.Struts2的工作原理
(1)客户端向Servlet容器(如Jetty、Resin或tomcat等)发送请求。
(2)该请求首先经过一个标准的过滤器链,过滤器链包括可选的ActionContextCleanUp过滤器等。
(3)核心过滤器StrutsPrepareAndExecuteFilter(FilterDispatcher)被调用,该过滤器依次查找ActionMapper来决定这个请求是否调用用户请求的action。
(4)如果ActionMapper决定调用Action,StrutsPrepareAndExecuteFilter(FilterDispatcher)把请求的处理控制器交给ActionProxy。
(5)ActionProxy向ConfigurationManager询问框架的配置文件struts.xml找到要调用的Action类。
(6)ActionProxy创建ActionInvocation实例,负责命令模式的实现。
(7)在调用Action之前调用拦截器。
(8)在Action执行后,ActionInvocation负责根据Action的返回结果在struts.xml配置文件中找对应的视图资源。
(9)执行返回的结果,返回的结果通常是JSP或者FreeMarker模版,也可能是Action。模版可以使用框架提供的Struts2标签。
(10)拦截器再次被执行(顺序和Action被调用之前的执行顺序是相反的)。
(11)响应通过web.xml文件中配置的过滤器(Struts2核心控制器)返回