Struts2--内建拦截器详解

本文详细介绍了Struts2框架中的内置拦截器及其配置,包括35个内建拦截器的功能与使用场景,以及如何配置拦截器栈来满足Web应用需求。

Struts2 框架中内置了许多拦截器,这些拦截器以 name-class 对的形式配置在 struts-default.xml 文件中,其中,name 是拦截器的名称,也就是引用的名字;class 指定了该拦截器所对应的实现。

只要自定义的包继承了 Struts2 的 struts-default 包,就可以使用包中定义的内建拦截器,否则需要自行定义拦截器。

内建拦截器介绍
名称说明
alias在不同请求之间将请求参数在不同名称间转换,请求内容不变
autowiring用于实现 Action 的自动装配
chain让前一个 Action 的属性可以被后一个 Action 访问,现在和 chain 类型的 result() 结合使用
conversionError将错误从 ActionContext 中添加到 Action 的属性字段中
cookies使用配置的 Name 和 Value 指定 Cookies
cookieProvider该类是一个 Cookie 工具,方便开发者向客户端写 Cookie
clearSession用于清除一个 HttpSession 实例
createSession自动创建 HttpSession,用于为需要使用
HttpSession的拦截器服务
debugging提供不同的调试用的页面展现内部的数据状况
execAndWait在后台执行 Action,同时将用户带到一个中间的等待页面
exception将异常定位到一个画面
fileUpload提供文件上传功能
il8n记录用户选择的 locale
logger输出 Action 的名称
model-driven如果一个类实现了 Model Driven,将 get Model 得到的结果放在 Value Slack 中
scoped-model-driven如果一个 Action 实现了
params将请求中的参数设置到 Action 中
actionMappingParams用于负责在 Action 配置中传递参数
prepare如果 Action 实现了 Preparable,则该拦截器调用 Action 类的 prepare 方法
staticParams将 struts.xml 文件中 标签的参数内容设置到对应的 Action 中
scope将 Action 状态存入 session 和 application 范围
servletConfig提供访问 HttpServletRequest 和 HttpServletResponse 方法,以 Map 方式访问
timer输岀 Action 执行的时间
token通过 Token 避免双击
tokenSession和 Token Interceptor 一样,不过双击时把请求的数据存储在 Session 中
validation使用 action-validation.xml 文件中定义的内容校验提交的数据
workflow调用 Action 的 validate 方法,一旦有错谋返回,则重新定位到 INPUT 画面
store存储或者访问实现 ValidalionAware 接口的 Action 类出现的消息、错误和字段错误等
checkbox添加了 checkbox 自动处理代码,将没有选中的 checkbox 的内容设定为 false,而 html 在默认情况下不提交没有选中的 checkbox
datetime日期拦截器
profiling通过参数激活 profile
roles确定用户是否具有 JAAS 指定的 Role,否则不予执行
annotationWorkflow利用注解代替 XML 配置,使用
multiselect检测是否有像 标签一样被选中的多个值,然后添加一个空参数
deprecation当日志级别设置为调试模式(debug)并且没有特殊参数时,在 devMode 模式中,会检查应用程序使用过时或未知的常量,并且显示警告

Struts2 框架除了提供这些有用的拦截器以外,还定义了一些拦截器栈,在开发 Web 应用时,可以直接引用这些拦截器栈,而无须自定义拦截器。

注意:随着 Struts2 版本的发展,内建拦截器的数量也在相应地增多,不同版本的 Struts2 拦截器的数量有一些差异,此版本的 Struts2 内建拦截器共有 35 个。这些内建拦截器读者不需要记忆,只需要了解即可。

内建拦截器的配置

在 struts-core-2.3.24.jar 包中的根目录下找到 struts-default.xml 文件,打开后找到 元素下的内建拦截器和拦截器栈,其部分代码如下所示:

<package name="struts-default" abstract="true">
    ...
    <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"/>
        ...
        <!-- 定义Basic stack拦截器栈 -->
        <interceptor-stack name="basicStack">
            <!--引用系统定义的exception拦截器-->
            <interceptor-ref name="exception"/>
            ...
        </interceptor-stack>
        ...
        <!-- 定义Sample model -driven stack -->
        <interceptor-stack name="modelDrivenStack">
            <!--引用系统定义的modelDriven拦截器-->
            <interceptor-ref name="modelDriven"/>
            <!--引用系统定义的basicStack拦截器栈-->
            <interceptor-ref name="basicStack"/>
        </interceptor-stack>
        ...
        <!--定义defaultStack拦截器栈-->
        <interceptor-stack name="defaultStack">
            <interceptor-ref name="exception"/>
            <interceptor-ref name="alias"/>
            <interceptor-ref name="il8n"/>
            ...
            <interceptor-ref name="validation">
                <param name="excludeMethods">input,back,cancel,browse</param>
            </interceptor-ref>
            ...
        </interceptor-stack>
    </interceptors>
    <!--将defaulrStack拦截器栈配置为系统默认拦截器栈-->
    <default-interceptor-ref name="defaultStack"/>
    <!--默认action类是ActionSupport-->
    <default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
</package>

在上述内建拦截器的配置代码中,defaultStack 拦截器组合了多个拦截器,这些拦截器可以满足大部分 Web 应用程序的需求。使用时,只要在 struts.xml 定义包的过程中继承 struts-default 包,那么 defaultStack 拦截器栈就是默认拦截器的引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值