`
xpp02
  • 浏览: 1048112 次
社区版块
存档分类
最新评论

Struts2教程 - 4.1 拦截器在Struts2中的缺省应用

阅读更多

通过前几章介绍,读者应该明白在 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 文件中各个拦截器配置,笔者一一做介绍,因为如果使用Struts2Web 项目开发中,这些拦截器都是默认缺省的会被执行的 。因此了解一下Struts2 底层的拦截器到底实现什么功能对开发人员来说是很有帮助的。

l   alias :对于 HTTP 请求包含的参数设置别名。

l   autowiring :将某些 JavaBean 实例自动绑定到其他 Bean 对应的属性中。有点类似 Spring 的自动绑定,在 Spring 部分会详细说明。

l   Chain :在 Web 项目开发中,以前使用 Struts 开发时候经常碰到两个 Action 互相传递参数或属性的情况。该拦截器就是让前一 Action 的参数可以在现有 Action 中使用。

l   conversionError :从 ActionContext 中将转化类型时候发生的错误添加到 Action 的值域错误中,在校验时候经常被使用到来显示类型转化错误的信息。

l   cookie :从 Struts2.0.7 版本开始,可以把 cookie 注入 Action 中可设置的名字或值中。

l   createSession :自动创建一个 HTTP Session ,尤其是对需要 HTTP Session 的拦截器特别有用。比如下面介绍的 TokenInterceptor

l   debugging :用来对在视图间传递的数据进行调试。

l   ExecAndWait :不显式执行 Action ,在视图上显示给用户的是一个正在等待的页面,但是 Action 其实是在“背后”正在执行着。该拦截器尤其在对进度条进行开发的时候特别有用。

l   exception :将异常和 Action 返回的 result 相映射。

l   fileUpload :支持文件上传功能的拦截器。

l   i18n :支持国际化的拦截器。

l   logger :拥有日志功能的拦截器。

l   modelDriven Action 执行该拦截器时候,可以将 getModel 方法得到的 result 值放入值栈中。

l   scopedModelDriven :执行该拦截器时候,它可以从一个 scope 范围检索和存储 model 值,通过调用 setModel 方法去设置 model 值。

l   params :将 HTTP 请求中包含的参数值设置到 Action 中。

l   prepare :假如 Action 继承了 Preparable 接口,则会调用 prepare 方法。

l   staticParams :对于在 struts.xml 文件中 Action 中设置的参数设置到对应的 Action 中。

l   scope :在 session 或者 application 范围中设置 Action 的状态。

l   servletConfig :该拦截器提供访问包含 HttpServletResquest HttpServletResponse 对象的 Map 的方法。

l   timer :输出 Action 的执行时间。

l   token :避免重复提交的校验拦截器。

l   tokenSession :和 token 拦截器类似,但它还能存储提交的数据到 session 里。

l   validation :运行在 action-validation.xml( 校验章节将介绍 ) 文件中定义的校验规则。

l   workflow :在 Action 中调用 validate 校验方法。如果 Action 有错误则返回到 input 视图。

l   store :执行校验功能时候,该拦截器提供存储和检索 Action 的所有错误和正确信息的功能。

l   checkbox :视图中如果有 checkbox 存在的情况,该拦截器自动将 unchecked checkbox 当作一个参数(通常值为“ false ”)记录下来。这样可以用一个隐藏的表单值来记录所有未提交的 checkbox ,而且缺省 unchecked checkbox 值是布尔类型的,如果视图中 checkbox 的值设置的不是布尔类型,它就会被覆盖成布尔类型的值。

l   profiling :通过参数来激活或不激活分析检测功能,前提是 Web 项目是在开发模式下。(涉及到调试和性能检验时使用)

l   roles :进行权限配置的拦截器,如果登录用户拥有相应权限才去执行某一特定 Action

更多信息请查看 java进阶网 http://www.javady.com/index.php/category/thread

分享到:
评论

相关推荐

    第四章 深入Struts2--4.1源码

    拦截器是Struts2的一大特色,它们允许开发者在Action执行前后插入自定义的逻辑,如日志、权限检查等。在4.1源码中,我们会看到拦截器是如何注册、如何按顺序执行以及如何与其他组件交互的。 3. **Result(结果)**...

    struts-2.3.4.1第一部分

    在`struts-2.3.4.1`中,jar包是框架的核心组件,它们提供了框架的各种功能,如Action、Interceptor、Result和Plug-in等。 - 主要的jar包可能包括`struts2-core.jar`(核心库)、`struts2-convention-plugin.jar`...

    struts-2.3.4.1-all.zip

    总的来说,`struts-2.3.4.1-all.zip`是一个全面的开发工具包,包含了开发基于Struts 2的Web应用所需的所有组件。通过理解和掌握Struts 2的核心概念和用法,开发者可以更高效地构建健壮、易于维护的Java Web项目。

    Struts2--自定义拦截器

    在Struts2中,拦截器是基于AOP(面向切面编程)理念的,它们在动作调用前后执行,可以看作是对动作执行流程的一种拦截和增强。拦截器链是由多个拦截器按照特定顺序组成的,每个拦截器都有机会执行其逻辑,然后决定...

    struts2-2.3.4.1-all

    在压缩包“struts-2.3.4.1”中,可能包含了以下内容: 1. **struts2-core**:核心库,包含了Struts2的主要组件。 2. **struts2-convention-plugin**:约定优于配置的插件,简化Action和Result的配置。 3. **struts2...

    struts-2.3.4.1-docs.zip

    在"struts-2.3.4.1-docs.zip"中,你应该能找到关于这些特性的详细文档,包括API参考、用户指南、示例代码和教程,帮助你深入理解和使用Struts 2.3.4.1框架。这些文档将涵盖如何创建Action、配置拦截器、使用OGNL...

    struts 2.3.4.1 jar

    在Struts 2中,ASM可能用于AOP的实现,比如动态代理和拦截器的生成。 这些组件共同构成了Struts 2.3.4.1的核心功能,为开发者提供了一个强大的框架来构建企业级的Java Web应用。它们各自的作用和相互间的协作使得...

    struts-2.3.4.1最全架包

    这个"struts-2.3.4.1最全架包"包含了Struts2框架的完整版本,适用于开发者进行项目开发或者学习使用。 在Struts2框架中,有以下几个核心概念和功能: 1. **Action类**:这是业务逻辑的执行入口,通常继承自`org....

    struts2-2拦截器与SiteMesh

    struts2-2拦截器与SiteMeshstruts

    struts-2.3.4.1-lib

    在"struts-2.3.4.1-lib"这个压缩包中,我们主要可以找到以下关键组件和库: 1. **核心库**:Struts2的核心库(如struts2-core.jar)包含了框架的主要功能,如ActionMapping、Result和Interceptor。这些组件使得...

    struts-2.3.4.1的jar包

    安装和使用Struts2时,开发者通常会将这些JAR文件添加到项目的类路径中,然后根据需求配置struts.xml或struts-default.xml等配置文件,定义Action、结果类型、拦截器栈等。通过这样的配置,Struts2能够有效地管理和...

    struts-2.3.4.1 lib

    在"struts-2.3.4.1 lib"这个压缩包中,我们可以找到Struts2框架运行所需的各种jar包,这些jar包是Struts2的核心组件和依赖库。它们包括: 1. **Struts2核心库**:如`struts2-core.jar`,这是框架的基础,包含了...

    struts2-dojo-plugin-2.3.4 jar

    struts2-dojo-plugin-2.3.4 jar 日期控件的jar包 需要的自行下载

    struts2-spring-plugin-2.3.4.1.jar

    struts2-spring-plugin 最新jar包(2012.10.22) 0分资源,方便你我

    Struts2学习案例(拦截器)

    在本学习案例中,重点在于Struts2的拦截器(Interceptor)功能,这是Struts2的核心特性之一,它允许开发者在Action执行前后进行自定义处理,实现了灵活的业务逻辑控制和增强的功能。 首先,我们来理解一下什么是...

    struts-2.3.4.1-all

    总结,"struts-2.3.4.1-all"压缩包为开发者提供了完整的Struts2框架环境,包括必要的jar包和API文档,便于构建和管理Java Web应用程序。通过理解并熟练运用其核心组件和配置,开发者可以有效地提高开发效率,创建出...

    struts2-core-2.3.4.1-sources.jar

    struts2-core-2.3.4.1-sources.jar最新jar包(2012.10.22) 0分资源,方便你我 struts2-core-2.3.4.1-sources.jar源码,学strut2源码时能用到的

    struts2--4.拦截器

    在Struts2中,拦截器扮演着核心角色,极大地增强了框架的功能和灵活性。本文将深入探讨Struts2中的拦截器,以及如何使用它们来优化应用的性能和功能。 ### 1. 拦截器的概念 拦截器是Struts2框架的一个关键特性,它...

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    这个插件允许开发者在Struts 2中轻松地创建能够返回JSON的Action,使得前端(通常使用JavaScript库如jQuery)可以获取到JSON数据并进行进一步处理。 现在我们来详细讨论这两个库在实际应用中的作用: 1. **json-...

Global site tag (gtag.js) - Google Analytics