十五、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. Yii2.0 数据库查询方法

    User::find()->all();    此方法返回所有数据:    User::findOne($id);   此方法返回 主键 id=1  的一条数据(举个例子):    User:: ...

  2. Centos下搭建ftp服务器

    完全不用那么麻烦,直接可以用xshell中自带的传输文件功能,下载客户端xftp安装就行,不用配置,可以在windows系统向Linux系统的任何文件地方上传下载文件,简单方便,大大节约时间, vsf ...

  3. JAVA中关于同步与死锁的问题

    java中当多个现成同时操纵同一资源的时候需要考虑同步的问题.如车站售票,不同售票点卖同一班次车票的时候就要同步,否则卖票会有问题.下面代码模拟车站卖票: class TicketSeller imp ...

  4. Sqlserver中存储过程,触发器,自定义函数

    Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...

  5. make menuconfig 是一个目录。停止 错误解决

    在移植Linux内核时候,发现用 make menuconfig  发生如下错误 linux@ubuntu:/work/linux-socfpga$ make menuconfig make: *** ...

  6. chinapay

    http://s.yanghao.org/program/viewdetail.php?i=71959 http://www.codeproject.com/csharp/biginteger.asp ...

  7. 《Code Complete》ch.21 协同构建

    WHAT? 所有的协同构建技术都试图通过这样那样的途径,将展示工作的过程正式化,以便将错误暴露出来 WHY? 提高缺陷检出率,从而缩短开发周期,降低开发成本 发现不明显的错误信息,如不恰当的注释.硬编 ...

  8. cocos2d-x 中添加显示文字的三种方式 LabelTTF 、LabelBMFont 和 LabelAtlas

    在 cocos2d-x 中有三个类可以在层或精灵中添加文字: LabelTTF LabelBMFont LabelAtlas LabelTTF 直接支持使用 TTF 字库,可以支持全部的中文,但是效率 ...

  9. python编写接口

  10. [jPlayer] HTML5 Audio & Video for jQuery

    ---------------------------------------------------------------------------------------------------- ...