`
anson_xu
  • 浏览: 505706 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

使用Struts2.0 拦截器

阅读更多

Struts2的拦截器和Servlet过滤器类似。在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法。
    Struts2拦截器类必须从com.opensymphony.xwork2.interceptor.Interceptor接口继承,在Intercepter接口中有如下三个方法需要实现:

  1. void destroy();    
  2. void init();    
  3. String intercept(ActionInvocation invocation) throws Exception;   


      其中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>中未引用拦截器时)会自动引用一些拦截器。这个默认的拦截器引用如下:

  1. <default-interceptor-ref name="defaultStack"/>    
  2. <interceptor-stack name="defaultStack">      
  3.     <interceptor-ref name="exception"/>    
  4.     <interceptor-ref name="alias"/>    
  5.     <interceptor-ref name="servletConfig"/>    
  6.     <interceptor-ref name="prepare"/>    
  7.     <interceptor-ref name="i18n"/>    
  8.     <interceptor-ref name="chain"/>    
  9.     <interceptor-ref name="debugging"/>    
  10.     <interceptor-ref name="profiling"/>    
  11.     <interceptor-ref name="scopedModelDriven"/>    
  12.     <interceptor-ref name="modelDriven"/>    
  13.     <interceptor-ref name="fileUpload"/>    
  14.     <interceptor-ref name="checkbox"/>    
  15.     <interceptor-ref name="staticParams"/>    
  16.     <interceptor-ref name="params">    
  17.         <param name="excludeParams">dojo\..*</param>    
  18.     </interceptor-ref>    
  19.     <interceptor-ref name="conversionError"/>    
  20.     <interceptor-ref name="validation">    
  21.            <param name="excludeMethods">input,back,cancel,browse</param>    
  22.      </interceptor-ref>    
  23.      <interceptor-ref name="workflow">    
  24.             <param name="excludeMethods">input,back,cancel,browse</param>    
  25.      </interceptor-ref>    
  26. </interceptor-stack>   


      上面在defaultStack中引用的拦截器都可以在<action>中不经过引用就可以使用(如果在<action>中引用了任何拦截器后,要使用在defaultStack中定义的拦截器,也需要在<action>中重新引用,在后面将详细讲解)。 

下面我们来看几个简单的拦截器的使用方法。 

一、记录拦截器和execute方法的执行时间(timer) 
       timer是Struts2中最简单的拦截器,这个拦截器对应的类是com.opensymphony.xwork2.interceptor.TimerInterceptor。它的功能是记录execute方法和其他拦截器(在timer后面定义的拦截器)的intercept方法执行的时间总和。如下面的配置代码所示:

  1. <action name="first" class="action.FirstAction">    
  2.     <interceptor-ref name="logger"/>    
  3.     <interceptor-ref name="timer" />    
  4. </action>   


       由于在timer后面没有其他的拦截器定义,因此,timer只能记录execute方法的执行时间,在访问first动作时,会在控制台输出类似下面的一条信息: 
信息: Executed action [/test/first!execute] took 16 ms.
       在使用timer拦截器时,需要commons-logging.jar的支持。将logger引用放到timer的后面,就可以记录logger拦截器的intercept方法和Action的execute方法的执行时间总和,代码如下: 

  1. <action name="first" class="action.FirstAction">    
  2.     <interceptor-ref name="timer" />    
  3.     <interceptor-ref name="logger"/>    
  4. </action>   


       大家可以使用如下的Action类来测试一下timer拦截器:

  1. package action;    
  2. import com.opensymphony.xwork2.ActionSupport;    
  3. public class FirstAction extends ActionSupport             
  4. {    
  5.        public String execute() throws Exception    
  6.        {   
  7.             Thread.sleep(1000); // 延迟1秒   
  8.         return null;    
  9.        }    
  10. }   


        如果只记录execute方法的执行时间,一般会输出如下的信息:
     信息: Executed action [/test/first!execute] took 1000 ms. 
二、通过请求调用Action的setter方法(params) 
       当客户端的一个form向服务端提交请求时,如有一个textfield,代码如下:

  1. <s:form action="first" namespace="/test">    
  2.    <s:textfield name="name"/>    
  3.    <s:submit/>    
  4. </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方法。如下面的配置代码所示:

  1. <action name="first" class="action.FirstAction">    
  2.     <interceptor-ref name="timer" />    
  3.     <interceptor-ref name="params"/>    
  4. </action>   


三、通过配置参数调用Action的setter方法(static-params) 
       static-params拦截器可以通过配置<params>标签来调用Action类的相应的setter方法,static-params拦截器对应的类是com.opensymphony.xwork2.interceptor.StaticParametersInterceptor。 
    下面配置代码演示了如何使用static-params拦截器:

  1. <action name="first" class="action.FirstAction">    
  2.     <interceptor-ref name="timer" />    
  3.     <param name="who">比尔</param>    
  4.     <interceptor-ref name="params"/>    
  5.     <interceptor-ref name="static-params"/>    
  6. </action>   


       如果first动作使用上面的配置,在访问first动作时,Struts2会自动调用setWho方法将“比尔”作为参数值传入setWho方法。
四、使用拦截器栈 
       为了能在多个动作中方便地引用同一个或几个拦截器,可以使用拦截器栈将这些拦截器作为一个整体来引用。拦截器栈要在<package>标签中使用<interceptors>和子标签<interceptor-stack>来定义。代码如下:

  1. <package name="demo" extends="struts-default" >    
  2.     <interceptors>    
  3.         <interceptor-stack name="mystack">    
  4.             <interceptor-ref name="timer" />    
  5.             <interceptor-ref name="logger" />    
  6.             <interceptor-ref name="params" />    
  7.             <interceptor-ref name="static-params" />    
  8.         </interceptor-stack>    
  9.     </interceptors>    
  10.   
  11.     <action name="first" class="action.FirstAction">    
  12.         <param name="who">比尔</param>    
  13.         <interceptor-ref name="mystack"/>               
  14.     </action>    
  15. </package>   


       可以象使用拦截器一样使用拦截器栈,如上面代码所示。

分享到:
评论

相关推荐

    struts2.0拦截器、crud例子与用法

    总结来说,Struts2.0的拦截器提供了一种灵活的方式来扩展和控制应用程序的行为,而CRUD操作则通过Action类实现。理解这些核心概念对于有效地利用Struts2开发Web应用至关重要。通过熟练掌握这些知识,开发者可以更...

    struts2.0拦截器完整

    下面我们将深入探讨Struts2.0拦截器的完整知识体系。 1. **拦截器的概念** 拦截器类似于AOP(面向切面编程)中的通知,它是在Action执行前或执行后进行拦截,并可以修改Action的执行流程。在Struts2中,拦截器是...

    Struts2.0拦截器总结

    主要总结了struts2.0中的拦截器,对于初学者有一定的帮助,里面也有部分代码演示

    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

    Struts 2.0系列(MAX)

    Struts 2.0系列(MAX),pdf格式,全...Struts 2的基石——拦截器(Interceptor) 在Struts 2中实现IoC 在Struts 2中实现文件上传 在Struts 2中实现CRUD Struts 2中的OGNL Strus 2的新表单标志的使用 Struts 2与AJAX

    初识[Struts2.0]并[使用Struts2.0]进行SSH集成

    3. **拦截器**:Struts2.0使用拦截器来处理请求,拦截器链可以在不修改Action代码的情况下添加新的功能,如日志、事务管理等。 4. **OGNL表达式语言**:Struts2.0使用OGNL(Object-Graph Navigation Language)作为...

    struts2.0struts2.0struts2.0struts2.0struts2.0struts2.0

    Struts2.0是Apache软件基金会的一个开源Java框架,它主要用作Web应用程序的MVC(Model-View-Controller)架构。Struts2是Struts1的后续版本,旨在提供更强大、更灵活的框架来构建企业级的Java Web应用。 在Struts2...

    struts 2.0 的拦截器

    Struts 2.0 是一个基于MVC设计模式的Java Web框架,它的核心功能之一是拦截器(Interceptor),这是实现业务逻辑控制和增强应用程序功能的重要组件。在Struts 2中,拦截器扮演着中间人的角色,它们在Action调用前后...

    Struts2.0 Jar包

    Struts2.0是一款强大的Java Web框架,它在MVC(Model-View-Controller)设计模式的基础上,提供了灵活且强大的架构来构建企业级的Web应用程序。这个“Struts2.0 Jar包”包含了所有必要的库文件,使得开发者可以便捷...

    三大框架中文文档中的struts2.0开发手册(程序员必看)

    2. **拦截器(Interceptor)**:拦截器是Struts2.0的一大特色,它可以实现通用的功能,如日志、权限检查等,无需在每个Action中重复编写。通过配置拦截器栈,可以灵活地控制请求的处理流程。 3. **OGNL(Object-...

    Struts2.0大结合

    五、Struts2.0拦截器 拦截器是Struts2.0实现业务逻辑的重要手段,如ValidationInterceptor进行数据校验,ExceptionMappingInterceptor处理异常,LoginInterceptor实现登录控制等。拦截器可以自由组合,形成拦截器栈...

    struts2.0jar包

    Struts2.0 jar包是Java Web开发中的一个重要组件,它是Apache Struts框架的一个特定版本。Struts2是一个基于MVC(Model-View-Controller)设计模式的开源框架,用于构建可维护性高、结构清晰的Java应用。该框架极大...

    struts 2.0

    2. **拦截器(Interceptors)**: Struts 2.0引入了拦截器机制,类似于AOP(面向切面编程)的概念,可以实现如日志记录、事务管理、权限控制等功能。开发者可以自定义拦截器,并将其链式地配置在Action执行路径上,...

    struts2.0入门案例

    本入门案例将带你逐步了解如何使用Struts2.0来创建一个简单的Web应用。 一、Struts2.0框架基础 Struts2.0是Struts1的升级版,它在功能和易用性上都有显著提升。框架的核心组件包括Action、Result、Interceptor等,...

    Struts2.0学习系列 以及 Struts2.0安装包

    Struts2.0框架整合了多种开源项目,如FreeMarker或JSP作为视图技术,OGNL(Object-Graph Navigation Language)作为表达式语言,以及拦截器机制来处理请求。框架的核心部分包括Action类,它是业务逻辑的载体;配置文件...

    struts2.0的 jar包和源文件

    通过阅读源代码,开发者可以深入理解Struts2.0的工作机制,包括请求处理流程、拦截器链的执行、配置解析等,这对于调试、优化和自定义框架行为非常有帮助。 学习Struts2.0,你需要掌握以下几个重要概念: - **...

    struts2.0源代码

    在"struts2.0源代码"中,你可以看到框架的核心组件、拦截器、配置解析、动作执行等核心功能的实现。以下是一些主要的知识点: 1. **ActionInvocation**:这是Struts2的核心接口,代表了一个动作的执行流程。它负责...

    struts2.0所有jar包

    这个压缩包包含了Struts2.0框架运行所需的所有jar包,使得开发者可以方便地在项目中集成并使用Struts2.0。 首先,我们来了解Struts2.0的核心组件和功能: 1. **Action类**:这是业务逻辑处理的入口点,继承自`...

    struts2.0环境配置

    在实际开发中,你可能还需要配置全局的struts.properties,以及自定义拦截器、结果类型等。Struts2.0的强大之处在于它的灵活性和扩展性,能够满足各种复杂的业务需求。同时,Struts2.0提供了丰富的插件和文档,帮助...

    Struts2.0中文教程

    Struts2.0通过拦截器(Interceptor)机制实现了动作(Action)的处理,大大提高了代码的可维护性和可复用性。 二、MVC模式 在Struts2.0中,Model代表业务逻辑,View负责展示,Controller进行协调。用户请求被控制器...

Global site tag (gtag.js) - Google Analytics