zoukankan      html  css  js  c++  java
  • struts2框架之自定义拦截器和配置

      struts框架中也存在拦截器,只不过系统自动调用。框架自带的拦截器的配置文件所在的位置为:

      java Resources--->Libraries--->struts2-core-2.3.36.jar(核心包)--->struts-default.xml

      这个配置文件中放置的是框架所有的拦截器,拦截器放置在拦截器栈中<interceptor-stack>。在配置文件中有一个基本拦截器栈,我们如果需要使用拦截器的时候,调用基本拦截器就可以了。

    如果我们想要实现自己定义的功能,就需要自定义拦截器:

    1. 编写拦截器,需要实现Interceptor接口,实现接口中的三个方法
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.Interceptor;
    
    public class MyInterceptor implements Interceptor{
    
        @Override
        public void destroy() {
            
        }
    
        @Override
        public void init() {
            
        }
    
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
            System.out.println("加密");
            //放行
            invocation.invoke();//放行让请求的功能执行
            System.out.println("解密");
            return null;
        }
    
    }

    2. 需要在struts.xml中进行拦截器的配置,配置一共有两种方式:

    (1)第一种方式:定义拦截器。在action中要引用拦截器:只要是引用自己的拦截器,默认栈的拦截器就不执行了,必须要手动引入默认栈 。

    (2)第二种方式:定义拦截器栈。将两个拦截器定义在一个栈中,所以在action标签中引用 拦截器的时候,只用引入拦截器栈名就可以了。

    <package name="default" namespace="/" extends="struts-default">
            <!-- 第一种配置方式 :定义了拦截器-->
            <!--  <interceptors> -->
            <!-- <interceptor name="MyInterceptor" class="com.huida.interceptor.MyInterceptor"></interceptor> -->
            <!-- </interceptors> -->
            <!-- 第二种配置方式:定义拦截器栈 -->
            <interceptors>
                <interceptor name="MyInterceptor" class="com.huida.interceptor.MyInterceptor"></interceptor>
                <!-- 定义拦截器栈 -->
                <interceptor-stack name="myStack">
                    <interceptor-ref name="MyInterceptor"/>
                    <interceptor-ref name="defaultStack"/>
                </interceptor-stack>
            </interceptors>
            <action name="demo3Action_*" class="com.huida.action.Demo3Action" method="{1}"><!-- 通配符的方式 -->
                <!-- <interceptor-ref name="MyInterceptor"></interceptor-ref> --><!-- 这样访问demo的时候就会经过拦截器,这样系统的拦截器就不执行了 -->
                <!-- <interceptor-ref name="defaultStack"></interceptor-ref> --><!-- 执行系统的拦截器,保证系统的完整性 -->
                <interceptor-ref name="myStack"></interceptor-ref><!--如果定义了拦截器栈,这里就只用写拦截器栈的名称就可以了,因为拦截器把两个拦截器定义为了一个-->
                   <result name="success" >/suc.jsp</result>
            </action>
        </package>

     启动服务器,在浏览器中输入:http://localhost:8080/struts2_day02/demo3Action_save,在控制台输出:

     

     

  • 相关阅读:
    Spring Bean的生命周期
    Java中的Object类
    Java线程池七个参数
    ROS 第五讲 在模拟器中构建第一个机器人
    ROS 第四讲 让小车在RViz与Gazebo模拟器中跑起来
    ROS 第三讲 操控小乌龟
    ROS 第二讲 基本操作
    ROS 第一讲 引入
    自然语言处理(二) 新词发现或非监督词典构建
    递归找到一个复杂对象中的某个值和它的最小层级
  • 原文地址:https://www.cnblogs.com/wyhluckdog/p/10107925.html
Copyright © 2011-2022 走看看