走进Struts2(一) — Struts2的运行流程及其工作原理

 Struts2是一套非常优秀的Web应用框架,实现优雅、功能强大、使用简洁。可以说是Struts2是一款非常成熟的MVC架构。

在我们学习Struts2时,最好是先学习它的运行流程、核心概念,从中得到启发,提升自己,而不仅仅是学习怎么怎么使用它。

在网上看到这样一句话:

你千万不要成为一个只会熟练使用框架的程序员,那样,你会疲于奔命,你也许永远只会使用 Hadoop ,而写不出一个 Hadoop ,你只是一个 Hadoop程序员,而不是一个分布式工程师。

你也许永远只会使用 Struts,而忘记了自己写 filter,你只是一个 SSH 程序员,而不是一个 Web 工程师。

话不多说,一起走进Struts2

一、系统架构

Struts2的官方文档附带了Struts2的架构图。从这张图可以很好的去理解Struts2

关于图中的Key:

  • Servlet Filters:过滤器链,客户端的所有请求都要经过Filter链的处理。
  • Struts Core:Struts2的核心部分,但是Struts2已经帮我们做好了,我们不需要去做这个
  • Interceptors,Struts2的拦截器。Struts2提供了很多默认的拦截器,可以完成日常开发的绝大部分工作;而我们自定义的拦截器,用来实现实际的客户业务需要的功能。
  • User Created,由开发人员创建的,包括struts.xml、Action、Template,这些是每个使用Struts2来进行开发的人员都必须会的。

  • 1.FilterDispatcher是整个Struts2的调度中心,也就是MVC中的C(控制中心),根据ActionMapper的结果来决定是否处理请求,如果ActionMapper指出该URL应该被Struts2处理,那么它将会执行Action处理,并停止过滤器链上还没有执行的过滤器。
  • 2.ActionMapper 会判断这个请求是否应该被Struts2处理,如果需要Struts2处理,ActionMapper会返回一个对象来描述请求对应的ActionInvocation的信息。
  • 3.ActionProxy,它会创建一个ActionInvocation实例,位于Action和xwork之间,使得我们在将来有机会引入更多的实现方式,比如通过WebService来实现等。
  • 4.ConfigurationManager是xwork配置的管理中心,可以把它看做struts.xml这个配置文件在内存中的对应。
  • 5.struts.xml,是开发人员必须光顾的地方。是Stuts2的应用配置文件,负责诸如URL与Action之间映射关系的配置、以及执行后页面跳转的Result配置等。
  • 6.ActionInvocation:真正调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器实例。ActionInvocation会按照指定的顺序去执行这些拦截器、Action以及相应的Result。
  • Interceptor(拦截器):是Struts2的基石,类似于JavaWeb的Filter,拦截器是一些无状态的类,拦截器可以自动拦截Action,它们给开发者提供了在Action运行之前或Result运行之后来执行一些功能代码的机会。
  • 7.Action:用来处理请求,封装数据。
  • 二、运行流程

1.当用户的发出请求,比如http:localhost:8080/Struts2/helloworld/helloworldAction.action,请求会被Tomcat接收到,Tomcat服务器来选择处理这个请求的Web应用,那就是由helloworld这个web工程来处理这个请求。

2.Web容器会去读取helloworld这个工程的web.xml,在web.xml中进行匹配,但发现,由struts2这个过滤器来进行处理(也就是

StrutsPrepareAndExecuteFilter),根据Filter的配置,找到FilterDispatcher(Struts2的调度中心)

3.然后会获取FilterDispatcher实例,然后回调doFilter方法,进行真正的处理

PS:FilterDispatcher是任何一个Struts2应用都需要配置的,通常情况下,web.xml文件中还有其他过滤器时,FilterDispatcher是放在滤器链的最后;如果在FilterDispatcher前出现了如SiteMesh这种特殊的过滤器,还必须在SiteMesh前引用Struts2的ActionContextCleanUp过滤器

对应Struts2的架构图如下

4.这时FilterDispatcher会将请求转发给ActionMapper。ActionMapper负责识别当前的请求是否需要Struts2做出处理。ActionMapper就类似于公司的保安,来识别是不是当前客户是不是我公司的人

对应Struts2的架构图如下

5.如果需要Struts2处理,ActionMapper会通知FilterDispatcher,需要处理这个请求,FilterDispatcher会停止过滤器链以后的部分,(这也就是为什么,FilterDispatcher应该出现在过滤器链的最后的原因)。然后建立一个ActionProxy实例,这个对象作为Action与xwork之间的中间层,会代理Action的运行过程。

对应Struts2的架构图如下

6.ActionProxy对象在被创建出来的时候,并不知道要运行哪个Action,它手里只有从FilterDispatcher中拿到的请求的URL。

而真正知道要运行哪个Action的是ConfigurationManager。因为只有它才能读取我们的strtus.xml

(在服务器启动的时候,ConfigurationManager就会把struts.xml中的所有信息读到内存里,并缓存,当ActionProxy带着URL向他询问要运行哪个Action的时候,就可以直接匹配、查找并回答了)

对应Struts2的架构图如下

  -> 

7.ActionProxy知道自己该干什么事之后(运行哪个Action、相关的拦截器以及所有可能使用的result信息),然后马上建立ActionInvocation对象了,ActionInvocation对象描述了Action运行的整个过程。

注意:Action完整的调用过程都是由ActionInvocation对象负责

对应Struts2的架构图如下

8.在execute方法之前,好像URL请求中的参数已经赋值到了Action的属性上,这就是我们的"雷锋"—拦截器。

拦截器的运行被分成两部分,一部分在Action之前运行,一部分在Result之后运行,而且顺序是刚好反过来的。也就是在Action执行前的顺序,比如是拦截器1、拦截器2、拦截器3,那么运行Result之后,再次运行拦截器的时候,顺序就变成拦截器3、拦截器2、拦截器1了。

这就好比,你要去奶奶家,需要通过 水泊梁山->盘丝洞 -> 索马里,到了奶奶家,看奶奶回来的时候,就必须要通过 索马里 -> 盘丝洞 -> 水泊梁山。

所以ActionInvocation对象执行的时候需要通过很多复杂的过程,按照指定拦截器的顺序依次执行。

对应Struts2的架构图如下

9.到了奶奶家,然后执行Action的execute方法

10.然后根据execute方法返回的结果(Result),去struts.xml中匹配选择下一个页面

11.根据结果(Result)找到页面后,在页面上(有很多Struts2提供的模板),可以通过Struts2自带的标签库来访问需要的数据,并生成最终页面

注意:这时还没有给客户端应答,只是生成了页面

12.最后,ActionInvocation对象倒序执行拦截器,从奶奶家回来

13.ActionInvocation对象执行完毕后,已经得到响应对象(HttpServletResponse)了,最后按与过滤器(Filter)配置定义相反的顺序依次经过过滤器,向客户端展示出响应的结果

得到完整Struts2架构图

时间: 2024-10-24 02:51:27

走进Struts2(一) — Struts2的运行流程及其工作原理的相关文章

Struts2的运行流程及其工作原理

1 客户端初始化一个指向Servlet容器的请求 2 这个请求经过一系列的过滤器 3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy  5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类  6 Ac

宁夏PL单机除尘器的运行维护与工作原理介绍

PL单机除尘器是一种占空中积小,除尘效能高的小型单机布袋除尘器,重要由引风机.扁形滤袋.壳体.清灰电机构成,实用于车间内部消耗中的扬尘管理,如:车床加工.抛光打磨.陶瓷.玻璃.耐火质料制造等,满足安置空间小.处置处罚扬尘大.净化效能高的应用状态. 宁夏PL单机除尘器工作原理 宁夏PL单机除尘器经过与引风管道相连的吸尘罩把含尘气体吸入箱体,经过外滤式扁形滤袋进行过滤,滤袋内部有笼型框架作为支持,依托清灰电机动员连杆装置,把含尘气体过滤后,粘附在滤袋上的粉尘,定时抖落,让滤袋回复过滤功能,而粉尘则落

走进Struts2(一) — Struts2的执行流程及其工作原理

 Struts2是一套很优秀的Web应用框架,实现优雅.功能强大.使用简洁.能够说是Struts2是一款很成熟的MVC架构. 在我们学习Struts2时,最好是先学习它的执行流程.核心概念.从中得到启示.提升自己,而不不过学习怎么怎么使用它. 在网上看到这样一句话: 你千万不要成为一个仅仅会熟练使用框架的程序猿.那样.你会疲于奔命,你或许永远仅仅会使用 Hadoop ,而写不出一个 Hadoop ,你仅仅是一个 Hadoop程序猿,而不是一个分布式project师. 你或许永远仅仅会使用 Str

struts2 执行流程及工作原理

在Struts2框架中的处理大概分为以下的步骤  1 用户发送请求: 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action : 4  如果需要处理,ActionMapper会通知Fil

[原创]java WEB学习笔记70:Struts2 学习之路-- struts2拦截器源码分析,运行流程

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Struts2框架运行流程及案例

Struts2框架 Struts2由Struts1和WebWork两个经典的MVC框架发展起来,是一个非常优秀的MVC框架.Struts2中的execute()方法不再与servlet API耦合,因而更容易测试.Struts2支持更多的视图技术,提供了基于AOP思想的拦截机制,以及更强大更容易使用的校验功能和ajax支持. 所有的Web项目都是基于请求/响应模式而建立的.在web.xml中配置Struts的核心Filter就能将Web的流程转入到Struts框架内. Struts2的运行流程图

Struts2.1的运行流程的简单分析(个人见解)

Struts2.1的运行流程大致分为以下几个步骤: 1.用户输入URL请求,该请求被StrutsPrepareAndExecuteFilter拦截,根据welcome-file属性的设置跳转到相应的jsp页面. 2.用户在jsp页面发出的相应的处理请求. 3.该处理请求也会被StrutsPrepareAndExecuteFilter拦截,首先清理当前线程的ActionContext和Dispatcher防止内存的泄露,接下来询问ActionMapper(Action映射器)来决 定这个请求是否需

Struts2系统运行流程(2)

在上一篇中已经说过了Struts2的系统的基本原理(http://blog.csdn.net/xlgen157387/article/details/45840719),下边说一下Struts2的运行流程: 举个简单的案例,就是一个helloworld的案例,下边对其进行进行详细的解释. 案例基础内容: 我们在使用Struts2的时候会在web.xml文件中进行配置过滤器:编写一个Action类,这里起个名字叫做HelloWorldAction:在struts.xml中进行配置这个Action.

SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblogs.com/wkrbky/p/5912810.html 一.Hibernate(数据层)的搭建: 实现流程 二.Spring(注入实例)的使用: 实现流程 三.Struts2(MVC)的搭建: 实现流程 这里注意一点问题: Struts2与Hibernate在一起搭建,antlr包,有冲突.MyE