十五、struts2中的拦截器(框架功能核心)

1、过滤器VS拦截器

功能是一回事。

过滤器是Servlet规范中的技术,可以对请求和响应进行过滤。

拦截器是Struts2框架中的技术,实现AOP(面向切面)的编程思想,可以对请求动作进行拦截。

2、自定义拦截器

步骤:

 

  1. 编写一个类,直接或间接实现Interceptor接口。(拦截器会驻留内存),一般都选择继承AbstractInterceptor

    public
    class
    MyInterceptor
    extends AbstractInterceptor {

     

        // 主要的拦截方法

        @Override

        public String intercept(ActionInvocation invocation) throws Exception {

            // 放行前执行

            System.out.println("前");

            // 可以认为是过滤器的放行

            String result = invocation.invoke();

            // 放行后执行

            System.out.println("后");

            return
    result;

        }

     

    }

     

    b、需要在struts.xml中进行定义

    <package
    name="p1"
    extends="struts-dafault">

            <interceptors>

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

                <interceptor
    name="myinterceptor"

                    class="com.itheima.interceptors.MyInterceptor"></interceptor>

             </interceptors>

        </package>

     

    c、在动作配置中就可以使用了

    <action
    name="action1"
    class="com.itheima.action.DemoAction">

         <!--默认使用Struts-default.xml文件中的一个名称为defaultStack的拦截栈 -->

         <!--由于自己自定义了拦截器,所以默认的拦截器都失效了 -->

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

    <result>/success.jsp</result>

    </action>

     

     

    知识点:除了要使用自定义的拦截器之外,还要使用defaultStack,可以这么办

    方法一:(自己使用)

    <action
    name="action1"
    class="com.itheima.action.DemoAction">

            <!--默认使用Struts-default.xml文件中的一个名称为defaultStack的拦截栈 -->

            <!--由于自己自定义了拦截器,所以默认的拦截器都失效了 -->

            <!--这里拦截器同时使用defaultStack和自定义的拦截器 -->

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

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

            <result>/success.jsp</result>

    </action>

     

    方法二:(大家都用的时候)

    <package
    name="mydefault"
    extends="struts-dafault"
    abstract="true">

            <interceptors>

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

                <interceptor
    name="myinterceptor"

                    class="com.itheima.interceptors.MyInterceptor"></interceptor>

                <!--自定义拦截器栈 -->

                <interceptor-stack
    name="mydefaultStack">

                    <!-- 引用默认拦截栈 -->

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

                    <!-- 引用自定义拦截器 -->

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

                </interceptor-stack>

            </interceptors>

            <!-- 默认拦截器栈 -->

            <default-interceptor-ref
    name="myinterceptor"></default-interceptor-ref>

        </package>

     

        <package
    name="p1"
    extends="mydefault">

            <action
    name="action1"
    class="com.itheima.action.Demo1Action">

                <!-- <interceptor-ref name="mydefaultStack"></interceptor-ref> -->

                <result>/success.jsp</result>

            </action>

        </package>

     

    3、自定义拦截器:能够指定拦截的方法或不拦截的方法

    拦截器代码:

    public
    class
    MyInterceptor
    extends MethodFilterInterceptor {

     

        protected String doIntercept(ActionInvocation invocation) throws Exception {

            System.out.println("拦截了!");

            return
    invocation.invoke();

        }

     

    }

     

    Struts.xml文件配置:

    <package
    name="p1"
    extends="struts-default">

            <interceptors>

                <!-- 自定义了一个拦截器 -->

    <intercepter
    name="myInterceptor"
    class="com.itheima.interceptor.MyInterceptor">

                </intercepter>

            </interceptors>

            <action
    name="*"
    class="com.itheima.action.Demo1Action"
    method="{1}">

                <!--对当前动作类的所有方法都进行拦截 -->

                <interceptor-ref
    name="myInterceptor">

                    <!-- 排除不要拦截的动作方法 -->

                    <param
    name="excludeMethods">action2,action1</param>

    <!—-定义需要被拦截的方法-->

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

                </interceptor-ref>

                <result>/success.jsp</result>

            </action>

        </package>

     

十五、struts2中的拦截器(框架功能核心)的更多相关文章

  1. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  2. 5.Struts2中的拦截器

    拦截器是Struts2中的核心,其自带很多很多的拦截器,这里主要介绍一下自定义拦截器,恩多一半情况下呢?我们不需要使用到自定义的拦截器,Struts2本身已经提 供了很多的拦截器供我们使用,对于自定义 ...

  3. struts2中的拦截器

    一  AOP思想: 面向切面编程的思想 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP ...

  4. struts2 中 paramsPrepareParamsStack 拦截器

    struts2二次参数拦截器内容: 规定了请求的执行顺序 在struts2中,其拦截器为框架精华部分,而二次参数拦截器paramsPrepareParamsStack  对于解决数据回显,对象修改属性 ...

  5. Struts2中的拦截器详解

    exception:异常拦截器,拦截异常aliasservletConfig18nprepare:预备拦截器,这个拦截器就是为了ModelDriven准备对象的,若Action类实现了preparab ...

  6. struts2中方法拦截器(Interceptor)的中的excludeMethods与includeMethods的理解

    http://www.cnblogs.com/langtianya/archive/2013/04/10/3012205.html

  7. java struts2入门学习---拦截器学习

    一.拦截器,拦截器栈 1.拦截器的作用 拦截器本质上和servlet的过滤器是一样的.在struts2中,拦截器能够对Action前后进行拦截,拦截器是一个可插拨的,你可以选择使用拦截器,也可以卸载拦 ...

  8. springboot(五).如何在springboot项目中使用拦截器

    在每个项目中,拦截器都是我们经常会去使用的东西,基本上任一一个项目都缺不了拦截器的使用. 如日志记录.登录验证,session验证等,都需要拦截器来拦截URL请求,那springboot中的拦截器是如 ...

  9. Struts2笔记——自定义拦截器

    需要两个步骤,自定义类实现拦截器接口和在struts.xml注册拦截器 =============================== 1.自定义类实现com.opensymphony.xwork2. ...

随机推荐

  1. ylbtech-dbs:ylbtech-5,RI(报销发票系统)

    ylbtech-dbs:ylbtech-5,RI(报销发票系统) -- =============================================-- DatabaseName:Pur ...

  2. NIO与传统IO的区别

    传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大.使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数 ...

  3. stat 查看文件修改时间

    Ø  访问时间(accesstime):读取一次文件的内容,该时间便会更新 Ø  修改时间(modifytime):对文件内容修改一次便会更新该时间. Ø  改变时间(changetime):更改文件 ...

  4. CRM SQL 共享

     共四步 ,) PRIMARY KEY CLUSTERED, objectid UNIQUEIDENTIFIER NOT NULL, objecttype INT NOT NULL) ,,'883D4 ...

  5. eclipse中debug

      在需要测试的代码行左侧行号列上双击,生成断点 ,再次双击可以取消断点 如图:   然后右键,选择Debug As-Java Application,(注意,不是选择Run As) 开始调试java ...

  6. sql server远程访问Oracle数据库

    在sql server上新建了连接服务器后 在指定的链接服务器上执行指定的传递查询. 该服务器是 OLE DB 数据源. OPENQUERY 可以在查询的 FROM 子句中引用,就好象它是一个表名. ...

  7. Android中 View not attached to window manager错误的解决办法

    前几日出现这样一个Bug是一个RuntimeException,详细信息是这样子的:java.lang.IllegalArgumentException: View not attached to w ...

  8. spi驱动无法建立spidev问题

    参考这里: http://e2e.ti.com/support/arm/sitara_arm/f/791/t/168122.aspx http://communistcode.co.uk/blog/b ...

  9. 《Head First 设计模式》ch.3 装饰(Decorator)模式

    设计原则 类应该对修改关闭,对扩展开放(开放-关闭原则).在每个地方使用开放-关闭原则是一种浪费,也没有必要,因为这通常会引入新的抽象层次,增加代码复杂度.需要把注意力集中在设计中最有可能改变的地方. ...

  10. HDU1232畅通工程

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1232 #include<stdio.h> #include<string.h> ...