文档章节

Cannot forward after response has been committed

小橙子的曼曼
 小橙子的曼曼
发布于 09/20 23:23
字数 981
阅读 6
收藏 0

声名:转载自CSDN

通过toncat启动服务器,可以正常登陆访问,登陆进去选择子系统的时候点击登陆的时候,可是去又回到了登陆界面,如此反复就是不能够进入子系统,查看后台报的错误: java.lang.IllegalStateException: Cannot forward after response has been committed 

这个错误可以用500页面拦截,但是后台一直报错。这个是属于代码语法错误。

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

这个是错误是由于response多次提交或者是由于有页面显示后仍然含请求转向产生的,就是说程序在return之前就已经执行了跳转或者执行过response。我在做这个时,简直要奔溃了,怎么弄都不行,网上的资源找遍了,最后总结了以下几类导致的错误,并给出解决方案。

第一类:

1、  往输出流写了东西,然后又跳转了页面。

也就是说,

Stringurl = "/treatDenglu.jsp";

RequestDispatcher rd =request.getRequestDispatcher(url);

           rd.forward(request,response);

在此语句跳转之前,你使用了文件操作流;可以先注释掉再尝试。

第二类

2、  用out对象,向JSP页面print了数据,然后又跳转。

也就是说,PrintWriter out = response.getWriter();

                     out.println(“<html>”);

获得了out对象,往JSP页面打印输出,如果有这样的语句会报错,因为我们写的servlet类,就是用来响应用户的访问请求的,而out.print()是要把内容输出到(响应)页面,也是对用户访问的响应,所以如果在跳转之前有out.println(“<html>”)相当于已经response响应了用户请求,所以再rd.forward(request,response就会)提示已经重复提交。

解决方案:使用MVC模型,把out.println(“<html>”)语句去掉,其相应的功能交给JSP页面显示。

第三类

3、  如果前面2种后还有错,那可能由于调用了父类的super.doPost(request,response);

这是因为,doPost()[doXXX()]方法就是service()执行过程中判断用户访问方式(post、get等)后,调用的响应响应方法,即执行相应的doXXX()方法去响应用户,而显示调用父类的doPost()方法,且先执行完,就等于已经响应了一次,然后又去跳转又去响应,就会报错重复提交。所以去掉super.doPost(request,response);

第四类

4、  如果还有问题,看看这种;

正如前面所说,这个是错误是由于response多次提交或者是由于有页面显示后仍然含请求转向产生的,就是说程序在return之前就已经执行了跳转或者执行过response,之后遇到return的话,程序想再次执行跳转,也就是重定向,这时功能也许会实现了,解决办法是在跳转语句末尾加上return;或return null;,,就不能转到另外的页面了

如 servlet.getServletContext().getRequestDispatcher("/deal.jsp").forward(request, response);  

 return null;  

小提示:

1、forward(request, response);跳转页面,执行这个语句之后,如果此语句后面还有代码,既然跳转了页面后面代码执行不了,原页面的代码没有终止一定会出错。
解决方法,在forward(request, response);跳转后面不要写其他代码,且加上 return;
2、自己写的servlet类更改代码后,重新编译,且要重启服务器;修改了配置文件web.xml不需重启,tomcat会重新加载。

© 著作权归作者所有

共有 人打赏支持
小橙子的曼曼
粉丝 2
博文 51
码字总数 32018
作品 0
兰州
java.lang.IllegalStateException异常产生的原因及解决办法

问题描述: 错误类型大致为以下几种: java.lang.IllegalStateException:Cannot forward a response that is already committed IllegalStateException:response already commited Illegal......

IT妖姬
2014/04/14
0
0
过滤器doFilter中的异常捕获后页面跳转forward出错:Cannot forward after response has been committed

需求:在filter中捕获异常后跳转的错误页面 问题描述: 已在fitler中catch了异常,但调用代码 request.getRequestDispatcher("/error.html").forward(request, response); 试图跳转到错误页面...

OSC_KDsfzw
2017/01/26
291
0
java.lang.IllegalStateException异常产生的原因及解决办法

java.lang.IllegalStateException异常产生的原因及解决办法 错误类型大致为以下几种: java.lang.IllegalStateException:Cannot forward a response that is already committed IllegalStat......

guhai2004
2013/12/24
0
1
Cannot forward after response has been committed问题解决及分析

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

lvsazf
2014/04/14
0
0
java web的进来看一下!页面重定向的异常!帮忙看一下!谢谢了!

我用login.jsp进行登录留言板的管理页面用一个servlet进行身份验证。成功----->通过request.getRequestDispatcher("/admin/secure/manage?q=list").forward(request, response);return;其中/......

WlzSnail
2010/09/14
804
3

没有更多内容

加载失败,请刷新页面

加载更多

[Hive]JsonSerde使用指南

注意: 重要的是每行必须是一个完整的JSON,一个JSON不能跨越多行,也就是说,serde不会对多行的Json有效。 因为这是由Hadoop处理文件的工作方式决定,文件必须是可拆分的,例如,Hadoop将在...

Mr_yul
24分钟前
1
0
54:mysql修改密码|连接mysql|mysql常用命令

1、mysql修改密码: root用户时mysql的超级管理员,默认mysql的密码是空的,直接可以连接上去的,不过这样不安全; 注释:为了方便的使用mysql,需要把mysql加入到环境变量里; #后续自己输入mys...

芬野de博客
31分钟前
1
0
鼠标单击复制粘贴标签中的内容

<span ref="spanContentOne" id="spanContentOne" style="font-size: 14px;">或许不是最亮眼,总比瞎买强一点</span><!--<input type="button" @click="copyClick('1')" value="复制" />-......

帝子兮
35分钟前
1
0
使用axel多线程疯狂下载

在Linux中比较常见见的下载工具是curl和wget,但是下载比较大的文件两者都不支持多线程, 断点续传的作用不见得能发挥到最大。今天介绍一个axel工具,开启多线程疯狂下载。 安装 Fedora/Cen...

linuxprobe16
37分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部