1.Struts发展历程
Struts 最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages、Servlet、标签库以及面向对象的技术水准。最初的struts1.x很快在企业开发中流行起来,与此同事,当时还有一个非诚优秀的web框架诞生,webwork,webwork简洁、灵活功能强大,是一个标准的command模式框架实现,并且完全从web层脱离出来,但是webwork并没有像struts那样流行起来,而是进行了和struts合并。于是就诞生了Struts2。
2.Struts2 概述
Struts2是struts的下一代产品,是在struts1 和webwork 的技术基础上进行了合并的全新的Struts2框架。Struts2以webwork 为核心,采用拦截器的机制处理用户的请求,这样的设计使得业务逻辑控制器能够与servletAPI完全脱离开,所以Struts2可以理解为webwork的更新产品。虽然从struts1到struts2有着太大的变化,但是想对于webwork,Struts2的变化很小。
由于Struts是基于MVC模式的框架,Struts2也体现了MVC的设计思想。
上图中描述了Struts2体系结构模型(model)、视图(View)和控制器(Controller)。
Struts2 的核心组件Action 和拦截器。
3.Struts2的处理流程:
当用户发送请求后:
- 注意:在Struts2.1以前调用FilterDispatcher,在此之后调用StrutsPrepareAndExecuteFilter。
2. FilterDispatcher被调用,询问ActionMapper来决定这个请求是否需要调用某个Action
3. 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
4. ActionProxy通过configurationManager查找Struts.xml配置文件,读取相关的配置信息,找到需要调用的Action类。
5.ActionProxy创建ActionInvocation的实例,接下来通过ActionInvocation调用Invok方法。
6.在Invok方法里先处理相关Interceptor,最后处理Action
7.一旦Action执行完毕,ActionInvocation负责根据Strutsx.xml中的配置找到对应的返回结果(result通常是一个需要被表示的JSP或者FreeMarker的模板,也可能是另一个Action)
8.Result信息返回给ActionInvocation,再次执行相关Interceptor,顺序跟之前的相反。
9.产生HttpServletResponse返回到页面请求。
10. 最后将响应发送给客户端。
4.Spring3 MVC 与Struts2的区别:
Struts2是一款流行的开源web框架,其核心组件主要是Action和拦截器,它与我们之前学的SpringMVC框架有什么区别呢?
首先从配置文件上来说,Struts2采用传统的XML配置方式,SpringMVC基于零配置的思想(除了配置SpringMVC-servlet.xml)之外;其次,Struts2是类级别的拦截,一个类对应一个request上下文。Springmvc是方法级别的拦截,一个方法对应一个request上下文;最后,SpringMVC方法基本上是独立的,独享request、response数据,请求数据通过参数获取,处理结果通过modelMap返回,方法之间不共享变量。 而Struts2虽然方法之间也独立,但是所有的Action共享变量。