`
xfjt297857539
  • 浏览: 146673 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Struts2拦截器概述

    博客分类:
  • SSH
 
阅读更多
Struts2的拦截器和Servlet过滤器类似。在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法。
    Struts2拦截器类必须从com.opensymphony.xwork2.interceptor.Interceptor接口继承,在Intercepter接口中有如下三个方法需要实现:
    ◆ voiddestroy();
    ◆ voidinit();
    ◆ Stringintercept(ActionInvocationinvocation)throwsException;
    其中intercept方法是拦截器的核心方法,所有安装的拦截器都会调用之个方法。在Struts2中已经在struts-default.xml中预定义了一些自带的拦截器,如timer、params等。如果在<package>标签中继承struts-default,则当前package就会自动拥有struts-default.xml中的所有配置。代码如下:
<package name="demo" extends="struts-default" > ... </package>
    在struts-default.xml中有一个默认的引用,在默认情况下(也就是<action>中未引用拦截器时)会自动引用一些拦截器。这个默认的拦截器引用如下:
<default-interceptor-refname="defaultStack"/>
<interceptor-stackname="defaultStack"> 
<interceptor-refname="exception"/>
<interceptor-refname="alias"/>
<interceptor-refname="servletConfig"/>
<interceptor-refname="prepare"/>
<interceptor-refname="i18n"/>
<interceptor-refname="chain"/>
<interceptor-refname="debugging"/>
<interceptor-refname="profiling"/>
<interceptor-refname="scopedModelDriven"/>
<interceptor-refname="modelDriven"/>
<interceptor-refname="fileUpload"/>
<interceptor-refname="checkbox"/>
<interceptor-refname="staticParams"/>
<interceptor-refname="params">
<paramname="excludeParams">dojo..*</param>
</interceptor-ref>
<interceptor-refname="conversionError"/>
<interceptor-refname="validation">
 <paramname="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-refname="workflow">
<paramname="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
    上面在defaultStack中引用的拦截器都可以在<action>中不经过引用就可以使用(如果在<action>中引用了任何拦截器后,要使用在defaultStack中定义的拦截器,也需要在<action>中重新引用,在后面将详细讲解)。
    下面我们来看几个简单的拦截器的使用方法。
    记录拦截器和execute方法的执行时间(timer)
    timer是Struts2中最简单的拦截器,这个拦截器对应的类是com.opensymphony.xwork2.interceptor.TimerInterceptor。它的功能是记录execute方法和其他拦截器(在timer后面定义的拦截器)的intercept方法执行的时间总和。如下面的配置代码所示:
<actionname="first"class="action.FirstAction">
<interceptor-refname="logger"/>
<interceptor-refname="timer"/>
</action>
    由于在timer后面没有其他的拦截器定义,因此,timer只能记录execute方法的执行时间,在访问first动作时,会在控制台输出类似下面的一条信息:
    信息: Executed action [/test/first!execute] took 16 ms.
    在使用timer拦截器时,需要commons-logging.jar的支持。将logger引用放到timer的后面,就可以记录logger拦截器的intercept方法和Action的execute方法的执行时间总和,代码如下:
<actionname="first"class="action.FirstAction">
<interceptor-refname="timer"/>
<interceptor-refname="logger"/>
</action>
    大家可以使用如下的Action类来测试一下timer拦截器:
    packageaction;
importcom.opensymphony.xwork2.ActionSupport;
publicclassFirstActionextendsActionSupport 
{
 publicStringexecute()throwsException
 {
  Thread.sleep(1000);//延迟1秒
  returnnull;
 }
}
    如果只记录execute方法的执行时间,一般会输出如下的信息:
    信息: Executed action [/test/first!execute] took 1000 ms.
通过请求调用Action的setter方法(params)
    当客户端的一个form向服务端提交请求时,如有一个textfield,代码如下:
<s:formaction="first"namespace="/test">
 <s:textfieldname="name"/>
 <s:submit/>
</s:form>
    在提交后,Struts2将会自动调用first动作类中的setName方法,并将name文本框中的值通过setName方法的参数传入。实际上,这个操作是由params拦截器完成的,params对应的类是com.opensymphony.xwork2.interceptor.ParametersInterceptor。由于params已经在defaultStack中定义,因此,在未引用拦截器的<action>中是会自动引用params的,如下面的配置代码,在访问first动作时,Struts2是会自动执行相应的setter方法的。
<action name="first" class="action.FirstAction">
... ...
</action>
    但如果在<action>中引用了其他的拦截器,就必须再次引用params拦截器,Struts2才能调用相应的setter方法。如下面的配置代码所示:
<actionname="first"class="action.FirstAction">
<interceptor-refname="timer"/>
<interceptor-refname="params"/>
</action>
    通过配置参数调用Action的setter方法(static-params)
    static-params拦截器可以通过配置<params>标签来调用Action类的相应的setter方法,static-params拦截器对应的类是com.opensymphony.xwork2.interceptor.StaticParametersInterceptor。
    下面配置代码演示了如何使用static-params拦截器:
<actionname="first"class="action.FirstAction">
<interceptor-refname="timer"/>
<paramname="who">比尔</param>
<interceptor-refname="params"/>
<interceptor-refname="static-params"/>
</action>
    如果first动作使用上面的配置,在访问first动作时,Struts2会自动调用setWho方法将“比尔”作为参数值传入setWho方法。
    使用拦截器栈
    为了能在多个动作中方便地引用同一个或几个拦截器,可以使用拦截器栈将这些拦截器作为一个整体来引用。拦截器栈要在<package>标签中使用<interceptors>和子标签<interceptor-stack>来定义。代码如下:
<packagename="demo"extends="struts-default">
<interceptors>
<interceptor-stackname="mystack">
<interceptor-refname="timer"/>
<interceptor-refname="logger"/>
<interceptor-refname="params"/>
<interceptor-refname="static-params"/>
</interceptor-stack>
</interceptors>
<actionname="first"class="action.FirstAction">
<paramname="who">比尔</param>
<interceptor-refname="mystack"/>
</action>
</package>
    可以象使用拦截器一样使用拦截器栈,如上面代码所示。

转自:http://java.chinaitlab.com/Struts/775531.html
分享到:
评论

相关推荐

    struts2帮助文档

    struts2的基石-拦截器 struts2中实现IOC struts2中实现文件上传 struts2中实现CRUD struts2中的OGNL struts2的新表单标志的使用 struts2与AJAX一 struts2与AJAX二 struts2与AJAX三 struts2中用Spring实现IOC struts2...

    Struts2全解Struts2全解

    1、struts2概述 Struts2 软件下载 Struts2 比较重要的类 操作步骤及框架配置 struts运行机制 ...8 struts2拦截器 ......... 9 struts2类型转换 ........ 10struts2标签库 ........ 11、访问数据库 ........

    Struts2框架 jar JAVA开发 Struts2.jar架包 Struts2开发实例

    Struts2 概述 如何应用Struts2 Struts2 配置文件 如何编写Action 拦截器 Struts2的标签 OGNL 数据校验 国际化

    [Struts 2权威指南--基于WebWork核心的MVC开发(高清完整版) 1/12

    第1章 Struts 2概述,第2章 Struts 2下的HelloWorld,第3章 Struts 2基础,第4章 深入Struts 2,第5章 Struts 2的类型转换,第6章 文件的上传和下载.,第7章 Struts 2的拦截器,第8章 Struts 2的输入校验,9.2 ...

    Struts2入门教程(全新完整版)

    1.概述strust2中的拦截器 28 2.自定义拦截器 28 方式一,实现Interceptor接口。 28 方式二、继承AbstractInterceptor抽象类 29 方式三、继承MethodFilterInteceptor类 30 3.使用来MethodFilterInterceptor灵活拦截 ...

    struts2讲义_吴峻申

    4.1 拦截器在Struts2中的缺省应用 47 4.2 拦截器原理实现 50 4.3 在Struts2中配置自定义的拦截器 53 4.3.1 扩展拦截器接口的自定义拦截器配置 54 4.3.2 继承抽象拦截器的自定义拦截器配置 56 4.3.3 继承方法拦截器的...

    struts2学习教程

    第一个Struts2程序,处理一个form多个submit,struts.xml常用配置解析,使用validate方法验证数据,使用Validation框架验证数据,在Action类中获得HttpServletResponse对象的四种方法,上传任意多个文件,拦截器概述...

    Struts 2的高级应用

    1、MVC 概述 2、Struts1.x简述 3、Struts2概述 4、编写一个struts2应用程序 5、Struts2的核心配置文件 6、Action的实现 7、拦截器

    深入浅出Struts2(附源码)

    本书是广受赞誉的Struts 2优秀教程,它全面而深入地阐述了Struts 2的各个特性,并指导开发人员如何根据遇到的问题对症下药,选择使用最合适的特性。作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,...

    济南大学 第03章_Struts2应用_课堂.ppt

    3.1 Struts 2概述 3.2 Struts 2基本应用及工作流程 3.3 Struts 2标签库应用 3.4 Struts 2拦截器 3.5 Struts 2国际化应用 3.6 Struts 2文件上传 3.7 Struts 2综合应用实例——添加学生信息

    Struts2.0中文教程权威版

    07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新表单标志的使用 13 Struts 2与AJAX Struts2中用...

    struts2学习.rar

    介绍struts2的知识,分别是 入门与概述、action与struts xml、OGNL与类型转换、标签库、文件上传下载、拦截器、国际化、输入校验。

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    18.3 使用DataSourceInjectorInterceptor拦截器 269 18.4 小结 273 第19章 定制结果类型 274 19.1 概述 274 19.2 编写一个自定义的结果类型 274 19.3 使用新的结果类型 277 19.4 小结 279 第20章 Velocity 280 ...

    《Java EE应用开发基础》第三章课件(PDF版)

    济南大学《Java EE应用开发基础》课程课件(PDF版),第三章Struts2应用 3.1 Struts 2概述 ...3.4 Struts 2拦截器 3.5 Struts 2国际化应用 3.6 Struts 2文件上传 3.7 Struts 2综合应用实例——添加学生信息

    低清版 大型门户网站是这样炼成的.pdf

    2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100 第3章 struts 2标签库详解与ajax技术应用 103 3.1 struts 2主题与模板 103 3.2 struts 2控制标签详解 ...

    Struts2入门教程。包括jquery集成等。入门必看

    第 6章 拦截器浅析...............................................................................................................................................42 6.3 拦截器基础.........................

    吴天雄--SpringMVC笔记.doc

    SpringMVC笔记内容:第一天(SpringMVC的概述、SpringMVC与Struts2优势分析、重要组件、运行原理、SpringMVC环境搭建、@RequestMapping注解详解、字符编码过滤器、传参形式(基本数据类型或String、对象类型、对象....

    Java Web程序设计教程

    6.1.2拦截器及拦截器栈的应用 111 6.1.3自定义拦截器 115 6.2类型转换器 117 6.2.1struts2内置类型转换器 117 6.2.2引用类型的转换方式 117 6.2.3特殊对象的类型转换 118 6.2.4类型转换的错误处理 121 6.3...

Global site tag (gtag.js) - Google Analytics