`

Struts2拦截器简要说明

阅读更多

 

转载于:

http://www.mxjava.com/struts2-interceptor.html

拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。拦截器(Interceptor)是Struts 2的核心组成部分。很多功能(Feature)都是构建在拦截器基础之上的,例如文件的上传和下载、国际化、转换器和数据校验等,Struts 2利用内建的拦截器,完成了框架内的大部分操作。

  Struts2的拦截器和Servlet过滤器类似。在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法。要实一个拦截器,你必须继承com.opensymphony.xwork2.interceptor.Interceptor接口,并实现Intercepter接口的以下三个方法:

  1. void destroy(); 
  2. void init(); 
  3. String intercept(ActionInvocation invocation) throws Exception; 

拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。

  destroy和init不用多说,intercept方法是拦截器的核心方法,所有安装的拦截器都会调用这个方法。Struts 2已经为提供丰富多样的,功能齐全的拦截器实现。可以到struts2-all-2.0.1.jar或struts2-core-2.0.1.jar包的struts-default.xml查看关于默认的拦截器与拦截器链的配置。

   timer是Struts2中最简单的拦截器,这个拦截器对应的类是com.opensymphony.xwork2.interceptor.TimerInterceptor。它的功能是记录execute方法和其他拦截器(在timer后面定义的拦截器)的intercept方法执行的时间总和。

  1. <action name="first" class="action.FirstAction"> 
        <interceptor-ref name="logger"/> 
        <interceptor-ref name="timer" /> 
    </action> 
     

  在使用timer拦截器时,需要commons-logging.jar的支持。将logger引用放到timer的后面,就可以记录logger拦截器的intercept方法和Action的execute方法的执行时间总和,代码如下:

  1. <action name="first" class="action.FirstAction"> 
  2.     <interceptor-ref name="timer" /> 
  3.     <interceptor-ref name="logger"/> 
  4. </action> 

  使用以下Action类来测试timer拦截器。

  1. package action; 
    import com.opensymphony.xwork2.ActionSupport; 
     
    public class FirstAction extends ActionSupport           
    { 
           public String execute() throws Exception { 
               Thread.sleep(1000); // 延迟1秒 
               return null; 
           } 
    } 
    
       当客户端的一个form向服务端提交请求时,如有一个textfield,代码如下:
  1. <s:form action="first" namespace="/test"> 
       <s:textfield name="name"/> 
       <s:submit/> 
    </s:form> 
     

  提交后,Struts2将会自动调用first动作类中的setName方法,并将name文本框中的值通过setName方法的参数传入。实际上,这个操作是由params拦截器完成的,params对应的类是com.opensymphony.xwork2.interceptor.ParametersInterceptor。由于params已经在defaultStack中定义,因此,在未引用拦截器的<action>中是会自动引用params的,如下面的配置代码,在访问first动作时,Struts2会自动执行相应的setter方法。  

  1. <action name="first" class="action.FirstAction"> 
  2.     … … 
  3. </action> 

  如果在<action>中引用了其他的拦截器,就必须再次引用params拦截器,Struts2才能调用相应的setter方法。如下面的配置代码所示:

  1. <action name="first" class="action.FirstAction"> 
        <interceptor-ref name="timer" /> 
        <interceptor-ref name="params"/> 
    </action>
      

  static-params拦截器可以通过配置<params>标签来调用Action类的相应的setter方法,static-params拦截器对应的类是com.opensymphony.xwork2.interceptor.StaticParametersInterceptor。

  1. <action name="first" class="action.FirstAction"> 
        <interceptor-ref name="timer" /> 
        <param name="who">比尔</param> 
        <interceptor-ref name="params"/> 
        <interceptor-ref name="static-params"/> 
    </action> 
     

  如果first动作使用上面的配置,在访问first动作时,Struts2会自动调用setWho方法将“比尔”作为参数值传入setWho方法。

  为了能在多个动作中方便地引用同一个或几个拦截器,可以使用拦截器栈将这些拦截器作为一个整体来引用。拦截器栈要在<package>标签中使用<interceptors>和子标签<interceptor-stack>来定义。代码如下:

  1. <package name="demo" extends="struts-default" > 
        <interceptors> 
            <interceptor-stack name="mystack"> 
                <interceptor-ref name="timer" /> 
                <interceptor-ref name="logger" /> 
                <interceptor-ref name="params" /> 
                <interceptor-ref name="static-params" /> 
            </interceptor-stack> 
        </interceptors> 
     
        <action name="first" class="action.FirstAction"> 
            <param name="who">比尔</param> 
            <interceptor-ref name="mystack"/>             
        </action> 
    </package> 
     
分享到:
评论

相关推荐

    struts2基础简要介绍

    1. **Struts2的体系结构**:Struts2框架的核心组件包括过滤器(Filter)、拦截器(Interceptor)、配置文件(如struts.xml)以及Action等。其中过滤器是入口点,拦截器用于控制Action的执行流程。 2. **Struts2配置...

    struts2简要教程

    Struts2基于拦截器模式,使得它在处理请求和响应时更加灵活,支持多种视图技术如JSP、FreeMarker、Velocity等。 ### 2. MVC模式与Struts2 MVC模式是软件设计中的经典模式,Struts2完全遵循这一模式。模型负责业务...

    Struts2初步使用总结

    Struts2提供了一系列默认的拦截器,并允许用户自定义拦截器。 **3.3 ActionMapper** `ActionMapper`负责将HTTP请求映射到对应的Action上。大部分情况下,`ActionMapper`并不需要显式配置,它会自动根据请求路径...

    中兴struts2 时序图

    8. **Interceptor(拦截器)**: Struts2的拦截器机制允许在Action执行前后插入自定义的逻辑,如权限验证、日志记录等。时序图会展示多个拦截器的执行顺序。 9. **Dispatcher Servlet**: 最后,Dispatcher Servlet将...

    Struts2入门教程(全新完整版)

    一、准备工作及实例 3 1.解压struts-2.1.6-all.zip 3 2.六个基本包 3 3.初识struts2配置文件 4 ... 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图来看: 60

    struts2简要的jar包

    学习Struts2不仅需要理解这些核心库的功能,还需要了解如何配置Action、拦截器、结果类型,以及如何利用OGNL进行数据绑定,同时掌握FreeMarker模板的编写和文件上传的处理。通过实践,开发者可以逐步熟练掌握Struts2...

    Struts2配置详解

    Struts2的核心配置文件主要负责定义应用的行为逻辑,包括但不限于Action的映射、拦截器的配置以及结果类型的定义等。例如,在示例代码中可以看到`&lt;struts&gt;`标签下的内容: ```xml &lt;struts&gt; &lt;!-- 配置项 --&gt; &lt;/...

    struts2常用jar包

    1. struts2-core-2.3.4.1.jar:这是Struts2的核心库,包含了框架的基础功能,如Action类、Result类型、拦截器、配置管理等。它是所有Struts2应用的基础,没有它,其他组件无法正常工作。 2. xwork-core-2.3.4.1.jar...

    Struts2多个漏洞简要分析1

    默认情况下,这个拦截器并不启用,只有当开发者显式配置某个Action使用它时,漏洞才会被暴露。攻击者需要知道哪个Action启用了这个配置,这增加了发现漏洞的难度。示例配置如下: ```xml * * ...

    struts2源代码分析

    5. `org.apache.struts2.interceptor`:定义了内置的拦截器,这些拦截器可以在请求处理前或后执行特定任务,如认证、授权、日志记录等。 6. `org.apache.struts2.util`:提供了一些实用工具类。 7. `org.apache....

    struts2讲义.doc

    - **拦截器**:拦截器是Struts 2的重要组成部分,它们可以在请求到达Action之前或之后执行特定的任务,如验证、转换、记录等。 - **FilterDispatcher和Action**:FilterDispatcher是Struts 2的前端控制器,它负责...

    Spring+Struts2+JPA

    2. **配置Struts2**:添加Struts2的库依赖,编写struts.xml配置文件,设置全局结果类型、拦截器栈等。定义Action类,并使用Spring插件进行注入。 3. **配置JPA**:添加JPA和持久化提供者(如Hibernate)的依赖,...

    struts2的加载

    Struts2是Apache组织下的一个开源Web应用框架,它继承了Struts1的优良特性,并在此基础上进行了大量改进,引入了拦截器、类型转换、文件上传/下载等众多实用功能,使得开发更为高效便捷。接下来,我们将详细解析...

    struts2笔记 Word文档

    3. **拦截器**:拦截器是Struts2的一个重要特点,它们按照预定义的顺序在Action执行前后执行,可以用来实现如日志记录、权限检查、事务管理等功能。开发者可以根据需求自定义拦截器。 4. **结果类型**:Struts2支持...

    Struts2 登陆小案例

    3. **拦截器(Interceptor)**:Struts2的拦截器机制允许在Action调用前后执行额外的逻辑。对于登录,可能会使用验证拦截器检查用户输入是否有效,或者安全拦截器确保用户已登录才能访问特定资源。 4. **结果类型...

    Struts2框架整合Spring框架在文件上传下载中的应用基于HT T P 传输协议, 采用Struts2 框架整合Spring 框架技术对Web 中文件的上传下载进

    Struts2的核心设计采用了拦截器(Interceptor)模式,这使得它可以轻松地扩展和定制,同时也具备了更好的性能。 ##### 2.2 Struts2的体系结构 Struts2的体系结构以拦截器为核心,用户的业务逻辑控制器为目标。当...

    Struts2权威指南源代码

    目录通常会包含每个章节的标题,比如"Struts2核心概念"、"拦截器原理"、"结果类型与视图解析"等,这对于理解和探索源代码至关重要。 2. **光盘说明.txt**:这份文档可能包含了获取和使用这些源代码的指南,包括任何...

    struts2的速成教程,充电的都来看了

    - **使用拦截器**:详细介绍Struts2中预定义的拦截器及其应用场景。 - **自定义拦截器**:讲解如何根据需求编写自定义拦截器以增强应用的功能。 - **综合示例**:提供一个包含多种拦截器的实际应用案例。 #### 七、...

    struts-2.0.14源代码

    2. **Interceptor(拦截器)**: 拦截器是Struts 2中一个强大的特性,它允许在Action执行前后插入自定义逻辑。例如,`ParamsInterceptor`用于处理请求参数,`ValidationInterceptor`进行字段验证。在`src`目录下的`...

Global site tag (gtag.js) - Google Analytics