Struts2默认拦截器解析

使用struts2,拦截器大家经常使用,当然默认情况我们除了自定义的拦截器外,会使用struts2默认的拦截器,那他究竟有哪些默认的拦截器?每个拦截器都是做什么的呢?我们来看下对应的源码,打开对应源码下的struts2-default.xml文件< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> 


Struts2默认拦截器解析(一) - 一线天色 天宇星辰 - 一线天色 天宇星辰

 我们可以看到对应很多的拦截器信息,如下

拦截器信息:

<interceptors>

<interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>

<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>

<interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/>

<interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>

<interceptor name="cookie" class="org.apache.struts2.interceptor.CookieInterceptor"/>

<interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor" />

<interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" />

<interceptor name="externalRef" class="com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor"/>

<interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/>

<interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>

<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

<interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>

<interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/>

<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>

<interceptor name="scopedModelDriven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/>

<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

<interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/>

<interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>

<interceptor name="scope" class="org.apache.struts2.interceptor.ScopeInterceptor"/>

<interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>

<interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>

<interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/>

<interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/>

<interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>

<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>

<interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/>

<interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" />

<interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" />

<interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" />

<interceptor name="roles" class="org.apache.struts2.interceptor.RolesInterceptor" />

<!-- Deprecated name forms scheduled for removal in Struts 2.1.0. The camelCase versions are preferred. See ww-1707 -->

<interceptor name="external-ref" class="com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor"/>

<interceptor name="model-driven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>

<interceptor name="static-params" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>

<interceptor name="scoped-model-driven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/>

<interceptor name="servlet-config" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>

<interceptor name="token-session" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>

拦截器栈信息:

<!-- Basic stack -->

<interceptor-stack name="basicStack">

<interceptor-ref name="exception"/>

<interceptor-ref name="servletConfig"/>

<interceptor-ref name="prepare"/>

<interceptor-ref name="checkbox"/>

<interceptor-ref name="params"/>

<interceptor-ref name="conversionError"/>

</interceptor-stack>

<!-- Sample validation and workflow stack -->

<interceptor-stack name="validationWorkflowStack">

<interceptor-ref name="basicStack"/>

<interceptor-ref name="validation"/>

<interceptor-ref name="workflow"/>

</interceptor-stack>

<!-- Sample file upload stack -->

<interceptor-stack name="fileUploadStack">

<interceptor-ref name="fileUpload"/>

<interceptor-ref name="basicStack"/>

</interceptor-stack>

<!-- Sample model-driven stack -->

<interceptor-stack name="modelDrivenStack">

<interceptor-ref name="modelDriven"/>

<interceptor-ref name="basicStack"/>

</interceptor-stack>

<!-- Sample action chaining stack -->

<interceptor-stack name="chainStack">

<interceptor-ref name="chain"/>

<interceptor-ref name="basicStack"/>

</interceptor-stack>

<!-- Sample i18n stack -->

<interceptor-stack name="i18nStack">

<interceptor-ref name="i18n"/>

<interceptor-ref name="basicStack"/>

</interceptor-stack>

<!-- An example of the params-prepare-params trick. This stack

is exactly the same as the defaultStack, except that it

includes one extra interceptor before the prepare interceptor:

the params interceptor.

This is useful for when you wish to apply parameters directly

to an object that you wish to load externally (such as a DAO

or database or service layer), but can't load that object

until at least the ID parameter has been loaded. By loading

the parameters twice, you can retrieve the object in the

prepare() method, allowing the second params interceptor to

apply the values on the object. -->

<interceptor-stack name="paramsPrepareParamsStack">

<interceptor-ref name="exception"/>

<interceptor-ref name="alias"/>

<interceptor-ref name="params"/>

<interceptor-ref name="servletConfig"/>

<interceptor-ref name="prepare"/>

<interceptor-ref name="i18n"/>

<interceptor-ref name="chain"/>

<interceptor-ref name="modelDriven"/>

<interceptor-ref name="fileUpload"/>

<interceptor-ref name="checkbox"/>

<interceptor-ref name="staticParams"/>

<interceptor-ref name="params"/>

<interceptor-ref name="conversionError"/>

<interceptor-ref name="validation">

<param name="excludeMethods">input,back,cancel</param>

</interceptor-ref>

<interceptor-ref name="workflow">

<param name="excludeMethods">input,back,cancel</param>

</interceptor-ref>

</interceptor-stack>

<!-- A complete stack with all the common interceptors in place.

Generally, this stack should be the one you use, though it

may do more than you need. Also, the ordering can be

switched around (ex: if you wish to have your servlet-related

objects applied before prepare() is called, you'd need to move

servlet-config interceptor up.

This stack also excludes from the normal validation and workflow

the method names input, back, and cancel. These typically are

associated with requests that should not be validated.

-->

<interceptor-stack name="defaultStack">

<interceptor-ref name="exception"/>

<interceptor-ref name="alias"/>

<interceptor-ref name="servletConfig"/>

<interceptor-ref name="prepare"/>

<interceptor-ref name="i18n"/>

<interceptor-ref name="chain"/>

<interceptor-ref name="debugging"/>

<interceptor-ref name="profiling"/>

<interceptor-ref name="scopedModelDriven"/>

<interceptor-ref name="modelDriven"/>

<interceptor-ref name="fileUpload"/>

<interceptor-ref name="checkbox"/>

<interceptor-ref name="staticParams"/>

<interceptor-ref name="params">

<param name="excludeParams">dojo\..*</param>

</interceptor-ref>

<interceptor-ref name="conversionError"/>

<interceptor-ref name="validation">

<param name="excludeMethods">input,back,cancel,browse</param>

</interceptor-ref>

<interceptor-ref name="workflow">

<param name="excludeMethods">input,back,cancel,browse</param>

</interceptor-ref>

</interceptor-stack>

<!-- The completeStack is here for backwards compatibility for

applications that still refer to the defaultStack by the

old name -->

<interceptor-stack name="completeStack">

<interceptor-ref name="defaultStack"/>

</interceptor-stack>

<!-- Sample execute and wait stack.

Note: execAndWait should always be the *last* interceptor. -->

<interceptor-stack name="executeAndWaitStack">

<interceptor-ref name="execAndWait">

<param name="excludeMethods">input,back,cancel</param>

</interceptor-ref>

<interceptor-ref name="defaultStack"/>

<interceptor-ref name="execAndWait">

<param name="excludeMethods">input,back,cancel</param>

</interceptor-ref>

</interceptor-stack>

<default-interceptor-ref name="defaultStack"/>


当然还有很多拦截器栈,我们先来看拦截器

拦截器名< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

AliasInterceptor

【别名拦截器】

配置名

alias

描述

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

对应的类

com.opensymphony.xwork2.interceptor.AliasInterceptor

拦截器名

ActionAutowiringInterceptor

【自动装配拦截器】

配置名

autowiring

描述

信息自动装配的拦截器,主要用于当struts2Spring整合时,Struts可以使用自动装配的方式来访问Spring容器中的Bean.

对应的类

com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor

拦截器名

ChainingInterceptor

【链拦截器】

配置名

chain

描述

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

对应的类

com.opensymphony.xwork2.interceptor.ChainingInterceptor

拦截器名

Checkbox Interceptor

【多选框拦截器】

配置名

checkbox

描述

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

对应的类

org.apache.struts2.interceptor.CheckboxInterceptor

拦截器名

ConversionErrorInterceptor

【转换错误拦截器】

配置名

conversionError

描述

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

对应的类

org.apache.struts2.interceptor.StrutsConversionErrorInterceptor

拦截器名

CookieInterceptor

Cookie拦截器】

配置名

cookie

描述

使用配置的name,value来指定cookies

对应的类

org.apache.struts2.interceptor.CookieInterceptor

拦截器名

ClearSessionInterceptor

【清除Session拦截器】

配置名

clearSession

描述

负责销毁HttpSeesion

对应的类

N/A

拦截器名

CreateSessionInterceptor

【会话创建拦截器】

配置名

createSession

描述

自动创建一个HttpSession会话(如果会话不存在),用来为需要使用到HttpSession的拦截器服务

对应的类

org.apache.struts2.interceptor.CreateSessionInterceptor

拦截器名

DebuggingInterceptor

【调试拦截器】

配置名

debugging

描述

当使用Struts2的开发模式时,此拦截器会提供更多的调试信息,为开发者提供几种不同调试界面

对应的类

org.apache.struts2.interceptor.debugging.DebuggingInterceptor

拦截器名

ExternalReferencesInterceptor

【扩展引用拦截器】

配置名

externalRef

描述

负责扩展引用

对应的类

com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor

拦截器名

ExecuteAndWaitInterceptor

【执行和等待拦截器】

配置名

execAndWait

描述

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

对应的类

org.apache.struts2.interceptor.ExecuteAndWaitInterceptor

拦截器名

ExceptionMappingInterceptor

【异常拦截器】

配置名

exception

描述

action抛出的异常映射到结果,这样就通过重定向来自动处理异常,一般情况下,应该为最后一个拦截器

对应的类

com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor

拦截器名

FileUploadInterceptor

【文件上传拦截器】

配置名

fileUpload

描述

此拦截器主要用于文件上传,它负责解析表单中文件域的内容

对应的类

org.apache.struts2.interceptor.FileUploadInterceptor

拦截器名

Internatio-nalization Interceptor

【国际化拦截器】

配置名

i18n

描述

这是支持国际化的拦截器,它负责把所选的语言、区域放入用户Session

对应的类

com.opensymphony.xwork2.interceptor.I18nInterceptor

拦截器名

Logging Interceptor

【日志拦截器】

配置名

logger

描述

通过输出被执行action的名字,提供简单的日志功能,记录用于追踪的信息(可位于拦截器序列的不同位置)

对应的类

com.opensymphony.xwork2.interceptor.LoggingInterceptor

拦截器名

Message Store Interceptor

【消息存储拦截器】

配置名

store

描述

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

对应的类

org.apache.struts2.interceptor.MessageStoreInterceptor

拦截器名

Model Driven Interceptor

【模型驱动拦截器】

配置名

modelDriven

描述

这是一个用于模型驱动的拦截器,当某个Action类实现了ModelDriven接口时,它负责把getModel()方法的结果放入ValueStack

对应的类

com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor

拦截器名

Scoped Model Driven Interceptor

【作用域模型驱动拦截器】

配置名

scopedModelDriven

描述

如果一个Action实现了一个ScopedModelDriven接口,该拦截器负责从指定生存范围中找出指定的Modol,并将通过setModel方法将该Model传给Action实例

对应的类

com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor

拦截器名

Parameters Interceptor

【参数拦截器】

配置名

params

描述

这是最基本的一个拦截器,它负责解析HTTP请求中的参数,并将参数值设置成Action对应的属性值

对应的类

com.opensymphony.xwork2.interceptor.ParametersInterceptor

拦截器名

Parameter Filter Interceptor

【参数过滤拦截器】

配置名

N/A

描述

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

对应的类

org.apache.struts2.interceptor.ProfilingActivationInterceptor

拦截器名

Prepare Interceptor

【预备拦截器】

配置名

prepare

描述

如果action实现Preparable接口,将会调用该拦截器的prepare()方法

对应的类

com.opensymphony.xwork2.interceptor.PrepareInterceptor

拦截器名

Profiling Interceptor

【概要拦截器】

配置名

profiling

描述

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

对应的类

com.opensymphony.xwork2.interceptor.StaticParametersInterceptor

拦截器名

Scope Interceptor

【作用域拦截器】

配置名

scope

描述

这是范围转换拦截器,它可以将Action状态信息保存到HttpSession范围,或者保存到ServletContext范围内。

对应的类

org.apache.struts2.interceptor.ScopeInterceptor

拦截器名

Servlet Configuration Interceptor

Servlet配置拦截器】

配置名

servletConfig

描述

如果某个Action需要直接访问ServletAPI,就是通过这个拦截器实现,它提供访问HttpServletRequestHttpServletResponse的方法,以map的方式访问

对应的类

org.apache.struts2.interceptor.ServletConfigInterceptor

拦截器名

Static Parameters Interceptor

【静态参数拦截器】

配置名

staticParams

描述

设置action里的静态定义值(通过action配置里的param标签来实现);这个拦截器负责将struts.xml文件中<action>标签下<param>标签中的参数传入action

对应的类

com.opensymphony.xwork2.interceptor.StaticParametersInterceptor

拦截器名

Roles Interceptor

【角色拦截器】

配置名

roles

描述

这是一个JAASJava Authentication and Authorization Service, Java授权和认证服务)拦截器,只有当浏览者取得合适的授权后,才可以调用被该拦截器拦截的Action

对应的类

org.apache.struts2.interceptor.RolesInterceptor

拦截器名

Timer Interceptor

【计时拦截器】

配置名

timer

描述

以执行action所花时间的形式,简单记录action概要信息,此拦截器负责输出Action的执行时间,可以利用此拦截器分析该Action的性能瓶颈

对应的类

com.opensymphony.xwork2.interceptor.TimerInterceptor

拦截器名

Token Interceptor

【令牌拦截器】

配置名

token

描述

检查action的合法令牌,以防止重复提交表单,当表单被多次提交时,跳转到一个错误页面

对应的类

org.apache.struts2.interceptor.TokenInterceptor

拦截器名

Token Session Interceptor

【令牌会话拦截器】

配置名

tokenSession

描述

功能与令牌拦截器相同,但是对于非法令牌,提交的数据将保存在会话中,不跳转到错误页面,再次生成与第一次相同的页面

对应的类

org.apache.struts2.interceptor.TokenSessionStoreInterceptor

拦截器名

ValidationInterceptor

【验证拦截器】

配置名

validation

描述

通过执行在xxxAction-validation.xml中定义的校验器,从而完成数据校验。

对应的类

org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor

拦截器名

Workflow Interceptor

【工作流拦截器】

配置名

workflow

描述

action定义默认的工作流,一般跟在validation等其他拦截器后,当验证失败时,不执行action然后重定向到INPUT视图

对应的类

com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor

拦截器名

JsonValidationInterceptor

Json拦截器】

配置名

jsonValidation

描述

验证失败,此拦截器可以将fieldErrorsactionErrors两个属性给序列化成json返回给客户端

对应的类

com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor

以上就是struts2默认的拦截器,我们大部分时间是不需要单独配置这些拦截器的,一般都是配置对应的拦截器栈,下面我们来看对应的拦截器栈都有哪些?都是做什么的?

已配置栈名

包含的拦截器

描 述

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

提供包括前actionpre-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

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

如果不配置拦截器,默认使用他自己的defaultStack,我们看到,defaultStack包含了基本上所有的拦截器,所以基本上都能满足我们的需求,但是我们一般情况下用不了这么多拦截器栈的,经过这么多拦截器栈肯定会影响性能的,所以我们可以根据不通的场景,选择合适的拦截器栈。如下面的action只需要上传,那我们只需要添加上次的拦截器即可!

<?xml version="1.0" encoding="UTF-8"?>< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

 

<struts>

    <package name="upload" namespace="/front/upload" extends="struts-default">

       <!--   对应报下面值包含fileUploadStack拦截器栈-->

       <default-interceptor-ref name="fileUploadStack"></default-interceptor-ref>

       <action name="upload" class="com.shunwang.passport.actu.web.ActuUploadAction">

       </action>

    </package>

   

</struts>



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值