资讯专栏INFORMATION COLUMN

Struts2拦截器

dendoink / 2789人阅读

摘要:自定义的拦截器可以和框架内置的拦截器进行混合使用,一般情况拦截器都被默认配置成为执行的基础。若类型转换失败,或者数据验证失败,拦截器就会阻止的执行。

1.拦截器简介

默认的拦截器在设计的时候就能满足大部分的应用,所以很多时候就不需要添加自定义的拦截器或者修改拦截器栈。很多action有各种各样的需求,比如输入验证、文件上传、防止多次提交等等。于是struts框架就提供了一个解决方案,Interceptor策略。当你请求一个action时,在执行当前action之前,会执行拦截,执行完action之后会再次进行拦截。这个过程通称为拦截器

由于拦截器在action执行前后都会被执行,所以struts2的框架的核心功能大部分都作为拦截器进行实现,比如类型转换、数据验证等等,并且这些功能都是可插拔的,所以在使用时可以决定action使用哪些功能。自定义的拦截器可以和框架内置的拦截器进行混合使用,一般情况拦截器都被默认配置成为action执行的基础。若类型转换失败,或者数据验证失败,拦截器就会阻止action的执行。

2.拦截器配置

在大部分应用中,如果会多次使用同一系列的拦截器,可以将这些拦截器进行整理,聚合成Interceptor Stack


   
        
        
        
           
           
        
    
 

         
         login.jsp
         /secure/home

struts2框架默认的拦截器在struts2-core-2.3.24.1.jar包中的struts-default.xml中。

Interceptor Name Description
Alias Interceptor alias 允许参数在跨越多个请求时使用不同别名,这个拦截器可将多个action使用不同名字链接起来,然后用于处理同一信息
Chaining Interceptor chain 允许当前action能够使用上一个被执行action的属性,这个拦截器通常要和“chain”结果类型一起使用(
Checkbox Interceptor checkbox 为没有被选定的多选框增加一个值为false的参数,协助管理多选框(在HTTP请求里,那些没有被选定的多选框通常是没有任何信息的
Cookie Interceptor cookie 使用配置的name,value来指定cookies
CookieProvider Interceptor cookieProvider 将cookies从action传输到response
Conversion Error Interceptor conversionError 将转换错误的信息(包括转换的字符串和参数类型等)存放到action的字段错误集里去
Create Session Interceptor createSession 自动创建一个HttpSession会话(如果会话不存在),用来为需要使用到HttpSession的拦截器服务
DebuggingInterceptor debugging 当使用Struts2的开发模式时,此拦截器会提供更多的调试信息,为开发者提供几种不同调试界面
DeprecationInterceptor deprecation 当devMode设置为on,会将所有未知或过时的设置打上log
Execute and Wait Interceptor execAndWait 当action在后台执行时,给用户显示一个过渡性的等待页面
Exception Interceptor exception 将action抛出的异常映射到结果,这样就通过重定向来自动处理异常,一般情况下,应该为最后一个拦截器
File Upload Interceptor fileUpload 此拦截器主要用于文件上传,它负责解析表单中文件域的内容
I18n Interceptor i18n 这是支持国际化的拦截器,它负责把所选的语言、区域放入用户Session中
Logger Interceptor logger 通过输出被执行action的名字,提供简单的日志功能,记录用于追踪的信息(可位于拦截器序列的不同位置)
Message Store Interceptor store 在会话中为action存储和检索消息、字段错误以及action错误,该拦截器要求action实现ValidationAware接口
Model Driven Interceptor modelDriven 这是一个用于模型驱动的拦截器,当某个Action类实现了ModelDriven接口时,它负责把getModel()方法的结果放入ValueStack中
Scoped Model Driven Interceptor scopedModelDriven 如果一个Action实现了一个ScopedModelDriven接口,该拦截器负责从指定生存范围中找出指定的Modol,并将通过setModel方法将该Model传给Action实例
Parameters Interceptor params 这是最基本的一个拦截器,它负责解析HTTP请求中的参数,并将参数值设置成Action对应的属性值
Prepare Interceptor prepare 如果action实现Preparable接口,将会调用该拦截器的prepare()方法
Scope Interceptor scope 这是范围转换拦截器,它可以将Action状态信息保存到HttpSession范围,或者保存到ServletContext范围内。
Servlet Config Interceptor servletConfig 如果某个Action需要直接访问ServletAPI,就是通过这个拦截器实现,它提供访问HttpServletRequest和HttpServletResponse的方法,以map的方式访问
Static Parameters Interceptor staticParams 设置action里的静态定义值(通过action配置里的param标签来实现);这个拦截器负责将struts.xml文件中标签下标签中的参数传入action
Roles Interceptor roles 这是一个JAAS(Java Authentication and Authorization Service,Java授权和认证服务)拦截器,只有当浏览者取得合适的授权后,才可以调用被该拦截器拦截的Action
Timer Interceptor timer 以执行action所花时间的形式,简单记录action概要信息,此拦截器负责输出Action的执行时间,可以利用此拦截器分析该Action的性能瓶颈
Token Interceptor token 以执行action所花时间的形式,简单记录action概要信息,此拦截器负责输出Action的执行时间,可以利用此拦截器分析该Action的性能瓶颈
Token Session Interceptor tokenSession 和Token类似,但是遇到无效的token会将提交数据保存到session中
Validation Interceptor validation 通过执行在xxxAction-validation.xml中定义的校验器,从而完成数据校验。
Default Workflow Interceptor workflow 为action定义默认的工作流,一般跟在validation等其他拦截器后,当验证失败时,不执行action然后重定向到INPUT视图
Parameter Filter Interceptor N/A 控制action对参数的访问(非默认配置
Profiling Interceptor profiling 允许action记录简单的概要信息日志
Multiselect Interceptor multiselect 当一个select标签设置成多选后(就是你写的这种),没有一个option被选中的时候,会自动设置一个空值
3.自定义拦截器

所有的拦截器都必须实现com.opensymphony.xwork2.interceptor.Interceptor这个接口,如下:

public interface Interceptor extends Serializable {
 
    void destroy();
 
    void init();
 
    String intercept(ActionInvocation invocation) throws Exception;
}

struts2的每一个request会请求一个action,因此不用担心线程安全问题,但是Interceptor会在多个request的中使用,所以必须要保证线程安全。

我们自定义的拦截器可以继承 AbstractInterceptor抽象类, AbstractInterceptor提供了一个而空的init和destory方法,若没有实现这两个方法的需求,可以直接重写intercept方法。

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
 
public class SimpleInterceptor extends AbstractInterceptor {
 
    public String intercept(ActionInvocation invocation) throws Exception {
       MyAction action = (MyAction)invocation.getAction();
       action.setDate(new Date());
       return invocation.invoke();
    }
}

然后在struts2.xml文件中进行配置

   
      
         
         
         ...
      
   

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65726.html

相关文章

  • Struts2截器】就是这么简单

    摘要:文件上传通过这个拦截器拦截器的设计就是基于组件设计的应用再次回顾拦截器基础在开始讲解的时候已经说明过了这个文件,它定义了的所有拦截器。由于我们配置了自定义拦截器,那么默认的拦截器栈是不会执行的。 什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了...

    chanjarster 评论0 收藏0
  • 面试题:SpringMVC和Struts2的区别

    摘要:的入口是,而是这里要指出,和是不同的。以前认为是的一种特殊,这就导致了二者的机制不同,这里就牵涉到和的区别了。开发效率和性能高于。的实现机制有以自己的机制,用的是独立的方式。 1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC...

    isaced 评论0 收藏0
  • Struts2开发流程

    摘要:的开发流程在文件中定义核心拦截用户请求。的最大作用是配置和请求之间的对应关系,并配置逻辑视图名和物理视图资源之间的相对关系,即返回结果和文件的物理位置的关系。实现为了使开发的更规范,提供了一个接口,定义了的处理应该实现的规范。 1.struts2的开发流程 在web.xml文件中定义核心Filter拦截用户请求。 struts2 org.apa...

    Leo_chen 评论0 收藏0
  • Struts2配置文件

    摘要:执行中的方法,默认执行方法返回结果同样会通过一系列拦截器,然后由指定的表现形式返回,比如,或字面值配置文件利用配置文件初始化一系列的相关资源,这个底层实现技术属于依赖注入。会通过配置文件初始化的资源包括拦截器,类及。 1.Struts2简介 框架是一组程序的集合,包含了一系列的最佳实践,作用是解决某个领域的问题。本质上来讲,框架只是一个jar包,其本质上是对jdk的扩展。 最佳实践:...

    jifei 评论0 收藏0
  • Struts2入门这一篇就够了

    摘要:现在,我们使用了的话,那么框架内部就能帮我们封装了。每个中都有和这样的方法,没必要的。我们抽取出来,通过配置文件来把这两个方法替换掉,那么我们的程序就会更加优雅了。于是乎,就应运而生了。因此,学习的时候,不了解是没有任何关系的。 前言 这是Strtus的开山篇,主要是引入struts框架...为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门.....

    Scliang 评论0 收藏0

发表评论

0条评论

dendoink

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<