zoukankan      html  css  js  c++  java
  • Servlet@WebFilter注解方式——过滤器链的执行顺序

    Servlet@WebFilter注解方式——过滤器链的执行顺序

    执行顺序和类名字符排序有关!

    以下是测试代码:

    Filter0 .java

    package Filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.annotation.WebInitParam;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    /**
     * 过滤器链
     * @author xanwidtf@foxmail.com
     *
     */
    
    @WebFilter(filterName="FirstFilter",urlPatterns="/index.jsp")
    public class Filter0 implements Filter {
    
        @Override
        public void destroy() {
            System.out.println("FirstFilter过滤器destroy方法执行~");
        }
    
        @Override
        public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
                throws IOException, ServletException {
            System.out.println("Start……doFilter……FirstFilter");
            arg2.doFilter(arg0, arg1);
    //       HttpServletRequest request = (HttpServletRequest) arg0;
    //       HttpServletResponse response = (HttpServletResponse) arg1;
    //       response.sendRedirect(request.getContextPath()+"/First.jsp");
            System.out.println("End……doFilter……FirstFilter");
        }
    
        @Override
        public void init(FilterConfig arg0) throws ServletException {
            System.out.println("过滤器init()执行了~");
        }
    
    }
    

    Filter1.java

    package Filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebFilter(filterName="SecondFilter",urlPatterns="/index.jsp")
    public class Filter1 implements Filter {
    
        @Override
        public void destroy() {
            System.out.println("SecondFilter过滤器destroy方法执行~");
        }
    
        @Override
        public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
                throws IOException, ServletException {
            System.out.println("Start……doFilter……SecondFilter");
            arg2.doFilter(arg0, arg1);
    //       HttpServletRequest request = (HttpServletRequest) arg0;
    //       HttpServletResponse response = (HttpServletResponse) arg1;
    //       response.sendRedirect(request.getContextPath()+"/Second.jsp");
            System.out.println("End……doFilter……SecondFilter");
    
        }
    
        @Override
        public void init(FilterConfig arg0) throws ServletException {
            System.out.println("SecondFilter过滤器destroy方法执行~");
    
        }
    
    }
    

    输出:

    Start……doFilter……FirstFilter
    Start……doFilter……SecondFilter
    处理过程执行了~
    End……doFilter……SecondFilter
    End……doFilter……FirstFilter
    

    如果把Filter0改名为Filter2将会输出:

    Start……doFilter……SecondFilter
    Start……doFilter……FirstFilter
    处理过程执行了~
    End……doFilter……FirstFilter
    End……doFilter……SecondFilter
    
  • 相关阅读:
    BZOJ 2119: 股市的预测(后缀数组+rmq)
    2018.12.26 考试(哈希,二分,状压dp)
    ural 1297. Palindrome(后缀数组+rmq)
    URAL 1996. Cipher Message 3(KMP+fft)
    2019.4.11 一题 XSY 1551 ——广义后缀数组(trie上后缀数组)
    bzoj 2553 [BeiJing2011]禁忌——AC自动机+概率DP+矩阵
    洛谷 5291 [十二省联考2019]希望(52分)——思路+树形DP
    LOJ 2587 「APIO2018」铁人两项——圆方树
    洛谷 5289 [十二省联考2019]皮配——分开决策的动态规划
    洛谷 5284 [十二省联考2019]字符串问题——后缀数组+线段树优化连边+真实字典序排序思路
  • 原文地址:https://www.cnblogs.com/famine/p/9124724.html
Copyright © 2011-2022 走看看