`
mujun1209
  • 浏览: 21100 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2 --拦截器&工作流程概述

阅读更多
  记得一次面试当面试官问起我有关struts2是如何把参数直接封装到action 的属性当中的。在那一秒我竟然想不起struts到底是如果做到的,只知道它做到了。很多时候我们在写代码,只是在为了功能而去写,去用到一些工具,然后按照配置,按照套路,一步一步的去走,可以实现,有时候可能大概的知道可能是如何如何实现的。却很少去真正的弄清楚。 当面试完了,突然我想起来,struts 2之所以可以有那么神奇,只是因为他有强大的一组Interceptor 在帮着做一些我们不用关心的事!
   google一下,可以发现struts2的核心就是Interceptor。但是拦截器,到底是怎么样可以实现那么多神奇的效果和功能的呢?
   其实,Interceptor就是一个aop,也许只是在spring当中听到aop比较多,却不知道aop 是几乎很多开源框架都会用到的模式。而aop那么神奇有到底怎么样可以在一个方法执行前,执行后,拦截到的呢。
   其实,aop的实现就是动态代理。我的理解就是代理模式+反射。在运行时真正执行并不是我写的那些action而是struts的action代理。 如果想了解动态代理,我的博客里有一篇 java动态代理机制分析,文章来自 ibm 的大牛,解析的很全面。
  
     下面回到struts的拦截器,贴一张struts2的工作机制图
   
     从图可以看出,一个请求在Struts2框架中的处理大概分为以下几个步骤:

      1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

      2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);

      3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;

      4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;

       5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;

       6、ActionProxy创建一个ActionInvocation的实例。

       7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

       8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。

注:以上步骤参考至网上,具体网址已忘记。在此表示感谢!
   下面我引用了一些默认拦截器的简单说明;有兴趣可以看下源代码,源码就不贴了。
拦截器
名字
说明

Alias Interceptor
alias
在不同请求之间将请求参数在不同名字件转换,请求内容不变

Chaining Interceptor
chain
让前一个Action的属性可以被后一个Action访问,现在和chain类型的result(<result type=”chain”>)结合使用。

Checkbox Interceptor
checkbox
添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox。

Cookies Interceptor
cookies
使用配置的name,value来是指cookies

Conversion Error Interceptor
conversionError
将错误从ActionContext中添加到Action的属性字段中。

Create Session Interceptor
createSession
自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。

Debugging Interceptor
debugging
提供不同的调试用的页面来展现内部的数据状况。

Execute and Wait Interceptor
execAndWait
在后台执行Action,同时将用户带到一个中间的等待页面。

Exception Interceptor
exception
将异常定位到一个画面

File Upload Interceptor
fileUpload
提供文件上传功能

I18n Interceptor
i18n
记录用户选择的locale

Logger Interceptor
logger
输出Action的名字

Message Store Interceptor
store
存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。

Model Driven Interceptor
model-driven
如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。

Scoped Model Driven
scoped-model-driven
如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。

Parameters Interceptor
params
将请求中的参数设置到Action中去。

Prepare Interceptor
prepare
如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。

Scope Interceptor
scope
将Action状态存入session和application的简单方法。

Servlet Config Interceptor
servletConfig
提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。

Static Parameters Interceptor
staticParams
从struts.xml文件中将<action>中的<param>中的内容设置到对应的Action中。

Roles Interceptor
roles
确定用户是否具有JAAS指定的Role,否则不予执行。

Timer Interceptor
timer
输出Action执行的时间

Token Interceptor
token
通过Token来避免双击

Token Session Interceptor
tokenSession
和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中

Validation Interceptor
validation
使用action-validation.xml文件中定义的内容校验提交的数据。

Workflow Interceptor
workflow
调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面

Parameter Filter Interceptor
N/A
从参数列表中删除不必要的参数

Profiling Interceptor
profiling
通过参数激活profi
-----------------------------------------------
  关于struts 拦截器,还有自定义拦截器,相信都有一些了解,和应用,google一下,很多实例。也就不重复贴了。
分享到:
评论

相关推荐

    struts2-core-2.3.7源码

    3. **Interceptor(拦截器)**: 拦截器是Struts2的核心特性,它们按照预设的顺序执行,可以在Action执行前后进行额外的操作,如日志记录、权限检查等。 4. **Value Stack**: 用于存储Action实例和其他Action上下文...

    struts2拦截器的使用方法

    #### 一、Struts2拦截器概述 Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活地控制程序流程,提高代码的复用...

    struts2-portlet学习手册

    - **配置文件**:Struts2-Portlet使用XML文件来配置各个组件之间的关系,包括Action映射、拦截器等。这些配置文件对于控制应用程序的流程至关重要。 #### 七、实践经验分享 - **最佳实践**:在实际开发过程中,遵循...

    Java Struts 实现拦截器

    其中,拦截器(Interceptor)是Struts2中的一个关键特性,用于扩展框架的功能,实现诸如事务管理、权限控制、输入验证等功能。 #### Struts2的处理流程 1. **客户端请求**: 当客户端发起HTTP请求时,请求首先到达...

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_9_拦截器 共32页.pptx

    #### 一、Struts2拦截器概述 **知识点1:拦截器的概念** - **定义**: 拦截器(Interceptor)是Struts2框架的一个核心特性。它负责在Action执行前后进行一系列操作。 - **功能**: Struts2框架的许多核心功能都是...

    Struts---------教程.rar

    1. **拦截器**:Struts2使用拦截器链来处理请求,拦截器可以实现AOP(面向切面编程)功能,如日志、事务管理等。 2. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为表达式语言,简化了模型数据...

    starting-struts2-chinese

    - **内置拦截器**:Struts2提供了一系列内置的拦截器,如ParametersInterceptor、ValidationInterceptor等。 - **自定义拦截器**:开发者也可以根据需求编写自定义的拦截器。 ##### 3.3 值栈与OGNL - **值栈**:...

    Struts2的拦截器

    Struts2的拦截器机制极大地提高了代码的复用性和可维护性,通过内置和自定义的拦截器,开发者可以灵活地控制Action的执行流程,处理各种公共行为,从而构建出更加健壮和高效的Web应用。理解和掌握Struts2的拦截器,...

    J2EE(Struts_拦截器)

    通过查看和运行这个项目,你可以更直观地了解拦截器的工作流程和实际应用。 总之,Struts2的拦截器是实现业务逻辑和控制逻辑分离的关键工具,它提高了代码的可复用性和可维护性,使得在大型项目中可以更方便地管理...

    struts2拦截器的使用

    Struts2的拦截器机制提供了一个灵活的方式来控制Action的执行流程。拦截器链是由多个拦截器组成的一个列表,它们按照一定的顺序被执行。 #### 三、示例需求解析 本示例的需求是实现一个简单的登录功能,具体包括:...

    Struts2视频教程

    - **深入源码**:针对某些重要知识点,比如Action的执行流程、拦截器的工作原理等,本教程还会带领学员一起探索源码,加深对框架内部机制的理解。 ### 结语 通过以上对Struts2各个方面的介绍,可以看出Struts2不仅...

    Struts2 框架概述

    Struts2采用了一种基于拦截器(Interceptor)的设计模式,这一设计大大增强了框架的灵活性和扩展性。通过定义不同的拦截器,可以方便地控制Action的执行流程,实现诸如权限验证、数据校验等功能。 - **核心组件**:...

    Struts-Spring-Hibernate概述

    Struts框架提供了一套详细的机制,包括动作类、配置文件和拦截器,来协调应用程序的各个部分,使得开发者可以更有效地管理用户界面和后端逻辑。 Spring框架则是一个全面的企业级应用框架,它不仅包含Struts的MVC...

    struts-2.5.12-all.zip

    通过研究“struts-2.5.12-all.zip”中的源代码,开发者不仅可以了解Struts 2的工作流程,还可以学习到如何利用该框架构建高效、健壮的Web应用,同时提升自己的Java编程技巧和MVC设计模式的理解。

    struts2工作流程

    ### Struts2工作流程详解 #### 一、Struts2框架概述 Struts2作为一款流行的Java Web开发框架,其核心目标就是简化Web应用的开发流程。它通过一系列的组件和设计模式,使得开发者能够更加高效地构建出稳定且可维护...

    struts2 配置jar包和超详细笔记

    Struts2的核心在于它的工作流程:用户请求 -&gt; 拦截器处理 -&gt; 行动类执行 -&gt; 视图渲染。 二、Struts2环境配置 1. **JDK**:首先确保已安装Java Development Kit,并设置好JAVA_HOME环境变量。 2. **IDE**:可以选择...

    精通Struts ---基于MVC的Java Web设计与开发3

    4. **配置文件(struts-config.xml)**:配置Struts框架的行为,包括定义Action映射、配置拦截器等。 #### 三、Struts的工作流程 1. 用户通过浏览器向服务器发送请求。 2. 请求首先被转发给ActionServlet。 3. ...

    15年9月传智播客视频struts2

    1. **灵活性高**:Struts2提供了丰富的拦截器机制,可以根据实际需求灵活地配置不同的拦截器,实现业务逻辑的解耦。 2. **易用性好**:内置了大量的标签库,方便开发者快速构建Web页面;支持多种视图技术,如JSP、...

Global site tag (gtag.js) - Google Analytics