十五、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-4,PurpleHouse(房地产楼盘销售系统)

    ylbtech-dbs:ylbtech-4,PurpleHouse(房地产楼盘销售系统) -- =============================================-- Crea ...

  2. 编译器错误消息: CS0234: 命名空间“Purple”中不存在类型或命名空间名称“Model”(是否缺少程序集引用?)

    编译错误 “/storeimg”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS023 ...

  3. JAVA 网格布局管理器

    //网格布局管理器 import java.awt.*; import javax.swing.*; public class Jiemian3 extends JFrame{ //定义组件 JBut ...

  4. 安装java开发环境jdk,安装JDK

    JDK可以理解为翻译官,它将Java高级语言翻译为二进制执行. JDK可以编译文件,编译后的文件扩展名为.class. 只要能支持JDK的地方,JAVA就可以运行,这就是JAVA跨平台的性质. 我的是 ...

  5. 拥抱 Android Studio 之五:Gradle 插件开发

    实践出真知 笔者有位朋友,每次新学一门语言,都会用来写一个贪吃蛇游戏,以此来检验自己学习的成果.笔者也有类似体会.所谓纸上得来终觉浅,绝知此事要躬行.这一章,笔者将以开发和发布一个 Gradle 插件 ...

  6. lable标签透明

    方法1: pictureBox1.Controls.Add(lable1);    //或 this.label1.Parent=pictureBox1;   lable1.BackColor=Col ...

  7. 线程中的wait() 与 锁的关系

    我们先看一段代码: /** * 计算输出其他线程锁计算的数据 * */ public class ThreadA { public static void main(String[] args) th ...

  8. [Flex] ButtonBar系列——arrowKeysWrapFocus属性如果为 true,则使用箭头键在组件内导航时,如果击中某一端则将折回。

    <?xml version="1.0" encoding="utf-8"?> <!--arrowKeysWrapFocus 如果为 true, ...

  9. CRM报表打印

    删除路径下的文件 C:\Windows\Downloaded Program Files\rsclientprint.dll路径下的这个dll文件,重新登录crm选择一个面单点击打印按钮重新安装插件

  10. Delphi ServerSocket,ClientSocket示例

    Delphi ServerSocket,ClientSocket示例 2008-05-09 16:20 Delphi TServerSocket,TClientSocket实现传送文件代码 1.建立两 ...