zoukankan      html  css  js  c++  java
  • 5.Struts2中的拦截器

    拦截器是Struts2中的核心,其自带很多很多的拦截器,这里主要介绍一下自定义拦截器,恩多一半情况下呢?我们不需要使用到自定义的拦截器,Struts2本身已经提

    供了很多的拦截器供我们使用,对于自定义拦截器的学习,有利于我们理解Struts2中的拦截器机制。

      Struts2的很多功能都是基于拦截器的,比如:传参,国际化,文件的上传下载。

      拦截器栈:将多个拦截器按照顺序链接,相当于一条拦截器的链,会按照顺序执行。

      Struts中所以的拦截器都必须实现一个Interceptor接口,Extends AbstractInterceptor(是Interceptor接口的空白实现)

      自定义拦截器:

        1.实现Interceptor接口

    public class Interceptor1 implements Interceptor{
        public Interceptor1(){ //构造函数
            System.out.println("小法被生出来了");
        }
        @Override
        public void init() {
            // TODO Auto-generated method stub
            System.out.println("先学习q技能,出多兰戒");    
        }
        @Override
        public String intercept(ActionInvocation arg0) throws Exception {
            System.out.println("怒送一血");
            //arg0.invoke();//继续往下执行
            return "login";
        }
        @Override
        public void destroy() {
            //并没有看到被销毁的过程
            System.out.println("塔下强杀,game GG");
        }
    }

        2.在Struts2的配置文件中配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
        <package name="hello" extends="struts-default" namespace="/">
            <interceptors>
                <!-- 定义拦截器 -->
                <interceptor name="fa" class="com.etc.interceptor.Interceptor1"></interceptor>
                <interceptor name="fa2" class="com.etc.interceptor.Interceptor2"></interceptor>
            </interceptors>
            <action name="in" class="com.etc.action.InterceptorAction">
                <!-- 在需要拦截的地方引用拦截器 -->
                <interceptor-ref name="fa"></interceptor-ref>
                <interceptor-ref name="fa2"></interceptor-ref>
                <result name="success">/index.jsp</result>
                <result name="login">/login.jsp</result>
            </action>
        </package>
    </struts>

       在这里大家会看到拦截器的很重要的概念,叫做生命周期

        实例化(一开始运行的时候)

        初始化(一开始运行的时候)

        拦截(当你访问你要拦截的地址的时候)

        销毁

      这里需要注意的地方就是:当你配置多个拦截器的时候,拦截器会依次进行拦截,但是有个前提条件

        就是你在前面的拦截器中需要调用到invoce()方法,该方法会通知下面的拦截器继续拦截,不调用该方法的话,以下的拦截器不会拦截

  • 相关阅读:
    Laravel 通知
    LARAVEL 6 + VUE + SEMANTIC UI
    Laravel 从入门到精通教程【预备篇、基础篇】
    Laravel Vue.js 聊天室
    GIT代码管理: git remote add 【转载】
    Laravel Vuejs 实战:开发知乎 (45-47)用户设置
    Laravel Vuejs 实战:开发知乎 (42-44)用户头像
    如何在运行时更改JMeter的负载
    Jmeter Grafana Influxdb 环境搭建
    实时结果
  • 原文地址:https://www.cnblogs.com/huaixiaoz/p/5938178.html
Copyright © 2011-2022 走看看