struts2 框架处理流程

流程图如下:

注意:StrutsPrepareAndExecuteFilter替代了2.1.3以前的FilterDispatcher过滤器,使得在执行Action之前可以添加过滤器了。

文档说明:Deprecated.Since Struts 2.1.3, use StrutsPrepareAndExecuteFilter instead or StrutsPrepareFilter and StrutsExecuteFilter if needing using the ActionContextCleanUp filter in addition to this one

下面对上面这个流程图进行详细解释:

首先,客户端通过HttpServletRequest,向servlet容器(tomcat)提交一个请求,这个请求会经过一系列的过滤器,像ActionContextCleanUp以及其它的过滤器等,经过这些过滤器以后,最终会被struts的核心控制器过滤到,也就是StrutsPrepareAndExecuteFilter。

被核心过滤器过滤到以后,核心控制器会访问ActionMapper,来决定是否要调用某一个action,也就是用户是否要请求某一个action。如果用户请求的是某一个jsp页面,或者是其它的资源,则不会访问我们的action。如果ActionMapper决定需要调用某一个action,这个时候,struts中的核心控制器会将控制权委派给ActionProxy,也就是action代理。然后,ActionProxy,Configuration Manager配置管理器来加载struts的核心配置文件,即struts.xml(action配置在struts.xml里).

如果在struts.xml中找到了要调用的action,ActionProxy(ActionProxy是Action的一个代理类,也就是说Action的调用是通过ActionProxy实现的,其实就是调用了ActionProxy.execute()方法,而该方法又调用了ActionInvocation.invoke()方法)会创建ActionInvocation的一个实例。Action Invocation里面包含了所创建的action的实例,同时它里面还有另外一个非常重要的部分,就是拦截器Interceptor。

(ActionInvocation 是Xworks 中Action 调度的核心。而对Interceptor 的调度,也正是由ActionInvocation负责。ActionInvocation 是一个接口, 而DefaultActionInvocation 则是Webwork 对ActionInvocation的默认实现。

Interceptor 的调度流程大致如下: 

1.
ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。

2.
通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。 )

在调用action之前,或者调用action之后,它还需要调用非常多的拦截器。在调用action之前,首先会依次调用所配置的拦截器,如果拦截器有多个,也会依次执行。比方说,它会首先执行第一个拦截器,那么紧接着执行第二个拦截器,再执行第三个拦截器等等。当把这些拦截器执行完了以后,它才会执行我们的action。那么执行action我们会非常熟悉,它会调用action里的业务处理方法,进行业务的处理,同时这个方法会返回一个结果(字符串),然后根据这个返回的字符串去调用视图去匹配result,一般来说会返回一个jsp页面,或者去调用另外的某一个action。

当返回这个视图以后,它真的去响应用户了吗。实际上并没有,它会将之前执行过的拦截器再倒过来执行一遍,也就是执行第三个拦截器,再是第二个,再是第一个。反向执行拦截器之后,才会进行最终的请求的响应。

友情链接:

ActionContextCleanUP

ActionContextCleanUP过滤器来完成清除属性,不让后续的filter(FilterDispatcher)清除,从而延长action中属性的生命周期,以便在jsp页面中进行访问。

StrutsPrepareAndExecuteFilter

StrutsPrepareAndExecuteFilter 与 FilterDispatcher的区别

struts2 框架处理流程的更多相关文章

  1. Struts2框架学习(一)

    Struts2框架学习(一) 1,Struts2框架介绍 Struts2框架是MVC流程框架,适合分层开发.框架应用实现不依赖于Servlet,使用大量的拦截器来处理用户请求,属于无侵入式的设计. 2 ...

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

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  3. java框架篇---Struts2的处理流程

    一.Struts2的处理流程: 客户端产生一个HttpServletRequest的请求,该请求被提交到一系列的标准过滤器(Filter)组建链中(如ActionContextCleanUp:它主要是 ...

  4. Struts2框架的运行流程

    Struts2的运行流程 1.浏览器发送请求到控制器(如Struts2中的核心控制器StrutsPrepareAndExecuteFilter): 2.控制器调用Action的execute方法: 3 ...

  5. Struts2框架学习(二)——访问流程及架构

    1.Struts2的执行流程 从客户端发送请求过来,先经过前端控制器(核心过滤器StrutsPrepareAndExecuteFilter)过滤器中执行一组拦截器(一组拦截器就会完成部分功能代码),拦 ...

  6. Struts2框架基础

    Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...

  7. Struts2框架简介和示例

    struts2框架 Struts2是java web的框架,在Java Web开发中,表示层框架,其核心是通过扩展Servlet来帮助处理http请求. Struct2的基本流程 Struct2的框架 ...

  8. Struts2框架之-注解开发

    Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action类中每个方法的绑定这是重点,在这里先简单看一下配置文件中的简单配置: <span style=" ...

  9. struts2框架快速入门小案例

    struts2快速入门: index.jsp------>HelloAction--------->hello.jsp struts2流程 1.导入jar包 struts2的目录结构: a ...

随机推荐

  1. 生成ARM汇编

    使用ndk即可生成arm汇编 1.首先写好hello.c 2.编写makefile #ndk根目录 NDK_ROOT=E:\Android\android-ndk-r10b #编译器根目录 TOOLC ...

  2. Win10搭建Linux开发环境之网络连接设定

    一直想在家自己搭建一个LINUX服务器,好在上面安装个ORACLE数据库玩玩. 上次用了Ubuntu,结果ORACLE没装成功,现在换个思路,采用CentOS 7作为Linux服务器, 之后再进行构建 ...

  3. MVC中使用Entity Framework 基于方法的查询学习笔记 (一)

    EF中基于方法的查询方式不同于LINQ和以往的ADO.NET,正因为如此,有必要深入学习一下啦.闲话不多说,现在开始一个MVC项目,在项目中临床学习. 创建MVC项目 1.“文件”--“新建项目”-- ...

  4. ServiceStack.Redis订阅发布服务的调用(Z)

      1.Redis订阅发布介绍Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息.类似于设计模式中的观察者模式.发布者和订阅者之间使用频 ...

  5. October 27th Week 44th Thursday 2016

    The art of being wise is the art of knowing what to overlook. 智慧之道在于懂得该忽略什么. Always do your best. Wh ...

  6. No plugin found for prefix 'mybatis-generator' in the current project

    http://blog.csdn.net/you23hai45/article/details/50792430 1.错误描述 F:\workspaces\Mybatis>mvn mybatis ...

  7. iOS 导出 ipa 包时 四个选项的意义

    iOS 导出 ipa 包时 四个选项的意义 如图  在 iOS 到处 ipa包的时候 会有四个选项 1.Save for iOS App Store Deployment 保存到本地 准备上传App ...

  8. Unity Animation System(动画系统)

    动画系统: 支持:动画融合,混合,叠加动画,行走循环的时间同步,动画层,控制动画的各个方面(时间,速度,融合权重)   带有每顶点1.2或4骨骼的蒙皮网格,以及支持基于物理的布娃娃系统和程序动画.   ...

  9. 名词含义阅读 todolist

    1.node webkit 2.C#设计模式 3.算法导论 4.SQLSERVER RowNum() 5.图片文字识别 6.tuple 7.yield 8.Web语义化 (多用 p ul ol li ...

  10. Web GIS离线解决方案

    1.背景 在离线环境下(局域网中)的GIS系统中如何使用地图?这里的地图主要指的是地图底图,有了底图切片数据,我们就可以看到地图,在上面加上自己的业务数据图层,进行相关操作. 要在离线环境下看到GIS ...