细谈Struts2框架(一) Struts2框架之原理

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框架(一) Struts2框架之原理_第1张图片

上图中描述了Struts2体系结构模型(model)、视图(View)和控制器(Controller)。

Struts2 的核心组件Action 和拦截器。

3.Struts2的处理流程:


               细谈Struts2框架(一) Struts2框架之原理_第2张图片


当用户发送请求后:

  1.  经过Struts2核心控制器(FilterDispatcher)
  • 注意:Struts2.1以前调用FilterDispatcher,在此之后调用StrutsPrepareAndExecuteFilter

    2. FilterDispatcher被调用,询问ActionMapper来决定这个请求是否需要调用某个Action

    3. 如果ActionMapper决定需要调用某个ActionFilterDispatcher把请求的处理交给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共享变量。

你可能感兴趣的:(细谈Struts2框架(一) Struts2框架之原理)