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

struts2核心 拦截器配置

阅读更多

Struts2 拦截器详细配置过程

1: 所有拦截器的超级接口 Interceptor ,Action 去实现这个接口 ;

 Interceptor 它其中有三个方法 (init(),destroy() ,interceptor()):

      Init() 方法 : 在服务器起动的时候加载一次 , 并且只加载一次 ;

      Destroy() 方法 : 当拦截器销毁时执行的方法 ;

      Interceptor() 方法 : 其中里边有一个参数 invocation

public String intercept(ActionInvocation invocation) throws xception {

       System. out .println( "interceptor!!" );

       String result=invocation.invoke();

       return result;

    }

Invocation.invoke() 是如果只有一个拦截器执行完这个方法后 , 会返回给视图 , 如果有多个拦截器 , 它顺序的执行完所有的拦截器 , 才返回给视图 .

2: 可以在系统初始化中给拦截器指定默认的参数 ( 也包括了定义拦截器方式 ) 如下 :

    在拦截器类中把 hello 当做属性 set/get 方式注入到拦截器类中 ;

      < interceptors >

           <!-- 先定义拦截器 -->

           < interceptor name = "myInterceptor" class = "com.zzz.struts2.interceptor.MyInterceptor" >

              <!-- 指定系统初始化给拦截器的参数 -->

              < param name = "hello" > 张钊钊 </ param >

           </ interceptor >

           <!-- 加到自己设置的拦截器栈里边去 -->

           < interceptor-stack name = "myStack" >

              < interceptor-ref name = "myInterceptor" >

              </ interceptor-ref >

              < interceptor-ref name = "defaultStack" ></ interceptor-ref >

           </ interceptor-stack >

       </ interceptors >

       <!-- 改变系统默认的拦截器 , 改成自己的默认拦截器 , 并且一个系统只能有一个默认的拦截器 , 这样这个拦截器栈会默认应用到所有的 Action 上去 -->

       < default-interceptor-ref name = "myStack" >

       </ default-interceptor-ref >

       也可以在使用拦截器的时候给它设置参数 :

       就是在一个 action reslut 下面配置上如下 :

    < action name = "register"

           class = "com.zzz.struts2.action.RegisterAction" >

           < result name = "success" > /success.jsp </ result >

           <!-- result 它其中还有一个信息转发类型 type="" 记住,如果不转向 JSP ,转向图表,可以改变 type="" -->

           < result name = "input" > /register.jsp </ result >

          

           < interceptor-ref name = "myInterceptor" >

              < param name = "hello" > welcome </ param >

           </ interceptor-ref >

           < interceptor-ref name = "myStack" ></ interceptor-ref >

       </ action >

2. 拦截器 , 拦截器栈和默认的拦截器之间的关系

1: 拦截器和拦截器栈是一个级别的 , 也就是说一个拦截器栈中包括许多拦截器 , 一个拦截器栈中还可以包括许多拦截器栈 , 配置如下方式 :

< interceptors >

           <!-- 先定义拦截器 -->

           < interceptor name = "myInterceptor" class = "com.zzz.struts2.interceptor.MyInterceptor" >

              <!-- 指定系统初始化给拦截器的参数 -->

              < param name = "hello" > 张钊钊 </ param >

           </ interceptor >

           <!-- 加到自己设置的拦截器栈里边去 -->

           < interceptor-stack name = "myStack" >

              < interceptor-ref name = "myInterceptor" >

              </ interceptor-ref >

              < interceptor-ref name = "defaultStack" ></ interceptor-ref >

           </ interceptor-stack >

       </ interceptors >

拦截器的使用 :1. 先定义 ;2. 在引用使用 ;

< interceptor name = "myInterceptor" class = "com.zzz.struts2.interceptor.MyInterceptor" >

< interceptor-ref name = "myInterceptor" >

              </ interceptor-ref >

 2:struts2 中有一个系统默认的拦截器栈是 defaultStack, 如果你手动引用自己的拦截器 , 系统默认的拦截器栈将不起作用 ; 这样必需手动引入系统的拦截器栈 < interceptor-ref name = "defaultStack" >

              </ interceptor-ref >

如果想改变系统默认的拦截器栈 , 可以这样配置 :

< default-interceptor-ref name = "myStack" >

</ default-interceptor-ref > 其中 myStack 是自己定义的拦截器栈名字 ;

如果拦截器栈中有多个拦截器 , 在执行 action 之前的顺序跟配置拦截器的顺序一致 , 而在 action 之后执行的顺序是相反的 ;

 

3: 抽象的拦截器类 AbstractInterceptor

1:Interceptor 这个超级拦截器接口 , 有三方法需要实现 , 但是如果不想使用 init();

    destroy() 方法 , 可以去继承这个抽象拦截器类 ;

它的使用跟上边的没有什么区别 ;

 

4: 方法过滤拦截器 MethodFilterInterceptor

1: 上边的拦截器都要是针对整个 action , 如果针对某个方法进行拦截可以去继承这个类 ;

它的使用跟上边的使用方法差不多 , 只是需要要配置它对那个方法进行拦截 , 方法过滤拦截器最好不要配置到自己设置默认的拦截器栈里边 , 自己手动配置 .

interceptor-ref name = "myInterceptor3" >

              < param name = "includeMethods" > execute </ param >

              < param name = "excludeMethods" > execute </ param >

           </ interceptor-ref >

           < interceptor-ref name = "defaultStack" ></ interceptor-ref >

其中 includeMethods ,excludeMethods 是固定写法 : includeMethods  包含拦截那些方法 , 多个方法需要用 ”,” 隔开 ; excludeMehtods 是排除拦截的那些方法 ;

5: 鉴听器 PreResultListener 接口

1: 它的鉴听点在拦截器执行完某个 action 方法后 , 在渲染视图之前做一些事情;让某个类去实现这个接口;

然后向需要它的拦截器中注册进去如下代码:

public class MyInterceptor3 extends MethodFilterInterceptor {

    private static final long serialVersionUID = 3756655410194005443L;

    @Override

    protected String doIntercept(ActionInvocation invocation ) throws Exception {

       // 把鉴听器注册到拦截中去 ;

       invocation .addPreResultListener( new MyListener());

       System. out .println( "my Interceptor3" );

       String result=arg0.invoke();

       System. out .println( "my interceptor3 finshed!" );

       return result;

    }

}

 

引:http://www.blogjava.net/zzzlyr/archive/2009/10/12/297998.html

分享到:
评论

相关推荐

    浪曦Struts2系列视频教程

    教程名称:浪曦Struts2系列视频教程课程目录:【】1 Struts2入门与配置【】10 Struts2的核心 拦截器【】11 Struts2的核心 拦截器续【】12 Struts2的文件上传和下载【】13 Struts2的文件上传和下载续【】14 Struts2的...

    03解决struts2配置文件无提示问题

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    struts2讲义_吴峻申

    4.3.1 扩展拦截器接口的自定义拦截器配置 54 4.3.2 继承抽象拦截器的自定义拦截器配置 56 4.3.3 继承方法拦截器的自定义拦截器配置 58 4.4 Struts2文件上传拦截器应用 61 4.4.1 Struts2文件上传功能开发 61 4.4.2 ...

    拦截器和控制器的区别

    2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,...

    Struts2详细工作流程

    Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件...Struts 2框架按照模块来划分,可以分为Servlet Filters、Struts核心模块、拦截器和用户实现部分。

    Struts2 in action中文版

    4.3 研究内建的Struts 2拦截器 67 4.3.1 工具拦截器 67 4.3.2 数据转移拦截器 67 4.3.3 工作流拦截器 69 4.3.4 其他拦截器 72 4.3.5 内建的拦截器栈 73 4.4 声明拦截器 74 4.4.1 声明独立的拦截器和拦截器栈 74 ...

    struts2流程与流程图

    但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。  一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。 Struts 2的核心控制器是...

    深入Struts2的配置文件

    本部分主要介绍struts.xml的常用配置。...Struts2框架中核心组件就是Action、拦截器等,Struts2框架使用包来管理Action和拦截器等。每个包就是多个Action、多个拦截器、多个拦截器引用的集合。 ...

    struts2配置2.5版

    -- 配置核心拦截器 --&gt; &lt;filter-name&gt;struts2 &lt;!-- Filter的实现类 struts2.5 --&gt; org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter &lt;!-- 拦截所有的url --&gt; ...

    深入Struts2配置

    Struts2框架中核心组件就是Action、拦截器等,Struts2框架使用包来管理Action和拦截器等。每个包就是多个Action、多个拦截器、多个拦截器引用的集合。 在struts.xml文件中package元素用于定义包配置,每个package...

    Struts2+hibernate+spring的常见面试题

    Struts2的核心组成部分是Action,拦截器和结果页。 Struts2提供了许多方法来创建Action类,并通过struts.xml中或通过注释进行配置。我们可以创建自己的拦截器实现常见任务。 Struts2中自带了很多的标签,并使用...

    整合struts2和spring源代码(可以直接在tomcat中运行)

    可以直接运行,并对整合spring和struts2步骤及需要注意的事项进行类总结 整合spring和struts2总结 1.将struts2和spring中的库文件复制...— 如果没有使用Spring ObjectFactory,提供了2个拦截器来自动装配action。

    struts快速入门的最好教程

    Struts2框架简介 Struts2历史 Struts2与MVC Struts2体系介绍 Struts2体系架构 ...Struts2拦截器 默认配置文件struts-default.xml概要说明 Struts2核心配置文件Struts.xml详解 Struts2的简单开发和配置

    Struts2 关键知识点

    struts2机制、关键流程、拦截器、action、配置文件等

    Struts 2的高级应用

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

    深入浅出struts2

    XWork是一个通用的命令框架,它提供了很多核心的功能,例如actions,验证和拦截器,它可以完全独立于执行上下文运行,并提供了一个内部的依赖注入机制,用来做配置和工厂实现的管理。 而WebWork则是一个完全独立的上...

    拦截器机制及其实现原理

    拦截器是Struts2框架的核心组成部分,通过本章的学习,应该掌握如下知识点: 了解AOP设计思想。 能够使用AOP设计思路,分离横切关注点 掌握Java中提供的动态代理方式实现拦截 了解拦截在开发中的意义 掌握Struts2...

    struts2.0.jar

    · 引入拦截器: Struts 2为拦截器(interceptor)提供了全面支持。拦截器可在Action类执行前后加以执行。拦截器经配置后,可以把工作流程或者验证等常见功能作用到请求上。所有请求通过一组拦截器传送,之后再发送到...

    Struts2+Web常使用的功能经验笔记第1季

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因为Struts 2和Struts 1有着太大的变化,...

Global site tag (gtag.js) - Google Analytics