Filter中chain.doFilter(request,response)的理解

331 查看

对于一个新手概念很难理解,在敲代码的过程中对chain.doFilter()有了新的理解。
原来一直不清楚doFilter()有疑问:“传递到下一个Filter。”但是如果没有下一个过滤器那它起什么作用呢?今天终于搞明白了,在没有新的filter的情况下,doFilter()返回当前的请求(也就是你在地址栏输入的地址)。上代码:
通过判断条件,Filter过滤谁(那个网页)在没有下个Filter的情况下最后就返回所过滤的网页。

`public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("我是快乐的测试");
        HttpServletRequest req=(HttpServletRequest)request;
        HttpServletResponse res=(HttpServletResponse)response;
        HttpSession session=req.getSession();
        String st=config.getInitParameter("checkjsp");
        String charset = config.getInitParameter("charset");
        if(charset==null){
            charset = "UTF-8";
        }
        request.setCharacterEncoding(charset);
        if(st!=null){

            System.out.println("我是快乐的测试1");
            String[] c=st.split(";");
            for(int i=0;i<c.length;i++){
                if(c[i]==null||" ".equals(c[i])) continue;
                if(req.getRequestURL().indexOf(c[i])!=-1){
                    chain.doFilter(request, response);
                    System.out.println(req.getRequestURL()+"结束本方法");
                    return;
                }
            }
            System.out.println("我是快乐的测试34567");
        }
        if(session.getAttribute("username")!=null){
            System.out.println("我是快乐的测试345");
            chain.doFilter(request, response);
        }else{
            System.out.println(request.getParameter("username"));
            System.out.println(session.getAttribute("username"));
            System.out.println("我是快乐的测试347");
            res.sendRedirect("LogIn.jsp");
        }

    }