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
    
  • 相关阅读:
    skynet源码分析之socketchannel
    skynet源码分析之master/salve集群模式
    skynet源码分析之网络层——网关服务器
    Android反编译基础(apktoos)--广工图书馆APK
    Android-Native-Server 启动和注册详细分析
    Android NDK r8 windows环境搭建
    Android 4.1.1源码编译
    Android Binder------ServiceManager启动分析
    更改系统盘符后DFS无法复制故障处理
    Centos6.9部署Gitlab-11.9.8并汉化
  • 原文地址:https://www.cnblogs.com/famine/p/9124724.html
Copyright © 2011-2022 走看看