• 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
    
  • 相关阅读:
    【天梯 L2-008 最长对称子串 】 最长回文子串 manacher
    【天梯L2-001 城市间紧急救援】 双关键字最短路+记录路径 堆优化Dijkstra
    记录板

    留言板
    使用 Docker 搭建 Java Web 运行环境(转)
    数据库隔离级别和锁
    线程上下文类加载
    tomcat是怎么找到项目lib目录下的jar包的,求大神解答
    Java中try、finally语句中有return时的执行情况 [转]
  • 原文地址:https://www.cnblogs.com/famine/p/9124724.html
Copyright © 2020-2023  润新知