Struts2系统运行流程(2)

在上一篇中已经说过了Struts2的系统的基本原理(http://blog.csdn.net/xlgen157387/article/details/45840719),下边说一下Struts2的运行流程:

举个简单的案例,就是一个helloworld的案例,下边对其进行进行详细的解释。

案例基础内容:

我们在使用Struts2的时候会在web.xml文件中进行配置过滤器;编写一个Action类,这里起个名字叫做HelloWorldAction;在struts.xml中进行配置这个Action。编写界面等;

Struts2的内部运行流程

(1)首先用于在游览其中输入账户名和密码提交之后,这就开始了我们的工作流程;

(2)当用户提交的时候,请求的URL为:/helloworld/helloworldAction.action请求被Tomcat服务器接收到,Tomcat服务器会根据请求URL中的web上下文,也就是/helloworld,来选择处理这个请求的Web应用,那就是由helloworld这个web工程来处理这个请求;

(3)Web服务器会读取helloworld这个工程的web.xml,在web.xml中进行配置,发现扩展名为.action的请求,由struts2这个过滤器来进行处理,根据Filter的配置,找到实际的类为FilterDispatcher。

(4)Web容器会根据获取的FilterDispatcher这个类的实例,然后回调doFilter()方法进行真正的处理,FilterDispatcher作为前端控制器,是整个Struts的调度中心;

注:FilterDispatcher是任何一个Struts2应用都需要配置的,一般出现在过滤器的最后;如果在FilterDispatcher钱出现了如SiteMesh这种特殊的过滤器,还必须在SiteMesh前边应用Struts2的ActionContextCleanUp过滤器。

由于这个案例中没有SiteMesh这种特殊的过滤器,所以只需要用filterDispatcher就可以,这就相当于前进到Struts2构架图的第一步:

(5)FilterDispatcher讲请求转发给ActionMapper。ActionMapper负责识别当前的请求是否需要Struts2做出处理。

(6)ActionMapper告诉FilterDispatcher,需要处理这个请求,FilterDispatcher会停止过滤器链以后的部分,所以通常情况下:FilterDispatcher应该出现在过滤器联链的最后。然后建立一个ActionProxy对象,这个对象作为Action与xwork之间的中间层,会代理Action的运行过程。

(7)ActionProxy对象被创建出来的时候,并不知道要运行哪个Action,他手里只有从FilterDispatcher中拿到的请求的URL。这时候,他去向ConfigurationManager询问到底要运行哪一个Action。

注:在上一篇已经说到某一个特定的URL实在strut.xml文件中进行配置的,而ConfigurationManager则负责将struts.xml文件中配置文件映射到内存中去的,所以ActionProxy需要向ConfigurationManager询问到底是哪一个Action。

在服务器启动的时候,ConfigurationManager会一次性的将struts.xml文件中所有信息读到内存中,并缓存起来,以保证ActionProxy拿着来访问的URL向它询问要运行哪一个Action的时候,就可以直接匹配,查找并回答出来。

(8)ActionProxy知道了需要运行的那个Action,相关的拦截器以及所有可能使用的result信息,就可以着手建立ActionInvocation对象了,ActionInvocation对象描述了Action运行的整个过程。

注:Action运行绝不仅仅只是运行Action中的execute方法这么简单,还包其他部分,完整的调度过程有ActionInvocation对象负责。

(9)当我们在Action中的execute方法运行的时候,我们是直接使用这个Action中属性的值,而不需要从用户请求域中进行获取请求的参数,是谁把请求中的参数赋到了Action的属性中,这个事情是谁帮我们已经做好了哪?答案就是拦截器。

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

总之我们得到的结论是ActionInvocation对象执行的时候比较复杂,会做很多事情。

1.)首先按照拦截器的应用顺序依次执行各个拦截器的潜质部分;

2.)然后执行Action的execute方法;

3.)然后根据execute方法返回的结果,也就是result,在struts.xml中匹配选择下一个页面;

4.)找到页面后,由于现在的页面一般都是模板页面,在页面上,可以通过Struts2自带的标签库来烦我跟需要的数据,并生成最终页面。

5.)最后,ActionInvocation对象在按照拦截器的引用顺序倒叙依次执行各个拦截器的后置部分。

(10)ActionInvocation队形执行完毕之后,实际上就已经得到响应对象了,也就是HttpServletResponse对象,最后按与罗氯气配置定义星饭的顺序依次经过过滤器,向用户展示响应的结果。

ok!到此整个执行的过程已经结束。

时间: 2024-07-28 16:21:53

Struts2系统运行流程(2)的相关文章

Thinkphp3.2新手篇之系统运行流程1

如果公司使用的tp框架,那么作为新人在首先会被要求了解tp的系统运行流程,本文章意在帮助新童鞋快速了解tp系统流程.流程说明按照tp手册给出的进行(序号也相同,方便大家查看): 1.用户URL请求,2.调用应用入口文件(这里以index.php为例) 大部分网站是利用url重写隐藏了index.php的,这里的方法请查看tp手册.首先执行index.php, 1 // 应用入口文件 2 3 // 检测PHP环境 4 if(version_compare(PHP_VERSION,'5.3.0','

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

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

Struts2框架运行流程及案例

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

简单说struts2框架运行流程

(1)提交请求客户端通过HttpServletRequest向servlet容器(即tomcat)提交一个请求.请求经过一系列的过滤器,例如图中的ActionContextCleanUp和Other filter(SlterMesh,etc)等,最后被struts的核心过滤器FilterDispatcher控制到.注:核心控制器2.1.3版本之后,struts的filterDispatcher核心控制器变成了StrutsPrepareAndExecuteFilte被核心控制器控制到之后才会访问A

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

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

struts2的运行流程

流程: 1:url 提交到tomcat http://localhost/s2/firstAction 2:tomcat 根据工程名 去 webapps 文件夹下找到对应工程 3:找web.xml StrutsPrepareAndExecuteFilter 被执行,内部调用 struts.xml   4:从 struts.xml 找到了 name="firstAction" 的action元素(url中 跟此值匹配)      5:根据class 属性的值 反射 调用 execute

Struts2的基本流程的详细介绍

Struts2基本流程 概述: Struts2框架由三部分构成:核心控制器.业务控制器和用户实现的业务逻辑组件.在这三部分中,struts2框架提供了核心控制器StrutsPrepareAndExecuteFilter,而用户需要实现业务控制层和业务逻辑层. 一.核心控制器 StrutsPrepareAndExecuteFilter StrutsPrepareAndExecuteFilter与struts2以前版本中的FilterDispatcher一样.它是struts2框架的核心控制器,该控

关于struts2的自定义拦截器和struts2的详细流程

1.其实我们大家平常都会用struts2用的很多,但是有的时候我们并不是真正的了解struts2的运行机制,下面给大家分享一下struts2的运行流程.MVC框架 解释如下: 1.  所有请求被Struts2核心控制器StrutsPreparaedAndExecuteFilter拦截 2.根据ActionMapper提供的信息决定如何进行下一步 3.ActionMapper主要依赖Struts2的配置文件struts.xml 4.接下来为每个Action创建Action代理类ActionProx

(转)关于struts2的自定义拦截器和struts2的详细流程

转自 http://www.94cto.com/index/Article/content/id/63218.html.话说,写的真不错. 1.其实我们大家平常都会用struts2用的很多,但是有的时候我们并不是真正的了解struts2的运行机制,下面给大家分享一下struts2的运行流程.MVC框架 解释如下: 1. 所有请求被Struts2核心控制器StrutsPreparaedAndExecuteFilter拦截 2.根据ActionMapper提供的信息决定如何进行下一步 3.Actio