关于 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了,因此不能再进行转发

目录
相关文章
|
存储 JSON Java
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
1062 2
|
前端开发 JavaScript Java
从前端到后端:构建全栈应用的技术路线探析
【2月更文挑战第3天】本文通过探讨前端和后端开发的基本概念和技术要点,深入剖析了构建全栈应用的技术路线。从前端的HTML、CSS和JavaScript,到后端的Java、C和数据库,我们将带您逐步了解如何将不同技术组合起来实现高效、稳定的全栈应用。
326 7
|
11月前
|
存储 关系型数据库 MySQL
什么是MyISAM和InnoDB
【10月更文挑战第17天】什么是MyISAM和InnoDB
148 0
|
监控 数据挖掘 数据安全/隐私保护
ERP系统中的客户关系管理(CRM)
【7月更文挑战第25天】 ERP系统中的客户关系管理(CRM)
871 3
|
11月前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
607 0
|
存储 Oracle 关系型数据库
Oracle数据库ACID特性
【7月更文挑战第6天】
306 6
|
SQL 存储 关系型数据库
(五)MySQL索引应用篇:建立索引的正确姿势与使用索引的最佳指南!
在本篇中,则重点讲解索引应用相关的方式方法,例如各索引优劣分析、建立索引的原则、使用索引的指南以及索引失效与索引优化等内容。
1985 0
|
XML IDE Java
JavaFX 教程
JavaFX 教程
933 1
|
Windows
zookeeper-3.8.0安装(Windows)
zookeeper-3.8.0安装(Windows)
652 0
|
关系型数据库 MySQL 分布式数据库
PolarDB-X最佳实践系列(三):如何实现高效的分页查询
分页查询是数据库中常见的操作。本文将介绍,如何在数据库中(无论是单机还是分布式)高效的进行翻页操作。
113210 10
PolarDB-X最佳实践系列(三):如何实现高效的分页查询

热门文章

最新文章