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 616假设某银行只有10个职 ... -
struts2动态生成zip文件并下载
2013-10-18 14:55 873功能:zip文件下载 简述: 1.根据画面上的复选框进行文 ... -
如何远程连接db2数据库
2012-09-18 10:10 888在DB2数据库中,编目(catal ... -
[转]DB2行列转换
2012-09-13 13:15 810行转列 给出下面的数据: CREATE TABLE Sales ... -
存储过程 入门
2012-09-07 09:49 855示例说明:先创建一个临时表,并插入数据,然后查询临时表,返回游 ... -
ue使用的一些小技巧
2012-09-05 11:36 11971. UE里面替换tab键为空格 解决使用UE编辑好 ... -
ext tree 更改图标
2012-04-16 23:11 1635如果在Java代码中树的Node不设置cls的话,Extjs ... -
js六种数据类型和var
2012-04-13 14:32 1214JavaScript 有六种数据类 ... -
ExtJs 控制复选框disabled
2012-04-13 14:12 2853var csm2 = new Ext.grid.Checkbo ... -
JS 四舍五入
2012-04-10 23:36 914写法巨强的四舍五入的转换函数,如下: function ro ... -
Ext el属性
2012-04-10 23:08 842这个是你要将你的组件渲染到哪个div 比如有个<div ... -
修改TOMCAT(5.5版本前)内存的方法
2012-03-30 11:34 1065Tomcat默认可以使用的内 ... -
oracle 常用sql
2012-03-27 10:49 806--创建用户 CREATE USER &q ... -
两台windows服务器----SVN的迁移
2012-03-26 17:27 1113两台服务器,进行SVN的迁移: 系统平台:windows se ... -
hibernate 延迟加载
2012-03-23 18:06 737延迟加载机制是为了避 ... -
分享一个ldap验证链接的方法
2012-03-22 12:07 1074public String auth(String userN ... -
poi 操作excel
2012-03-19 21:52 1099本篇面向对象为Java的初 ... -
Oracle Minus关键字
2012-03-06 15:56 1096//--一句话 去同存异,留第一个sql里面的结果。 //创建 ... -
闪回 找回已删除的数据
2012-02-24 15:26 782SCN(系统改变号),它的英文全拼为:System Chang ... -
orcl用sql生成xml
2012-02-20 19:03 980最近做项目,需要提供xml字符串给第三方,之后我试了试这两种数 ...
相关推荐
NULL 博文链接:https://javal.iteye.com/blog/1993903
1.在tomcat6.0下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 在tomcat6.0下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),没有...
纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....
验证码出现getOutputStream() has already been called for this response错误解决
解决了getOutputStream() has already been called for this response. 并将产生验证码的逻辑从JSP页面中分离出来,单独写了一个类 便于重用。
NULL 博文链接:https://nethub2.iteye.com/blog/2023937
servlet的response可以对返回的内容和格式进行一些设置。
Returns a boolean indicating whether the named response header has already been set. contextDestroyed(ServletContextEvent) - Method in interface javax.servlet.ServletContextListener Notification ...
* This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server ...
随机获取验证码 public class CheckNumberServlet extends HttpServlet { ... ServletOutputStream sos = response.getOutputStream();…………………………………………………………………………………………
public void code(HttpServletRequest request, HttpServletResponse response) throws IOException{ String[] tableNames = new String[]{};... IOUtils.write(data, response.getOutputStream()); }
heads是excel表头,datalist是数据public void createExcelStream(HttpServletResponse response,String filename,String[] heads,List[]> datalist){ try{ OutputStream os = response.getOutputStream();...
getWriter() 和Response.getOutputStream冲突
import java.io.*; import java.util.*; import javax.servlet.*; ... public class MyServlet ... OutputStream out_Stream = response.getOutputStream(); out_Stream.write( data ); out_Stream.close(); } }
OutputStream outs = response.getOutputStream();// 获取文件输出IO流 BufferedOutputStream bouts = new BufferedOutputStream(outs); response.setContentType("application/x-download");// 设置response...
在table中导出Excel详细过程OutputStream os = response.getOutputStream(); response.setContentType("application/msexcel"); response.setHeader("Content-disposition","attachment; filename=clerkAddress.xls...
用与java web 开发,java 实现的数字验证码的生成 class Image{} *" %> //设置页面不缓存 response.setHeader("Pragma","No-cache");...ImageIO.write(image.creatImage(), "JPEG", response.getOutputStream()); %>
VC6.0 实现jpeg图像的读取
简单的验证码实现 public static void ... ServletOutputStream out = response.getOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(image); out.close(); }