• 《Java从入门到放弃》入门篇:Struts2的拦截器基本语法


    拦截器,顾名思义,是拦截不是打劫!!!(图片来自于网络,如果有版权或道德问题,请通知本博主删除,谢谢)

    是贼个样子滴wKioL1l__fKiIMqHAAKhGk9OcQ8075.png,而不是wKioL1l__l2D1TDdAAQPFU3U-40274.png这样滴。

    闲扯完了,回到正题,struts2中的拦截器到底是什么东东呢?我们来百度一下···j_0015.gif

    呃,错了,我们来回顾一下,我们这种熟练工当然不需要百度来查了!!!

    记住,是回顾,回顾,回顾!!!

    咳~,请打开我的第二篇博客,看到那张struts2的原理图了没,在Action上下有很多的

    interceptor,这个就是拦截器,struts2默认配置了很多拦截器,具体的内容,大家可以打开struts2-core-2.2.1.jar中的struts-default.xml文件,看看里面的配置信息。

    像前面我们的Action中定义的属性如何得到页面传递的数据,就是拦截器的作用。

    还有上一篇写的数据校验方法validate为什么能够自动调用,也是拦截器的作用。

    一不小心,又聊了五毛钱的废话,好吧,进入正题!!!

    接下来我们就聊聊如果自定义拦截器。至于是劫财,还是劫色,那就看各位看官的意思了···

    wKioL1mAAj3BtTMoAAV3XEYPNBQ354.png

    (再次声明,图片来源于网络,有问题请联系博主)

    struts2中的自定义拦截器有两种,一种劫财,一种劫色!!!

    啊呸,是一种拦截类(类中的所有方法都拦截),一种拦截方法!!!

    1. AbstractInterceptor(类拦截器)

    2. MethodFilterInterceptor(方法拦截器)

    具体用法如下:

    一、AbstractInterceptor(类拦截器)

        1.1)自定义类MyInterceptor继承AbstractInterceptor,并实现对应方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class MyInterceptor extends AbstractInterceptor {
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
            String result;
        System.out.println("Action执行之前进行拦截!");
        result = invocation.invoke();//表示我黑风岭劫完了,你可以去下一站了
        System.out.println("截完了,继续吧...");
        return result;
        }
    }

        1.2)修改struts.xml,添加拦截器,并使用该拦截器拦截对应的Action

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <package name="default" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor name="myInterceptor" class="com.pxy.interceptor.MyInterceptor"></interceptor>
        </interceptors>
        <!-- 通配符方式调用 -->
        <action name="smng_*" class="com.pxy.action.Hello" method="{1}">
            <result name="{1}">/WEB-INF/jsp/singer_{1}.jsp</result>
        <result name="input">/WEB-INF/jsp/singer_{1}.jsp</result>
        <!-- 绑定拦截器 -->
        <interceptor-ref name="myInterceptor"></interceptor-ref>
        </action>
    </package>

        1.3)访问http://localhost:8888/strutsDemo/smng_xxx.action查看结果。(这儿的xxx替换成CURD方法)

    wKioL1mAC8zReSUqAAAPaTrHcNI616.png-wh_50

    二、MethodFilterInterceptor(方法拦截器)

        现在我们只拦截deletet和select方法。实现步骤如下:

        2.1)修改自定义类MyInterceptor,让其继承MethodFilterInterceptor类,并实现对应方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class MyInterceptor extends MethodFilterInterceptor {
        @Override
        protected String doIntercept(ActionInvocation invocation) throws Exception {
        String result;
        System.out.println("Action执行之前进行拦截!");
        result = invocation.invoke();
        System.out.println("截完了,继续吧...");
        return result;
        }
    }

        2.2)修改struts.xml文件,并配置拦截器要拦截的方法

    1
    2
    3
    4
    5
    6
    7
    8
    <!-- 通配符方式调用 -->
        <action name="smng_*" class="com.pxy.action.Hello" method="{1}">
        <result name="{1}">/WEB-INF/jsp/singer_{1}.jsp</result>
        <result name="input">/WEB-INF/jsp/singer_{1}.jsp</result>
        <interceptor-ref name="myInterceptor">
            <param name="includeMehtods">delete,select</param>
        </interceptor-ref>
        </action>

        2.3)访问http://localhost:8888/strutsDemo/smng_xxx.action查看结果。

    wKiom1mADdqwv3ujAAAS1N-2qrI460.png-wh_50

        从上图可以看到,update方法并没有被拦截器拦截。j_0028.gif

    好了,关于如果拦截收过路费的问题,我们就研究到这儿

    至于各位客官想截什么,接下来可以自己玩玩了···

  • 相关阅读:
    笔记(用Python做些事情)--变量(数字、字符串)
    笔记(用Python做些事情)--变量(日期和时间)
    服务设计-ETL-核心框架
    zookeeper-服务-应用
    HBASE-表设计-优化
    HBASE-读取数据-优化
    HBASE-数据写入-优化
    Zookeeper-客户端-zkclient-curator
    KAFKA-使用问题
    HBASE-Spark操作hbase数据-思考
  • 原文地址:https://www.cnblogs.com/yixueyuan/p/7268956.html
Copyright © 2020-2023  润新知