`

拦截器详解

阅读更多
文章来自javaeye的黑暗浪子:http://darkranger.javaeye.com/
    通过前几章介绍,读者应该明白在Web项目中,客户先在视图界面提交一个HTTP请求,在Struts2的ServletDispatcher接收请求时,Struts2会查找配置文件,如struts.xml文件。根据xml文件中定义的拦截器配置,会去调用拦截器。如果配置了拦截器栈,则根据拦截器在拦截器栈中的前后顺序,一一进行调用。而Struts2自带的源代码中也提供了缺省的拦截器配置。
    在第一章中,笔者曾经介绍了Struts2的各个文件夹内容,也说过在src文件夹中包含了Struts2的所有底层实现源代码,读者们可到自己安装Struts2的文件路径下找到src\core\src\main\resources\,其中有个名为struts-default.xml。它是Struts2自定义的配置文件,其中有关拦截器的配置代码正是本节需要介绍的拦截器在Struts2中的缺省应用。
技术要点
    本节代码说明Struts2中的拦截器缺省配置及其各拦截器的功能。


    拦截器和拦截器栈的定义配置格式。
 Struts2定义的各个拦截器功能介绍。
演示代码


<!------------------------文件名: struts-default.xml----------------------------->
<interceptors>
            <interceptor name="alias"
         class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>
            ……………
            <interceptor name="roles" 
class="org.apache.struts2.interceptor.RolesInterceptor" />

            <!—基础栈 -->
            <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>

            <!—校验和工作流栈 -->
            <interceptor-stack name="validationWorkflowStack">
                <interceptor-ref name="basicStack"/>
                <interceptor-ref name="validation"/>
                <interceptor-ref name="workflow"/>
            </interceptor-stack>

            <!—文件上传栈-->
            <interceptor-stack name="fileUploadStack">
                <interceptor-ref name="fileUpload"/>
                <interceptor-ref name="basicStack"/>
            </interceptor-stack>

            <!—模型驱动栈 -->
            <interceptor-stack name="modelDrivenStack">
                <interceptor-ref name="modelDriven"/>
                <interceptor-ref name="basicStack"/>
            </interceptor-stack>

            <!—action链栈 -->
            <interceptor-stack name="chainStack">
                <interceptor-ref name="chain"/>
                <interceptor-ref name="basicStack"/>
            </interceptor-stack>

            <!-- i18n国际化栈 -->
            <interceptor-stack name="i18nStack">
                <interceptor-ref name="i18n"/>
                <interceptor-ref name="basicStack"/>
            </interceptor-stack>
       </interceptors>


代码解释
(1)在xml配置文件中配置拦截器和拦截器栈都是以“<interceptors>”开头,以 “</interceptors>”结尾。
(2)配置拦截器的格式如上面代码所示以“<interceptor/>”格式显示,其中两个属性name是拦截器名字,另一个是对应的类路径,因为之前也已经说过其实拦截器也是一个普通的Java对象。
(3)拦截器栈的格式是以“<interceptor-stack >”开头,以“</interceptor-stack>”结尾。其中属性name是拦截器栈名字。在 “<interceptor-stack >”和“</interceptor-stack>”之间可以设置拦截器。如代码所示格式为“<interceptor-ref />”,其中name属性也是拦截器名字。如果系统运行拦截器栈都是按照拦截器栈中定义的拦截器先后顺序执行拦截器。请读者仔细查看那个基础栈配置,其中配置的拦截器都是在xml文件中定义的拦截器。
注意:拦截器栈中不单单可以配置拦截器,它甚至还可以配置拦截器栈。比如在“validationWorkflowStack” 拦截器栈中就配置了“basicStack”拦截器栈。这样的话,配置的子拦截器栈中的拦截器也会被执行。这就类似于父集合和子集合的概念。
(4)针对struts-default.xml文件中各个拦截器配置,笔者一一做介绍,因为如果使用Struts2在Web项目开发中,这些拦截器都是默认缺省的会被执行的。因此了解一下Struts2底层的拦截器到底实现什么功能对开发人员来说是很有帮助的。
 alias:对于HTTP请求包含的参数设置别名。
 autowiring:将某些JavaBean实例自动绑定到其他Bean对应的属性中。有点类似Spring的自动绑定,在Spring部分会详细说明。
 Chain:在Web项目开发中,以前使用Struts开发时候经常碰到两个Action互相传递参数或属性的情况。该拦截器就是让前一Action的参数可以在现有Action中使用。
 conversionError:从ActionContext中将转化类型时候发生的错误添加到Action的值域错误中,在校验时候经常被使用到来显示类型转化错误的信息。
 cookie:从Struts2.0.7版本开始,可以把cookie注入Action中可设置的名字或值中。
 createSession:自动创建一个HTTP的Session,尤其是对需要HTTP的Session的拦截器特别有用。比如下面介绍的 TokenInterceptor。
 debugging:用来对在视图间传递的数据进行调试。
 ExecAndWait:不显式执行Action,在视图上显示给用户的是一个正在等待的页面,但是Action其实是在“背后”正在执行着。该拦截器尤其在对进度条进行开发的时候特别有用。
 exception:将异常和Action返回的result相映射。
 fileUpload:支持文件上传功能的拦截器。
 i18n:支持国际化的拦截器。
 logger:拥有日志功能的拦截器。
 modelDriven:Action执行该拦截器时候,可以将getModel方法得到的result值放入值栈中。
 scopedModelDriven:执行该拦截器时候,它可以从一个scope范围检索和存储model值,通过调用setModel方法去设置 model值。
 params:将HTTP请求中包含的参数值设置到Action中。
 prepare:假如Action继承了Preparable接口,则会调用prepare方法。
 staticParams:对于在struts.xml文件中Action中设置的参数设置到对应的Action中。
 scope:在session或者application范围中设置Action的状态。
 servletConfig:该拦截器提供访问包含HttpServletResquest和HttpServletResponse对象的Map的方法。
 timer:输出Action的执行时间。
 token:避免重复提交的校验拦截器。
 tokenSession:和token拦截器类似,但它还能存储提交的数据到session里。
 validation:运行在action-validation.xml(校验章节将介绍)文件中定义的校验规则。
 workflow:在Action中调用validate校验方法。如果Action有错误则返回到input视图。
 store:执行校验功能时候,该拦截器提供存储和检索Action的所有错误和正确信息的功能。
 checkbox:视图中如果有checkbox存在的情况,该拦截器自动将unchecked的checkbox当作一个参数(通常值为 “false”)记录下来。这样可以用一个隐藏的表单值来记录所有未提交的checkbox,而且缺省unchecked的checkbox值是布尔类型的,如果视图中checkbox的值设置的不是布尔类型,它就会被覆盖成布尔类型的值。
 profiling:通过参数来激活或不激活分析检测功能,前提是Web项目是在开发模式下。(涉及到调试和性能检验时使用)
 roles:进行权限配置的拦截器,如果登录用户拥有相应权限才去执行某一特定Action。
分享到:
评论

相关推荐

    详解Struts2拦截器

    ### Struts2拦截器详解 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的一种流行框架,其核心组件之一便是**拦截器**。拦截器不仅在Struts2中扮演着重要角色,更是整个框架灵活性与扩展性的基石。...

    struts2拦截器详解 带demo

    Struts2 拦截器详解 Struts2 框架中的拦截器(Interceptor)是一种强大的机制,它允许开发者在Action执行前后插入自定义的行为,增强了应用的灵活性和可扩展性。拦截器是基于Java的动态AOP(面向切面编程)实现,...

    跟开涛学SpringMVC(5)处理器拦截器详解Java开

    本教程“跟开涛学SpringMVC(5)处理器拦截器详解”深入解析了这个核心概念,帮助Java开发者提升其应用的灵活性和可维护性。 处理器拦截器在Spring MVC中的主要职责包括: 1. **预处理**:在请求到达目标控制器...

    Struts2拦截器详解源码

    Struts2 拦截器(Interceptor)是框架的核心组件之一,它允许开发者在Action执行前后插入自定义的处理逻辑,极大地增强了应用的灵活性和可维护性。与Servlet规范中的Filter相比,虽然两者都用于处理请求,但拦截器在...

    源代码下载 第五章 处理器拦截器详解——跟着开涛学SpringMVC

    在本章中,我们将深入探讨"处理器拦截器"在SpringMVC框架中的应用与实现,这是SpringMVC中一个至关重要的组件,它允许我们在请求处理前后执行自定义逻辑。通过学习这一主题,我们可以更好地理解SpringMVC的工作流程...

    Struts2拦截器及其用法详细说明

    - XML配置:在`struts.xml`文件中,使用`&lt;interceptor&gt;`元素定义拦截器,`&lt;interceptor-stack&gt;`元素组合多个拦截器,`&lt;package&gt;`元素下的`interceptors`属性指定拦截器栈。 ```xml &lt;!-- 可以添加其他内置或...

    Struts2之Action接收请求参数和拦截器详解

    Struts2之Action接收请求参数和拦截器详解 Struts2框架中的Action接收请求参数和拦截器详解是非常重要的知识点,本文将详细介绍Struts2之Action接收请求参数和拦截器详解的相关知识点。 一、Struts2框架中的Action...

    java中的Struts2拦截器详解

    Java 中的 Struts2 拦截器详解 Struts2 拦截器是一种强大且灵活的机制,它可以在 action 之前或之后执行某些操作,实现一些通用的功能,如权限认证、日志记录和登陆判断等。 1. 什么是拦截器? 拦截器相当于过滤...

    struts2内置拦截器简介

    常用内置拦截器详解 ##### 2.1 Exception 此拦截器用于捕获Action执行过程中发生的异常,并将异常信息转发到指定的结果页面。当某个Action抛出异常时,如果配置了此拦截器,则会跳转到配置的错误页面,通常用于显示...

    一个Struts2的核心拦截器例子

    5. **核心拦截器详解**: - `params`:处理请求参数,将请求参数绑定到Action的属性上。 - `i18n`:处理国际化,根据用户浏览器设置的语言加载资源文件。 - `exception`:处理Action执行过程中的异常。 - `...

    tokenSession拦截器的使用

    ### tokenSession拦截器详解 #### 一、引言 在Web开发中,为了防止用户重复提交表单数据,通常会采用各种技术手段进行控制。在Java Web应用开发中,Struts2框架提供了一种非常实用的方法来解决这个问题——通过...

    struts2拦截器

    ### Struts2拦截器详解 #### 一、拦截器的概念与意义 拦截器(Interceptor)在Struts2框架中扮演着至关重要的角色。它的工作原理类似于过滤器(Filter),能够拦截用户请求,并对其进行预处理或者后处理。拦截器...

    【SpringMVC】 4.3 拦截器(csdn)————程序.pdf

    《SpringMVC 拦截器详解》 在SpringMVC框架中,拦截器(Interceptor)扮演着不可或缺的角色,它允许开发者在请求被处理器处理之前和之后进行额外的操作,如日志记录、权限验证、性能统计等。拦截器机制极大地扩展了...

    Struts2.0拦截器总结

    ### Struts2.0拦截器详解 #### 一、拦截器概述 在Struts2框架中,拦截器(interceptor)是一种非常重要的机制,用于在执行Action前后进行一系列预处理或后处理的操作。拦截器可以用来执行如参数拦截、类型转换、输入...

    ssm配置及struts文件,拦截器.zip

    最后,"struts2拦截器详解之二:深入理解struts2拦截器机制.txt"和"Struts2自定义拦截器.txt"文件详细阐述了Struts2的拦截器机制。拦截器是Struts2的核心特性之一,它们是围绕Action执行的一系列拦截动作,可以在...

    SpringMVC拦截器例子详解

    在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的逻辑。它们可以用来实现通用的功能,如权限验证、日志记录、性能统计等,避免在每个控制器方法中重复代码...

    Struts2的拦截器

    ### Struts2的拦截器详解 #### 概述 在Java Web开发中,Struts2框架因其灵活性和扩展性而受到广泛欢迎。其中,拦截器(Interceptor)是Struts2框架的一个核心特性,用于处理Action的公共行为,类似于Spring框架中...

Global site tag (gtag.js) - Google Analytics