Java中Strutsl是最早的基于MVC模式的轻量级Web框架,它能够合理地划分代码结构,并包含验证框架、国际化框架等多种实用工具框架。但是随着技术的进步,Struts1的局限性也越来越多地暴露出来。为了符合更加灵活、高效的开发需求,Struts2框架应运而生。
Struts2是Strutsl的下一代产品,是在Struts1和WebWork技术的基础上进行合并后的全新框架(WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的J2EE Web框架,它也是一个MVC框架)。虽然Struts2的名字与Struts1相似,但其设计思想却有很大的不同。实质上,Struts2是以WebWork为核心的,它采用拦截器的机制来处理用户的请求。这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts2可以理解为WebWork 的更新产品。
Struts2拥有优良的设计和功能,其优势具体如下:
·项目开源,使用及拓展方便。
·提供Exception处理机制。
·Result方式的页面导航,通过Result标签很方便地实现重定向和页面跳转。
·通过简单、集中的配置来调度业务类,使得配置和修改都非常容易。
·提供简单、统一的表达式语言来访问所有可供访问的数据。
·提供标准、强大的验证框架和国际化框架。
·提供强大的、可以有效减少页面代码的标签。
·提供良好的Ajax支持。
·拥有简单的插件,只需放人相应的JAR包,任何人都可以扩展Struts2框架,例如自定义拦截器、自定义结果类型、自定义标签等,为Struts2定制需要的功能,不需要什么特殊配置,并且可以发布给其他人使用。
·拥有智能的默认设置,不需要另外进行烦琐的设置。使用默认设置就可以完成大多数项目程序开发所需要的功能。
Struts2框架的执行流程是怎样的?
为了更好地学习Struts2框架,下面分析一下Struts2的基本执行流程,如下图所示。
Struts2的执行流程图
Struts2的流程图中,一个请求在Struts2框架中的处理可以分为以下几个步骤:
(1)客户端浏览器发送一个请求(HttpServletRequest)。
(2)程序会调用StrutsPrepareAndExecuteFilter,然后询问ActionMapper这个请求是否需要调用某个Action。
(3)如果ActionMapper决定需要调用某个Action,StrutsPrepareAndExecuteFilter会把请求的处理交给ActionProxy。
(4)ActionProxy通过配置管理器(Configuration Manager)从配置文件(struts.xml)中读取框架的配置信息,从而找到需要调用的Action类。
(5)ActionProxy会创建一个ActionInvocation的实例。
(6)ActionInvocation使用命名模式来调用Action,在调用Action前,会依次调用所有配置的拦截器(Intercepter1、Intercepter2、…)。
(7)一旦Action执行完,返回结果字符串,ActionInvocation就会负责查找结果字符串。对应的Result,然后执行这个Result。通常情况下Result会调用一些模板(JSP等)来呈现页面。
(8)产生的Result信息返回给ActionInvocation,此过程中拦截器会被再次执行(顺序与Action执行之前相反)。
(9)产生一个HttpServletResponse的响应行为,通过StrutsPrepareAndExecuteFilter反馈给客户端。