struts2的架构和运行流程

Struts2的模块和运行流程

Struts2的官方文档里附带了Struts2的系统架构图,展示了Struts2的内部模块及运行流畅,如图1


Struts系统的架构

在系统架构图中,分了好几块,彼此之间相互联系,分为4种颜色:

  • 橙色是Servlet Filters,即过滤器,所有的请求都要经过Filter链的处理。
  • 浅蓝色是Struts Core,即Struts2的核心部分,是Struts2中已经做好的功能,实际开发中不需要动它们。
  • 浅绿色是Interceptions,即Struts2的拦截器。Struts2提供了很多默认的拦截器,可以完成日常开发的绝大部分工作;当然,也可以自定义拦截器,用来实现具体业务需要的功能
  • 浅黄色是User Created,即由开发人员创建的,包括struts.xml、Action、Template,是每个使用Struts2来进行开发的人员都必须会的

Struts2的体系结构

  1. 当Web容器收到一个请求时,他将请求传递给一个标准的过滤器链,其中包括ActionContentCleanUp过滤器和其他过滤器(如集成SiteMess的插件),这是非常有用的技术。接下来,需要调用FilterDispatcher,它将调用ActionMapper,来确定请求调用哪个Action,ActionMapper返回一个收集了Action详细信息的ActionMapping对象
  2. 接下来,FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(Configuration Manager)从配置文件中读取配置信息,然后创建ActionInvocation对象,实际上,ActionInvocation的处理过程就是Struts2处理请求的过程
  3. 一旦Action执行返回结果字符串,ActionInvocation负责查找结果字符串对应的Result,然后执行这个Result。通常情况下Result会调用一些模板(JSP等)来呈现页面
  4. 之后,拦截器会被再次执行(顺序与Action执行前相反),最后响应被返回给在web.xml中配置的那些过滤器(FilterDispatcher等)。

Struts2各模块的说明

Struts2框架中的各个模块各自是做什么的?有什么样的功能?处于什么样的地位?下面跟着系统架构图上的箭头一个一个地来查看

  • FilterDispatcher:是整个Struts2的调度中心,根据ActionMapper的结果来决定是否处理请求,如果ActionMappr指出该URL应该被Struts处理,那么它将会执行Action处理,并停止过滤器链上还没有被执行的过滤器。
  • ActionMapper:提供了HTTP请求与Action执行之间的映射,简单地说,ActionMapper会判断这个请求是否应该被Struts2处理,如果需要Struts2处理,ActionMapper会返回一个对象来描述请求对应的ActionInvocation的信息
  • ActionProxy:是一个特别的中间层,位于Action和xwork之间,使得我们在将来有机会引入更多额实现方式,比如通过WebService来实现等
  • ConfigurationManager:是xwork配置的管理中心,可以把它看作struts.xml这个配置文件在内存中的对应
  • struts.xml:是Struts2的应用配置文件,负责诸如URL与Action之间映射的配置,以及执行后页面跳转的Result配置等
  • ActionInvocation:真正调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器实例。ActionInvocation会执行这些拦截器、Action以及相应的Result.
  • Interceptor:拦截器是一些无状态的类,拦截器可以自动拦截Action,它们给开发者提供了在Action运行之前或Result运行之后执行一些功能代码的机会,类似于我们熟悉的javax.servlet.Filter.
  • Action:动作类是Struts2中的动作执行单元。用来处理用户请求,并封装业务所需要的数据
  • Result:Result就是不同视图类型的抽象封装模型,不同的视图类型会对应不同的Result实现,Struts2中支持多种视图类型,比如JSP,FreeeMarker等
  • Template:各种视图类型的页面模板,例如,JSP就是一种模板页面技术
  • Tag Subsystem:Struts2的标签库,它抽象了三种不同的视图技术:JSP,Velocity,FreeMarker,可以在不同的视图技术中,几乎没有差别地使用这些标签。

Struts2的运行流程

总所周知,Struts框架是基于MVC模式的,基于MVC模式框架核心就是控制器对所有请求进行统一处理。传统的JSP页面通过GET或POST方法向服务器端的JSP页面提交数据。采用Struts2框架后,不再提交给服务器端的JSP页面,框架会根据web.xml配置文件和struts.xml配置文件的配置内容,将数据提交给相应的ActionSupport类处理,并返回结果。根据返回的结果(Reuslt)和struts.xml文件中的配置内容(result标签对应的页面),将响应的页面返回给客户端

核心控制器

    StrutsPrepareAndExecuteFilter控制器是Struts2框架的核心控制器,该控制器负责拦截所有的用户请求,用户请求到达时,该控制器或过滤用户的请求,如果用户请求以action结尾,改请求将被交给Struts2框架来处理。
    当Struts2框架获得了用户请求后,根据请求的名字决定调用那部分业务逻辑组建,例如,对应login请求,Struts2调用login所对应的LoginAction业务来处理该请求。(对应关系请查看struts.xml配置文件的格式以及各标签代表的含义)

业务控制器

Action就是Struts2的业务逻辑控制器,复制处理客户端请求并将结果输出给客户端。对开发人员来说,使用Struts2框架,主要的编码工作就是编写Action类,Struts2并不要求编写的Action类一定要实现Action接口,可以编写一个普通的Java类作为Action类,只要给类含有一个返回字符串的无参的public方法即可。

猜你喜欢

转载自blog.csdn.net/chenyonken/article/details/80744204