博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
十五、struts2中的拦截器(框架功能核心)
阅读量:4924 次
发布时间:2019-06-11

本文共 2970 字,大约阅读时间需要 9 分钟。

十五、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>

     

转载于:https://www.cnblogs.com/Prozhu/p/5886455.html

你可能感兴趣的文章
criteria使用总结
查看>>
四则运算表达式求值 OpenJ_Bailian - 4132
查看>>
office 2007安装出现windows installer服务不能更新一个或多个受保护的windows文件
查看>>
Oracle主表列表上显示从表字段拼成的字符串
查看>>
[转] Android中C&C++源码库的初步研究
查看>>
美团的android多渠道包的3种方法
查看>>
转:集成平台 jira 的使用与方案
查看>>
2016.4.26_下载abap代码【ABAP】
查看>>
uoj#273. 【清华集训2016】你的生命已如风中残烛(组合数学)
查看>>
[LeetCode#56]Merge Intervals
查看>>
Time模块
查看>>
运算符的重载【掌握】
查看>>
.net2.0缓存技术
查看>>
5.2 i++
查看>>
HDOJ 1312题Red and Black
查看>>
《python cookbook中文译本》pdf电子书
查看>>
JQueryMobile开发Cordova时多页应用模式
查看>>
测试的“潜规则”
查看>>
Unix的缺陷_王垠_新浪博客
查看>>
MS SQL's 'Join' tips
查看>>