拦截器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

相关文章

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h