在使用过滤器的时候 遇到了java.lang.IllegalStateException异常
在网上找了很多相关的资料, 说是out对象 和response对象 的冲突造成的, 
因为是使用过滤器过滤大量信息(用于验证登陆信息是否失效) 
网上提出的解决方案 我觉得很不实用:
 因为 第一 我首先就没有使用out  ;
      另外,我只要在过滤器中加 跳转 request.getRequestDispatcher("url").forward(request, response);(包括重定向跳转等很多我都试过了) 就会出现IllegalStateException异常难道 在过滤器中 就是不能使用跳转了嘛?如果能 ,如何在过滤器中写跳转的语句呢?(mvc  jsp-servlet)

解决方案 »

  1.   

    怎么会不能使用跳转呢?
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
            HttpServletRequest req=((HttpServletRequest)request);     
          
            String path=req.getServletPath();
            
            String contexPath=req.getContextPath();
            
            if(path.equals("/index.jsp")||path.equals("/loginpop.htm")
             ||path.startsWith("/loginpop.php")
             ||path.startsWith("/loginpop.asp")
             ||path.startsWith("/getAllpop.htm")
                ||path.startsWith("/getAllpop.asp")
                ||path.startsWith("/getAllpop.php")
                ||path.startsWith("login.jsp")
                ||path.startsWith("css/layout.css"))
            {
            chain.doFilter(request, response);
             return;
            }
            HttpSession session=req.getSession();
          Mebers userinfo=(Mebers)  session.getAttribute("members");
          
            if(session.getAttribute("members")==null)
            {
             HttpServletResponse res=((HttpServletResponse)response);
                     request.getRequestDispatcher("").forward(request, response);
            }else
            {
             chain.doFilter(request, response);
            }

    }
      

  2.   

    request.getRequestDispatcher("URL").forward(request, response);被跳转的页面 URL 如果改页面用了重定向跳转之类的(相当于连续两次的跳转) ,就会出那个异常了
      

  3.   

    估计你和filter跳转的逻辑之间弄混,造成状态不合法的问题
    看看2楼的代码return的使用