拦截器可以实现横切(crosscutting)功能并使这些实现相对action甚至Struts 2框架保持独立。这样可以使核心框架代码比以前更加简洁,且使开发人员更快捷地使用新框架的特性。实际上,松耦合机制意味着用户再也不用等着框架来实现他们所需的新特性;相反,它们可以实现和使用自己所需的特性且不用修改框架的底层源代码。
使用拦截器可以达到如下所描述的目的。
在调用action之前,提供预处理(preprocessing)逻辑。
与action进行交互,提供执行信息,比如受Spring管理的对象、设置action里的请求参数等。
在调用action之后,提供后处理(postprocessing)逻辑。
修改返回的结果,进而修改呈现给用户的内容。
捕获异常从而替换可执行的处理过程或返回一个不同结果。
很多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
|
提供执行与等待栈,比如在上传文件时需要向用户显示一个等待页面时,就可以使用这个栈
|
分享到:
相关推荐
2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...
在Struts2中,拦截器(Interceptors)扮演着核心角色,增强了框架的功能和灵活性。这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP...
标题“struts2拦截器”指的是Struts2框架中的拦截器机制,这是一个关键的组件,可以让我们在不修改实际业务代码的情况下,实现对请求处理流程的扩展和定制。 描述中提到的“基于struts2的拦截器测试,实现了页面的...
Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)
拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...
### Struts2拦截器详解 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的一种流行框架,其核心组件之一便是**拦截器**。拦截器不仅在Struts2中扮演着重要角色,更是整个框架灵活性与扩展性的基石。...
在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在Action执行前后插入自定义的逻辑,如日志、权限检查、事务管理等。现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截...
在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...
### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活...
当请求到达控制器时,Struts2会依次调用这个栈中的拦截器,每个拦截器都有机会处理请求,然后决定是否将请求传递给下一个拦截器或直接返回响应。 创建一个简单的Struts2拦截器,你需要遵循以下步骤: 1. 创建拦截...
Struts2拦截器.ppt Struts2拦截器.ppt Struts2拦截器.ppt
拦截器是Struts2框架的核心组成部分,它们在请求处理流程中起到了关键的作用。在本文中,我们将深入探讨Struts2拦截器的工作原理。 ### 一、拦截器概念 拦截器是基于Java的动态代理机制实现的,它允许我们在Action...
拦截器是Struts2框架的一个重要组成部分,能够帮助开发者实现一些在请求处理前后执行的通用逻辑,如日志记录、权限验证、数据校验等。在本场景中,我们将探讨如何使用Struts2拦截器来实现对不文明字迹或者敏感词汇的...
拦截器是Struts2框架的核心组件之一,它允许开发者在动作执行前后插入自定义逻辑,实现如权限验证、日志记录、性能优化等多种功能。在"Struts2 拦截器注解"这个主题中,我们将深入探讨如何利用注解来简化拦截器的...
这篇博客“Struts2 拦截器的执行顺序(二十九)”可能探讨了Struts2拦截器链的工作原理和它们的执行顺序,这对于理解Struts2的内部机制至关重要。 首先,让我们深入理解Struts2的拦截器。拦截器是在Action调用前后...
这篇博客“struts2 拦截器实现登录控制”显然会探讨如何利用拦截器来实现用户登录验证,从而保护应用程序的受保护资源。 首先,我们了解下Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念,它位于...
### Struts2 拦截器与验证框架详解 #### 一、Struts2概述 Struts2是一个基于Java的企业级Web应用开发框架,它继承了Struts1的优点,并在此基础上进行了很多改进,使得开发更加灵活高效。Struts2的核心是拦截器...
在Struts2中,拦截器扮演着至关重要的角色,它们是实现MVC(Model-View-Controller)架构的关键组件之一。拦截器允许开发者在动作执行前后插入自定义逻辑,比如日志记录、权限检查、数据验证等,而无需修改核心业务...