getOutputStream() has already been called for this response 这个错误遇到过不少次,网上看到大多不能解决问题。
下面两点是我自己总结出来的:
1、在我们应用验证码时,都会用到字节流response.getOutputStream()来将验证码输出,但是jsp页面自己最后会调用字符流JspWriter的out()方法将页面的内容输出。通过查看servlet的API我们可以看到知道,在servlet中不能够同时利用这两个流输出,解决办法将验证码写在servlet中,具体见下面。
2、相信请求转发( request.getRequestDispacher().forward() )和请求跳转( response.sendRedirect() )的区别大家都知道。其中request.getRequestDispacher().forward() 方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程。JSP页面转译为的_servlet会最后调用releasePageContext()方法( All PageContext objects obtained via this method shall be released by invoking releasePageContext().)释放我们页面所有的实体对象,当我们的调用者有页面输出时,就会抛出这个异常。具体原因也没有弄清楚,各位大侠如果谁知道可以告知一下。其实验证码也是同一个原理,如果我们将验证码的代码写在jsp页面中,因为jsp页面会调用JspWriter的out()方法将内容输出,同时我们的图片又调用了response.getOutputStream()方法因此会抛出这个异常;如果我们将验证码写在servlet中,就不会同时使用两种输出也就不会出错。有时即使调用者页面没有输出,也会抛出这个异常,仔细看jsp转译以后的源码发现输出了换行,因此,我们最好把调用者页面的%>和<%之间换行去掉,把%>和<%直接写在一起。
另外,如果我们实在要在jsp中用到response.getOutputStream(),比如验证码、jspSmartUpload,我们需要在最后加入如下代码:
response.reset();
out.clear();
out=pageContext.pushBody();
有不对之处还望指教!
下面两点是我自己总结出来的:
1、在我们应用验证码时,都会用到字节流response.getOutputStream()来将验证码输出,但是jsp页面自己最后会调用字符流JspWriter的out()方法将页面的内容输出。通过查看servlet的API我们可以看到知道,在servlet中不能够同时利用这两个流输出,解决办法将验证码写在servlet中,具体见下面。
2、相信请求转发( request.getRequestDispacher().forward() )和请求跳转( response.sendRedirect() )的区别大家都知道。其中request.getRequestDispacher().forward() 方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程。JSP页面转译为的_servlet会最后调用releasePageContext()方法( All PageContext objects obtained via this method shall be released by invoking releasePageContext().)释放我们页面所有的实体对象,当我们的调用者有页面输出时,就会抛出这个异常。具体原因也没有弄清楚,各位大侠如果谁知道可以告知一下。其实验证码也是同一个原理,如果我们将验证码的代码写在jsp页面中,因为jsp页面会调用JspWriter的out()方法将内容输出,同时我们的图片又调用了response.getOutputStream()方法因此会抛出这个异常;如果我们将验证码写在servlet中,就不会同时使用两种输出也就不会出错。有时即使调用者页面没有输出,也会抛出这个异常,仔细看jsp转译以后的源码发现输出了换行,因此,我们最好把调用者页面的%>和<%之间换行去掉,把%>和<%直接写在一起。
另外,如果我们实在要在jsp中用到response.getOutputStream(),比如验证码、jspSmartUpload,我们需要在最后加入如下代码:
response.reset();
out.clear();
out=pageContext.pushBody();
有不对之处还望指教!
发表评论
-
一个故事讲清楚NIO(转载)
2015-10-22 11:32 664假设某银行只有10个职 ... -
struts2动态生成zip文件并下载
2013-10-18 14:55 962功能:zip文件下载 简述: 1.根据画面上的复选框进行文 ... -
如何远程连接db2数据库
2012-09-18 10:10 974在DB2数据库中,编目(catal ... -
[转]DB2行列转换
2012-09-13 13:15 882行转列 给出下面的数据: CREATE TABLE Sales ... -
存储过程 入门
2012-09-07 09:49 904示例说明:先创建一个临时表,并插入数据,然后查询临时表,返回游 ... -
ue使用的一些小技巧
2012-09-05 11:36 12771. UE里面替换tab键为空格 解决使用UE编辑好 ... -
ext tree 更改图标
2012-04-16 23:11 1709如果在Java代码中树的Node不设置cls的话,Extjs ... -
js六种数据类型和var
2012-04-13 14:32 1261JavaScript 有六种数据类 ... -
ExtJs 控制复选框disabled
2012-04-13 14:12 2940var csm2 = new Ext.grid.Checkbo ... -
JS 四舍五入
2012-04-10 23:36 968写法巨强的四舍五入的转换函数,如下: function ro ... -
Ext el属性
2012-04-10 23:08 897这个是你要将你的组件渲染到哪个div 比如有个<div ... -
修改TOMCAT(5.5版本前)内存的方法
2012-03-30 11:34 1111Tomcat默认可以使用的内 ... -
oracle 常用sql
2012-03-27 10:49 858--创建用户 CREATE USER &q ... -
两台windows服务器----SVN的迁移
2012-03-26 17:27 1166两台服务器,进行SVN的迁移: 系统平台:windows se ... -
hibernate 延迟加载
2012-03-23 18:06 793延迟加载机制是为了避 ... -
分享一个ldap验证链接的方法
2012-03-22 12:07 1152public String auth(String userN ... -
poi 操作excel
2012-03-19 21:52 1180本篇面向对象为Java的初 ... -
Oracle Minus关键字
2012-03-06 15:56 1154//--一句话 去同存异,留第一个sql里面的结果。 //创建 ... -
闪回 找回已删除的数据
2012-02-24 15:26 832SCN(系统改变号),它的英文全拼为:System Chang ... -
orcl用sql生成xml
2012-02-20 19:03 1038最近做项目,需要提供xml字符串给第三方,之后我试了试这两种数 ...
相关推荐
在Java Web开发中,"getOutputStream() has already been called for this response" 是一个常见的错误,通常出现在使用Servlet或JSP时。这个错误意味着在HTTP响应中,`getOutputStream()`已经被调用,然后尝试再次...
1.在tomcat6.0下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 在tomcat6.0下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),没有...
验证码出现getOutputStream() has already been called for this response错误解决
纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....
解决了getOutputStream() has already been called for this response. 并将产生验证码的逻辑从JSP页面中分离出来,单独写了一个类 便于重用。
Returns a boolean indicating whether the named response header has already been set. contextDestroyed(ServletContextEvent) - Method in interface javax.servlet.ServletContextListener Notification ...