关于 Cannot forward after response has been committed的错误

简介: 这个错误顾名思义:就是在给客户端做出提交响应完毕后,就不能再次使用request的转发。 代码原先是这样的: 1 package com.bdqn.jsp.study.web.filter; 2 3 import javax.

这个错误顾名思义:就是在给客户端做出提交响应完毕后,就不能再次使用request的转发。

代码原先是这样的:

 1 package com.bdqn.jsp.study.web.filter;
 2 
 3 import javax.servlet.*;
 4 import javax.servlet.annotation.WebFilter;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 import java.io.IOException;
 8 
 9 @WebFilter(filterName = "checkLoginFilter", urlPatterns = "/*")
10 public class CheckLoginFilter implements Filter {
11     @Override
12     public void init(FilterConfig filterConfig) throws ServletException {
13 
14     }
15 
16     @Override
17     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
18         HttpServletRequest request = (HttpServletRequest) servletRequest;
19         HttpServletResponse response = (HttpServletResponse) servletResponse;
20         if (request.getRequestURI().contains("/user")) {
21             Object value = request.getSession().getAttribute("user");
22             if (value == null) {
23                 response.sendRedirect(request.getContextPath() + "/login.jsp");
24                 //return;
25             }
26         }
27         filterChain.doFilter(request, response);
28     }
29 
30     @Override
31     public void destroy() {
32 
33     }
34 }

注意这里是个filter主要作用:用于判断用户是否登录后才能访问相关页面,地址栏里有“/user”的地址信息,就认为改地址是登录后才能进行访问

然而在某一个servlet里有如下相关代码:

  if (returnValue != null) {
      request.getRequestDispatcher("/" + returnValue.toString()).forward(request, response);
  }

如果这么写就出问题了,因为在filter里response做出重定向后,还要执行doFilter方法,因此当执行servlet中的转发操作时就会报错了,因为在response.sendRedirect()会认为已经给response的commited属性设置成true了,因此不能再进行转发

目录
相关文章
|
17天前
|
应用服务中间件 Apache
消息 Request method ‘POST‘ not supported
消息 Request method ‘POST‘ not supported
|
9月前
|
前端开发 JavaScript
ajax请求的重定向处理--Request header field x-requested-with is not allowed by Access-Control-Allow-Header
ajax请求的重定向处理--Request header field x-requested-with is not allowed by Access-Control-Allow-Header
319 0
|
应用服务中间件 API nginx
解决跨域问题 Response to preflight request doesn't pass access control check
解决跨域问题 Response to preflight request doesn't pass access control check
8920 0
|
移动开发 前端开发 JavaScript
通过Filter,对request 和 response 进行处理
通过Filter,对request 和 response 进行处理,统一加解密,Xss过滤,HttpServletRequestWrapper,HttpServletResponseWrapper
2113 0
|
Java 应用服务中间件 Spring
Request header is too large 如何解决?
Request header is too large 如何解决?
793 0
|
Web App开发 应用服务中间件
tomcat报错:Error parsing HTTP request header
tomcat报错:Error parsing HTTP request header
249 0
|
前端开发 .NET 开发框架

热门文章

最新文章