关于 Cannot forward after response has been committed的错误
这个错误顾名思义:就是在给客户端做出提交响应完毕后,就不能再次使用request的转发。
代码原先是这样的:
package com.bdqn.jsp.study.web.filter; import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @WebFilter(filterName = "checkLoginFilter", urlPatterns = "/*")
public class CheckLoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
if (request.getRequestURI().contains("/user")) {
Object value = request.getSession().getAttribute("user");
if (value == null) {
response.sendRedirect(request.getContextPath() + "/login.jsp");
//return;
}
}
filterChain.doFilter(request, response);
} @Override
public void destroy() { }
}
注意这里是个filter主要作用:用于判断用户是否登录后才能访问相关页面,地址栏里有“/user”的地址信息,就认为改地址是登录后才能进行访问
然而在某一个servlet里有如下相关代码:
  if (returnValue != null) {
      request.getRequestDispatcher("/" + returnValue.toString()).forward(request, response);
  }
如果这么写就出问题了,因为在filter里response做出重定向后,还要执行doFilter方法,因此当执行servlet中的转发操作时就会报错了,因为在response.sendRedirect()会认为已经给response的commited属性设置成true了,因此不能再进行转发
关于 Cannot forward after response has been committed的错误的更多相关文章
- Cannot forward after response has been committed问题的解决
		
Cannot forward after response has been committed问题解决及分析 通过TOMCAT把系统启动,可以正常登陆门户,登陆进去选择子系统的时候点击登陆的时候,可 ...
 - Cannot forward after response has been committed
		
项目:蒙文词语检索 日期:2016-05-01 提示:Cannot forward after response has been committed 出处:request.getRequestDis ...
 - java.lang.IllegalStateException: Cannot forward after response has been committed的一个情况解决方法
		
java.lang.IllegalStateException: Cannot forward after response has been committed xxx.xxx.doPost(upd ...
 - nested exception is java.lang.IllegalStateException: Cannot forward after response has been committed
		
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...
 - java.lang.IllegalStateException: Cannot forward after response has been committed
		
jjava.lang.IllegalStateException: Cannot forward after response has been committed at org.apache.cat ...
 - Cannot forward after response has been committed 错误
		
出现该错误的原因是:页面的跳转控制不好,换句话就是说程序的逻辑控制不好,导致了程序顺序执行的时候多次跳转到同一页面,有的程序员建议用多次使用return语句来返回,但是个人认为最好的还是自己要先理清页 ...
 - Cannot call sendRedirect() after the response has been committed错误;
		
Cannot call sendRedirect() after the response has been committed提示信息其实很清楚,如果response已经提交过了,就无法再发送sen ...
 - 报错:java.lang.IllegalStateException: Cannot call sendError() after the response has been committed(待解答)
		
严重: Servlet.service() for servlet [default] in context with path [/20161101-struts2-1] threw excepti ...
 - grails中报Cannot create a session after the response has been committed异常的解决办法
		
在grails中,我们在layouts\main.gsp中使用类似如下的代码来判断当前用户处于登录状态时显示相关的登录信息: <g:if test="${session.users}& ...
 
随机推荐
- HAOI 2012 高速公路
			
https://www.luogu.org/problem/show?pid=2221 题目描述 Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这 ...
 - JSONP 详解
			
1.什么是JSONP ? JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实 ...
 - Ubuntu安装使用latex
			
TeX Live is a TeX distribution to get up and running with the TeX document production system. To ins ...
 - react中的DOM操作
			
前面的话 某些情况下需要在典型数据流外强制修改子代.要修改的子代可以是 React 组件实例,也可以是 DOM 元素.这时就要用到refs来操作DOM 使用场景 下面是几个适合使用 refs 的情况 ...
 - ajax 操作
			
ajax 操作 ajax呢,就是要做到在神不知鬼不觉的情况之下给服务端发送请求. ajax能干啥哩? 这,,,,: 利用AJAX可以做:1.注册时,输入用户名自动检测用户是否已经存在.2.登陆时,提示 ...
 - kubernetes入门(09)kubernetes1.7集群安装(2017/11/13)
			
CentOS7.3利用kubeadm安装kubernetes1.7.3完整版(官方文档填坑篇) https://www.cnblogs.com/liangDream/p/7358847.html 一. ...
 - TCP/IP和HTTP协议代理
			
TCP/IP协议族 TCP/IP(传输控制协议/网际协议)是用于计算机通信的一个协议族. TCP/IP协议族包括诸如Internet协议(IP).地址解析协议(ARP).互联网控制信息协议(ICMP) ...
 - Hive:把一段包含中文的sql脚本粘贴到beeline client运行中文乱码
			
背景: 在做项目过程中不可能hive表中都是非中文字段.在最近做的项目中就遇到需要在beeline界面上执行查询脚本,但脚本中包含中文,正常一个脚本用文本写好后,粘贴到beeline窗口运行时,发现中 ...
 - Java 微服务框架选型(Dubbo 和 Spring Cloud?)
			
微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很好地完成该任 ...
 - javascript实现有限状态机
			
1.状态机描述 简单说,有限状态机是一种模型,模型都用来模拟事物,能够被有限状态机这种模型模拟的事物,一般都有以下特点: 1)可以用状态来描述事物,并且任一时刻,事物总是处于一种状态: 2)事物拥有的 ...