Struts2是一个优雅的,可扩展的JAVA EE web框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。Struts2吸收了Struts1和WebWork两者的优势。
Struts2的特性:
l 一个基于Action的MVC Web框架。
在这个模式中,Servlet是控制器,集中处理所有的客户端页面请求。它把所请求的URL与被称为Action的工作单元映射到一起。Action的工作就是通过访问HTTP会话、HTTP请求和表单参数等调用业务逻辑,最后把响应映射到以POJO(plain old java object)形式存在的模型上,来完成特定的功能。最后,Action返回的结果会通过配置文件映射到JSP页面上,JSP会渲染视图并显示给用户。
l 拥有由积极活跃的开发人员与用户组成的成熟社区
l Annotation和XML配置选项
l 基于POJO并易于测试的Action
l 与Spring,SiteMesh 和Tiles的集成
l 与OGNL表达式语言的集成
l 基于主题的标签库与Ajax标签
l 多种视图选项 (JSP,Freemarker,Velocity和XSLT)
l 使用插件来扩展或修改框架特性。
Struts2的主要jar包
l commons-logging-1.0.4.jar
Struts2框架的日志包
l freemarker-2.3.8.jar
Struts2的UI标签的模版
l ognl-2.6.11.jar
对象图导航语言包
l struts2-core-2.0.11.jar
Struts框架的核心类库
l xwork-2.0.4.jar
XWork类库,Struts2基于此构建
Struts流程
1) 客户端提交一个(HttpServletRequest)请求,如上文在浏览器中输入http://localhost: 8080/bookcode/ch2/Reg.action就是
提交一个(HttpServletRequest)请求。
2) 请 求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、
FilterDispatcher)。注意:这里是有顺序的,先ActionContext CleanUp,再其他过滤器(Othter Filters、SiteMesh等),
最后到FilterDispatcher。FilterDispatcher是控制器的核心,就是MVC的Struts 2中实现控制层(Controller)的核心。
3) FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper决定
需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。
4) ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。例如,用户注册示例将
找到UserReg类。
5) ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation
会根据配置加载Action相关的所有Interceptor(拦截器)。
6) 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。