webber

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  11 Posts :: 2 Stories :: 3 Comments :: 0 Trackbacks

 

3.2.2  拦截器介绍

拦截器可以实现横切(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

调用actionprepare()方法,该拦截器要求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

exceptionservletConfigpreparecheckboxparamsconversionError

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

validationWorkflowStack

basicStackvalidationworkflow

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

fileUploadStack

fileUploadbasicStack

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

modelDrivenStack

modelDrivenbasicStack

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

chainStack

chainbasicStack

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

i18nStack

i18nbasicStack

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

(续)

已配置栈名

包含的拦截器

   

paramPrepareParamsStack

exceptionaliasparamsservletConfigpreparei18nchainmodelDrivenfile- UploadcheckboxstaticParamsparamsconversionErrorvali- dationworkflow

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

defaultStack

exceptionaliasservlet- Configpreparei18nchaindebuggingprofilingscoped- ModelDrivenmodelDrivenfileUploadcheckboxstatic- Paramsparamsconversion- Errorvalidationworkflow

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

executeAndWaitStack

execAndWaitdefaultStackexecAndWait

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

Struts2XWork)提供的拦截器的功能说明:

 

 

拦截器

名字

说明

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调用ActionsetModel方法将其放入Action内部。

Parameters Interceptor

params

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

Prepare Interceptor

prepare

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

Scope Interceptor

scope

Action状态存入sessionapplication的简单方法。

Servlet Config Interceptor

servletConfig

提供访问HttpServletRequestHttpServletResponse的方法,以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

调用Actionvalidate方法,一旦有错误返回,重新定位到INPUT画面

Parameter Filter Interceptor

N/A

从参数列表中删除不必要的参数

Profiling Interceptor

profiling

通过参数激活profile

posted on 2010-02-10 16:36 webber 阅读(2430) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: