拦截器interceptors基本介绍

2024-03-11 04:38

本文主要是介绍拦截器interceptors基本介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

拦截是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可重用的部分的方式.

拦截必须是无状态的,不能保证为每一个请求或者action创建一个实例.拦截可以选择短路一个action调用,然后返回一个结果码(如com.opensymphony.xwork.Action#SUCCESS);也可以选择在ActionInvocation#invoke()之前或者之后做一些处理。

Webwork & XWork Interceptors

拦截以key-value对的方式定义在xwork配置文件中.下面是定义在webwork-default.xml的拦截.如果您扩展webwork-default包,您就可以使用下面的拦截.否则您就必须在自己的包中的<interceptors>标签中定义name-class对.

Interceptor Name Description
Alias Interceptor alias 不同的request中的相似参数别名转换.
Chaining Interceptor chain 使前一个action中的属性在当前action中可用.一般和<result type="chain">一起使用 (在前一个action中).
Component Interceptor component 是Action中可以使用组件.和components.xml有关
Conversion Error Interceptor conversionError 把转型错误信息从ActionContext加到Action的field错误
Create Session Interceptor createSession 自动创建一个HttpSession对象,对于某些需要有HttpSession对象才能正常工作的拦截(如TokenInterceptor) 有用
Execute and Wait Interceptor execAndWait 后台执行action,发送给用户等待画面.
Exception Interceptor exception 把异常映射为结果.
File Upload Interceptor fileUpload 支持文件上传的拦截.更多信息参见javadoc
I18n Interceptor i18n 把所选的地域放入用户session
Logger Interceptor logger 输出Action的名字
Model Driven Interceptor model-driven 如果action实现了ModelDriven接口, 把getModel()的结果堆入valuestack.
Parameters Interceptor params 把request中的参数传入action.
Prepare Interceptor prepare 如果action实现了Preparable接口,调用其prepare()方法.
Scope Interceptor scope 把action的状态存在session或application范围内的简单方法
Servlet Config Interceptor servlet-config 可以直接访问HttpServletRequest和HttpServletResponse (谨慎使用,这样会使action与Servlet过于紧密)
Static Parameters Interceptor static-params 把定义在xwork.xml中的<action>标签下的<param>标签中的参数传入action
Timer Interceptor timer 输出action执行时间(包括内嵌拦截和视图)
Token Interceptor token 检查传到action中的token,防止多次提交
Token Session Interceptor token-session 功能同上,token储存在session中
Validation Interceptor validation 执行定义在xxxAction-validation.xml中的校验
Workflow Interceptor workflow 调用action类中的validate方法,如果产生错误返回INPUT画面.
Parameter Filter Interceptor N/A 根据合法的方法列表来去除一些参数

方法过滤

抽象的拦截可以通过指定included/excluded方法列表来实现可选择性

可以设置的参数如下:

  • excludeMethods - 被排除的方法
  • includeMethods - 被包含的方法

注意: 如果一个方法的名字同时出现在includeMethods和includeMethods里,它会被当作包含的方法。也就是,includeMethods优先于excludeMethods.

扩展了这一能力的拦截有:

  • TokenInterceptor
  • TokenSessionStoreInterceptor
  • DefaultWorkflowInterceptor
  • ValidationInterceptor

拦截参数覆盖

拦截的参数可以通过如下方式被覆盖

方法1:

<action name="myAction" class="myActionClass">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="params"/>
<interceptor-ref name="servlet-config"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="model-driven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="static-params"/>
<interceptor-ref name="params"/>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">myValidationExcudeMethod</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>
</action>

方法2:

<action name="myAction" class="myActionClass">
<interceptor-ref name="defaultStack">
<param name="validator.excludeMethods">myValidationExcludeMethod</param>
<param name="workflow.excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>
</action>

在第一个方法中,整个默认栈都被复制,然后根据需要改变参数。

在第二个方法中,我们引用了已经存在的拦截栈。在这个例子中这个栈是default-stack,然后覆盖了validator和workflow拦截的excludeMethods参数。注意在这个标签的name属性中有一个点(.),点之前的单词表示要被覆盖参数的拦截名,点之后的表示参数。形式如下:

<拦截名>.<参数名>

也要注意到,在这个例子中如果name属性用来表示一个拦截栈,就像指向一个拦截本身,那只能用上面描述的第一种方法.

拦截执行顺序

拦截提供了极好的方式去包装 前/后 处理.这种概念减少了代码重复(就像AOP).

<interceptor-stack name="xaStack">
<interceptor-ref name="thisWillRunFirstInterceptor"/>
<interceptor-ref name="thisWillRunNextInterceptor"/>
<interceptor-ref name="followedByThisInterceptor"/>
<interceptor-ref name="thisWillRunLastInterceptor"/>
</interceptor-stack>

注意一些拦截会打乱stack/chain/flow...所以顺序非常重要.

实现了com.opensymphony.xwork.interceptor.PreResultListener的拦截在Action之后Result之前执行.

executesthisWillRunFirstInterceptor
thisWillRunNextInterceptor
followedByThisInterceptor
thisWillRunLastInterceptor
MyAction1
MyAction2 (chain)
MyPreResultListener
MyResult (result)
thisWillRunLastInterceptor
followedByThisInterceptor
thisWillRunNextInterceptor
thisWillRunFirstInterceptor
 
 
 
   
Children   Hide Children | View in hierarchy
Alias Interceptor (WebWork2文档中文化计划)
Chaining Interceptor (WebWork2文档中文化计划)
Component Interceptor (WebWork2文档中文化计划)
Conversion Error Interceptor (WebWork2文档中文化计划)
Create Session Interceptor (WebWork2文档中文化计划)
Exception Interceptor (WebWork2文档中文化计划)
Execute and Wait Interceptor (WebWork2文档中文化计划)
File Upload Interceptor (WebWork2文档中文化计划)
I18n Interceptor (WebWork2文档中文化计划)
Logger Interceptor (WebWork2文档中文化计划)
Model Driven Interceptor (WebWork2文档中文化计划)
Parameter Filter Interceptor (WebWork2文档中文化计划)
Parameters Interceptor (WebWork2文档中文化计划)
Prepare Interceptor (WebWork2文档中文化计划)
Scope Interceptor (WebWork2文档中文化计划)
Servlet Config Interceptor (WebWork2文档中文化计划)
Static Parameters Interceptor (WebWork2文档中文化计划)
Timer Interceptor (WebWork2文档中文化计划)
Token Interceptor (WebWork2文档中文化计划)
Token Session Interceptor (WebWork2文档中文化计划)
Validation Interceptor (WebWork2文档中文化计划)
Workflow Interceptor (WebWork2文档中文化计划)

这篇关于拦截器interceptors基本介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/796664

相关文章

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

Kafka拦截器的神奇操作方法

《Kafka拦截器的神奇操作方法》Kafka拦截器是一种强大的机制,用于在消息发送和接收过程中插入自定义逻辑,它们可以用于消息定制、日志记录、监控、业务逻辑集成、性能统计和异常处理等,本文介绍Kafk... 目录前言拦截器的基本概念Kafka 拦截器的定义和基本原理:拦截器是 Kafka 消息传递的不可或缺

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,