拦截器介绍

转自:http://book.51cto.com/art/200904/118552.htm


拦截器介绍

拦截器可以实现横切(crosscutting)功能并使这些实现相对action甚至Struts 2框架保持独立。这样可以使核心框架代码比以前更加简洁,且使开发人员更快捷地使用新框架的特性。实际上,松耦合机制意味着用户再也不用等着框架来实现他们所需的新特性;相反,它们可以实现和使用自己所需的特性且不用修改框架的底层源代码。

使用拦截器可以达到如下所描述的目的。

在调用action之前,提供预处理(preprocessing)逻辑。

与action进行交互,提供执行信息,比如受Spring管理的对象、设置action里的请求参数等。

在调用action之后,提供后处理(postprocessing)逻辑。

修改返回的结果,进而修改呈现给用户的内容。

捕获异常从而替换可执行的处理过程或返回一个不同结果。

很多Struts 2特性都是通过拦截器提供的。表3-1列出了Struts 2中已配置好且可随时使用的拦截器。

表3-1  Struts 2框架提供的拦截器

拦 截 器

配 置 名

描    述

别名拦截器(Alias Interceptor)

alias

允许参数在跨越多个请求时使用不同别名,这个拦截器可将多个action使用不同名字链接起来,然后用于处理同一信息

链拦截器(Chaining Interceptor)

chaining

允许当前action能够使用上一个被执行action的属性,这个拦截器通常要和“chain”结果类型一起使用

多选框拦截器(Checkbox Interceptor)

checkbox

为没有被选定的多选框增加一个值为false的参数,协助管理多选框(在HTTP请求里,那些没有被选定的多选框通常是没有任何信息的)

转换错误拦截器(Conversion  Error Interceptor)

conversionError

将转换错误的信息(包括转换的字符串和参数类型等)存放到action的字段错误集里去

会话创建拦截器(Create Session Interceptor)

createSession

自动创建一个HTTP会话(如果不存在会话)

调试拦截器(Debugging Interceptor)

debugging

为开发者提供几种不同调试界面

执行和等待拦截器(Execute and Wait Interceptor)

execAndWait

当action在后台执行时,给用户显示一个过渡性的等待页面

异常拦截器(Exception Interceptor)

exception

将action抛出的异常映射到结果,这样就通过重定向来自动处理异常

文件上传拦截器(File Upload Interceptor)

fileUpload

便于文件上传

国际化拦截器(Internatio- nalization Interceptor)

i18n

在用户会话中跟踪选定的区域(locale)信息

日志拦截器(Logging Interceptor)

logger

通过输出被执行action的名字,提供简单的日志功能

消息存储拦截器(Message Store Interceptor)

store

在会话中为action存储和检索消息、字段错误以及action错误,该拦截器要求action实现ValidationAware接口

模型驱动拦截器(Model Driven Interceptor)

modelDriven

将action的模型对象存放在栈里,该拦截器要求action实现ModelDriven接口

作用域模型驱动拦截器(Scoped Model Driven Interceptor)

scopedModelDriven

在aciton的配置作用域里存储和检索模型对象,该拦截器要求action实现ScopedModelDriven接口

参数拦截器(Parameters Interceptor)

params

在action里设置请求参数

参数过滤拦截器(Parameter Filter Interceptor)

n/a

控制action对参数的访问(非默认配置)

(续)

拦 截 器

配 置 名

描    述

预备拦截器(Prepare Interceptor)

prepare

调用action的prepare()方法,该拦截器要求action实现Preparable接口

概要拦截器(Profiling Interceptor)

profile

允许action记录简单的概要信息日志

作用域拦截器(Scope Interceptor)

scope

在会话和应用作用域中存储和检索action的状态

Servlet配置拦截器(Servlet Configuration Interceptor)

servletConfig

使action能访问servlet里的各种信息

静态参数拦截器(Static Parameters Interceptor)

staticParams

设置action里的静态定义值(通过action配置里的param标签来实现)

角色拦截器(Roles Interceptor)

roles

只有在用户是配置的角色之一时才允许执行action

计时拦截器(Timer Interceptor)

timer

以执行action所花时间的形式,简单记录action概要信息

令牌拦截器(Token Interceptor)

token

检查action的合法令牌,以防止重复提交表单

令牌会话拦截器(Token Session Interceptor)

tokenSession

功能与令牌拦截器相同,但是对于非法令牌,提交的数据将保存在会话中

验证拦截器(Validation Interceptor)

validation

为action提供验证支持

工作流拦截器(Workflow Interceptor)

workflow

当验证失败时,不执行action然后重定向到INPUT视图

每个拦截器为action提供的特性都不一样。你可能已经猜到了,为action提供一个完备的执行环境需使用多个拦截器。为了便于使用,Struts 2允许创建拦截器栈(interceptor stack),由action来引用,而不是为每个action逐个配置所有拦截器。表3-2列出了所有Struts 2框架预配置好的栈,每个栈中包含多个拦截器。有一个很重要的问题必须注意,那就是拦截器是按照配置好的顺序来调用的。

表3-2  Struts 2框架提供的拦截器栈

已配置栈名

包含的拦截器

描    述

basicStack

exception、servletConfig、prepare、checkbox、params、conversionError

如使用栈,最起码要使用这几个拦截器

validationWorkflowStack

basicStack、validation、workflow

在基本栈的基础上增加验证和工作流特性

fileUploadStack

fileUpload、basicStack

在基本栈的基础上增加文件上传特性

modelDrivenStack

modelDriven、basicStack

在基本栈的基础上增加模型功能特性

chainStack

chain、basicStack

在基本栈的基础上增加链接特性

i18nStack

i18n、basicStack

在基本栈的基础上增加区域持久化特性

(续)

已配置栈名

包含的拦截器

描    述

paramPrepareParamsStack

exception、alias、params、servletConfig、prepare、i18n、chain、modelDriven、file- Upload、checkbox、staticParams、params、conversionError、vali- dation、workflow

提供包括前action(pre-action)方法调用的完整栈。params栈使用两次:第一次是在调用prepare()方法之前提供参数,第二次是在预备阶段为可能被检索的对象重新使用参数

defaultStack

exception、alias、servlet- Config、prepare、i18n、chain、debugging、profiling、scoped- ModelDriven、modelDriven、fileUpload、checkbox、static- Params、params、conversion- Error、validation、workflow

提供一个完整栈,包括调试和概要

executeAndWaitStack

execAndWait、defaultStack、execAndWait

提供执行与等待栈,比如在上传文件时需要向用户显示一个等待页面时,就可以使用这个栈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值