十五、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. iCheck表单美化插件使用方法详解(含参数、事件等)

    iCheck   特色: 1.在不同浏览器(包括ie6+)和设备上都有相同的表现 - 包括 桌面和移动设备 2.支持触摸设备 - iOS.Android.BlackBerry.Windows Phon ...

  2. ubuntu vnc install

    windows & ubuntu http://www.jb51.net/os/Ubuntu/104948.html ubuntu & ubuntu https://www.digit ...

  3. 新建一个mybatis HelloWorld

    1.下载mybatis https://github.com/mybatis/mybatis-3/ 没有梯子好像打不开 下载一个最新版本,我这里下载的是mybatis-3.4.1.zip 里面有myb ...

  4. [SQL]patindex的用法

    返回指定表达式中某模式第一次出现的起始位置:如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零. Transact-SQL 语法约定 语法 PATINDEX ( '%pattern%' , ...

  5. 【转载】s3c2440裸机开发调试环境(MDK4.6,Jlink v8,mini2440)

    用于arm裸机程序开发的IDE基本有 以下3个:MDK,IAR,还有ADS.具体它们的具体情况在这里我就不多说了,百度一下就明白了.由于之前开发c51,stm32时候都使用了MDK开发环境,而且MDK ...

  6. GoldenGate: Extract Abend with Detect Inconsistency in Pdata (文档 ID 1355067.1)

    APPLIES TO: Oracle GoldenGate - Version 10.4.0.0 and laterInformation in this document applies to an ...

  7. Linux下串口ttyS2,ttyS3不能用的问题解决办法

    PC104,Xlinux下,突然发现串口3,4不能用... 以为是硬件的问题,换成wince后,3,4工作正常,排除电路问题 在linux下查看dmesg: serial8250: ttyS0 at ...

  8. HTML控件-Select

    从今天开始,编写对于html控件的特性的探索文章,会广泛的引用网络的资源,所以本文的版权属于广大人民群众,欢迎转载,也同样禁止商业应用. [高手勿喷,标签页点击红色叉叉] select控件有一个特性: ...

  9. Android——状态栏通知栏Notification

    1.AndroidManifest.xml注意要同时注册Notification02Activity <!-- 状态通知栏 Notification -->        <acti ...

  10. 创建一个提供数据 API 的 Node.js 网站

    创建站点目录 首先,创建一个文件夹用来保存你的站点文件,使用 mkdir 就可以了 PS C:\> mkdir mysite 然后,进入到这个文件夹进行下一步的操作. 创建包说明 使用记事本或者 ...