Cannot forward after response has been committed问题的解决

854594834-YT 2019-12-13 原文

Cannot forward after response has been committed问题的解决

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的错误!
自己注意查看,出现这样的错误,肯定是不注意的是后访问了两次。
发表于
2019-12-13 23:35 
路神 
阅读(
评论(

编辑

收藏

 

版权声明:本文为854594834-YT原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/854594834-YT/p/12037810.html

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

  1. Protege A DOT error has occurred错误 – 水滴四川

    Protege A DOT error has occurred错误 问题参生的原因:graphviz没有安装 […]...

  2. 部署项目 WebSocket failed: Error during WebSocket handshake: Unexpected response code: 400

    解决nginx转发websocket报400错误 转载链接:https://www.cnblogs.com/d […]...

  3. BUG:upstream timed out (10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected

    更换Apache扑向Nginx,刚搭建完WNMP,nginx能访问php页面 但是访问现有开发项目报错 1 [ […]...

  4. Win7无法安装程序提示Installer integrity check has failed的解决方法

    最近小明在Win7系统中下载了一款软件,但是在下载的时候弹出了NSIS Error:Installer int […]...

  5. win7安装docker报错:error during connect: Get http ….. the system cannot find the file specified

    因为是win7 所以使用了官方网站的dockertoolbox 安装一路顺利,结果启动就报上面的错误, 因为安 […]...

  6. 连接Mysql时出现java.math.BigInteger cannot be cast to java.lang.Long问题

      今天遇见这样一个坑。在连接数据库进行查询数据时,大家可能会遇见这样一个问题:java.math.BigIn […]...

  7. Android Studio \”cannot resolve symbol R\” 问题

    初接触Android Studio,又遇到了 “cannot resolve symbol R&# […]...

  8. JSP最常用的五种内置对象(out,request,response,session,application)

    为了简化开发过程,JSP提供了一些内置对象,它们由容器实现和管理。开发者在JSP页面中无需声明,无需实例化就可 […]...

随机推荐

  1. js数组与字符串的相互转换

    js数组与字符串的相互转换 一、数组转字符串 需要将数组元素用某个字符连接成字符串,示例代码如下: var a […]...

  2. 讨论过后而引发对EF 6.x和EF Core查询缓存的思考

    前言 最近将RabbitMQ正式封装引入到.NET Core 2.0项目当中,之前从未接触过是个高大上的东东跟 […]...

  3. 国内开源缺陷管理系统PPM Bug v1.5 发布

    PPM Bug v1.5 第六个版本发布啦,欢迎大家到PPM项目主页免费下载使用~ 这个版本解决并修复了很多用 […]...

  4. [从今天开始修炼数据结构]队列

    一、什么是队列   队列queue是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。   队列是先进 […]...

  5. 微信开发者工具—小程序开发支付接口

    微信开发者工具登入账号,必须和微信支付商户号相同,归属于商户号开发账号。 小程序测试Appid,要与微信支付后 […]...

  6. 开源项目SMSS发开指南(五)——SSL/TLS加密通信详解(下)

    继上一篇介绍如何在多种语言之间使用SSL加密通信,今天我们关注Java端的证书创建以及支持SSL的NioSoc […]...

  7. 嵌入式-01-LinuxC语言

    一.必备Linux命令和C语言基础   1.Linux环境搭建(在第一阶段有提及).   2.文件和目录相关命 […]...

  8. 我所理解的RESTful Web API [设计篇]

    2000年,Roy Thomas Fielding博士在他那篇著名的博士论文《Architectural St […]...

展开目录

目录导航