Cannot forward after response has been committed问题解决及分析

通过TOMCAT把系统启动,可以正常登陆门户,登陆进去选择子系统的时候点击登陆的时候,可是去又回到了登陆界面,如此反复就是不能够进入子系统,查看后台报的错误:

Cannot forward after response has been committed

中文意思就是已经有提交了,不能够再次转向了,然后根据JSP标签中设置的错误页面又回到了登陆页面。

(核心:同一个servlet(并且该servlet里面存在重定向或者请求转发)被多次访问,而导致了上面出现的错误)。见我出现错误的例子:

package sc.tl.filter;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.websocket.Session; /**
* Servlet Filter implementation class adminLogin
*/
@WebFilter("/manage/*")
public class adminLogin implements Filter { public void destroy() { } /**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//父类转子类
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response; //设置字符集
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8"); HttpSession s = req.getSession();
//获取session中的isAdmin的值
String flag = (String)s.getAttribute("isAdminLogin"); String spath = req.getRequestURI().substring(req.getContextPath().length());
if(spath.contains("admin_")) {
if(flag!=null && flag.equals("1")) {
chain.doFilter(request, response);
return; //出现上述问题的地方
} else {
PrintWriter out = response.getWriter();
out.write("<script>");
out.write("alert('请先登录管理员用户账号!');");
out.write("location.href='login.jsp';");
out.write("</script>");
out.close();
return;
}
}
chain.doFilter(request, response);
} /**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
} }

上面的代码是一个关于用户访问管理员页面的一个过滤器。如果是管理员且登录那么就转发到相应的servlet或者jsp页面中去,否则就决绝访问。

而我找了一半天的错误竟然是管理员验证成功

chain.doFilter(request, response);
之后,忘记return跳出了,导致再一次执行了最后面的
chain.doFilter(request, response);
也就是说如果是管理员可以访问的servlet和jsp,那么始终会访问两次,就会爆Cannot forward after response has been committed的错误!
自己注意查看,出现这样的错误,肯定是不注意的是后访问了两次。

Cannot forward after response has been committed问题的解决的更多相关文章

  1. Cannot forward after response has been committed

    项目:蒙文词语检索 日期:2016-05-01 提示:Cannot forward after response has been committed 出处:request.getRequestDis ...

  2. java.lang.IllegalStateException: Cannot forward after response has been committed的一个情况解决方法

    java.lang.IllegalStateException: Cannot forward after response has been committed xxx.xxx.doPost(upd ...

  3. nested exception is java.lang.IllegalStateException: Cannot forward after response has been committed

    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...

  4. java.lang.IllegalStateException: Cannot forward after response has been committed

    jjava.lang.IllegalStateException: Cannot forward after response has been committed at org.apache.cat ...

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

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

  6. grails中报Cannot create a session after the response has been committed异常的解决办法

    在grails中,我们在layouts\main.gsp中使用类似如下的代码来判断当前用户处于登录状态时显示相关的登录信息: <g:if test="${session.users}& ...

  7. idea调试SpringMvc, 出现:”javax.servlet.ServletException: java.lang.IllegalStateException: Cannot create a session after the response has been committed"错误的解决方法

    调试拦截器出现以下错误: HTTP Status 500 - javax.servlet.ServletException: java.lang.IllegalStateException: Cann ...

  8. Cannot forward after response has been committed 错误

    出现该错误的原因是:页面的跳转控制不好,换句话就是说程序的逻辑控制不好,导致了程序顺序执行的时候多次跳转到同一页面,有的程序员建议用多次使用return语句来返回,但是个人认为最好的还是自己要先理清页 ...

  9. Cannot call sendRedirect() after the response has been committed错误;

    Cannot call sendRedirect() after the response has been committed提示信息其实很清楚,如果response已经提交过了,就无法再发送sen ...

随机推荐

  1. Hadoop4-HDFS分布式文件系统原理

    一.简介 1.分布式文件系统钢结构 分布式文件系统由计算机集群中的多个节点构成,这些节点分为两类: 主节点(MasterNode)或者名称节点(NameNode) 从节点(Slave Node)或者数 ...

  2. docker——harbor

    为什么要用harbor? 在实际生产运维中,往往需要把镜像发布到几十.上百台或更多的节点上.这时单台Docker主机上镜像已无法满足,项目越来越多,镜像就越来越多,都放到一台Docker主机上是不行的 ...

  3. MySql——使用where子句过滤数据

    示例使用的数据表在上一个博客中创建的https://www.cnblogs.com/lbhym/p/11895968.html 参考资料:<Mysql必知必会> 1.使用where子句 示 ...

  4. scrapy_redis分布式爬虫

    文章来源:https://github.com/rmax/scrapy-redis Scrapy-Redis Documentation: https://scrapy-redis.readthedo ...

  5. Linux菜鸟——常见命令一 权限

    Linux对文件和目录的权限位 权限位是十位 第一位 代表文件类型 - 普通文件 d 目录文件 l 链接文件 后面九尾 所有者权限 u = user 所属组权限 g = group 其他人权限 o = ...

  6. RabbitMQ的入门学习

    RabbitMq消息队列 参考:https://blog.csdn.net/hellozpc/article/details/81436980 什么是消息队列 MQ :message Queue ,实 ...

  7. Java流程控制之(二)循环

    目录 while循环 do..while循环 for循环 while循环和for循环基本概念--直接上代码! while循环 int i = 0; while(i<10) { System.ou ...

  8. 【Luogu P3376】网络最大流

    Luogu P3376 最大流是网络流模型的一个基础问题. 网络流模型就是一种特殊的有向图. 概念: 源点:提供流的节点(入度为0),类比成为一个无限放水的水厂 汇点:接受流的节点(出度为0),类比成 ...

  9. 常见 MIME 类型列表(转)

    本文转自:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MI ...

  10. 我的 Input框 不可能这么可爱

    <input /> 标签是我们日常开发中非常常见的替换元素了,但是最近在刷 whattwg 跟 MDN 的时候发现 跟 <input /> 有很多相关的属性,选择器都没怎么用过 ...