(来自:http://guoyiqi.javaeye.com/blog/75929)

tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法

在tomcat5下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),
没有妥善处理好的原因。
具体的原因就是
在tomcat中jsp编译成servlet之后在函数_jspService(HttpServletRequest request, HttpServletResponse response)的最后
有一段这样的代码
finally {
      if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
    }
这里是在释放在jsp中使用的对象,会调用response.getWriter(),因为这个方法是和
response.getOutputStream()相冲突的!所以会出现以上这个异常。

然后当然是要提出解决的办法,其实挺简单的(并不是和某些朋友说的那样--
将jsp内的所有空格和回车符号所有都删除掉),

在使用完输出流以后调用以下两行代码即可:
out.clear();
out = pageContext.pushBody();

最后这里是一个输出彩色验证码例子(这样的例子几乎随处可见)
imag.jsp

<%@ page  import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%@ page import="java.io.OutputStream" %>
<%!
Color getRandColor(int fc,int bc){
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
%>
<%
try{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
OutputStream os=response.getOutputStream();
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);

g.setFont(new Font("Times New Roman",Font.PLAIN,18));
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(rand,13*i+6,16);
}
session.setAttribute("rand",sRand);
g.dispose();

ImageIO.write(image, "JPEG",os);
os.flush();
os.close();
os=null;
response.flushBuffer();
out.clear();
out = pageContext.pushBody();
}
catch(IllegalStateException e)
{
System.out.println(e.getMessage());
e.printStackTrace();
}%>

(转载)tomcat5下jsp出现getOutputStream() has already been called for this相关推荐

  1. tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法...

    tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 [标  题]:tomcat5下js ...

  2. Java小项目中WEB-INF下jsp页面如何访问?

    Java小项目中WEB-INF下jsp页面如何访问? - 今天又是充满希望的一天 - CSDN博客 关闭 今天又是充满希望的一天 目录视图 摘要视图 订阅 var username = "H ...

  3. Linux系统下Jsp验证码显示不出来, nginx 返回500 解决方法

    Linux系统下Jsp验证码显示不出来, nginx 返回500 解决方法 tomcat日志 localhost.1949-09-15.log 报错信息 1949-09-15 9:13:34 org. ...

  4. linux是不是在根目录下安装的软件其它用户就可以使用,[转载]Linux下非root用户如何安装软件...

    [转载]Linux下非root用户如何安装软件 这是本人遇到的实际问题,之前用到的所有机器,无论是自己的PC还是云服务器,root权限都是妥妥的,但是现在发现实验室的服务器原来自己并没有root权限2 ...

  5. tomcat 下jsp乱码的原因分析

    tomcat 下jsp乱码 我们先看一个例子(包含2个文件一个test.jsp , 和result.jsp): test.jsp <%@ page language="java&quo ...

  6. 解决前端调用WEB-INF下jsp无法访问的问题

    **解决前端调用WEB-INF下jsp无法访问的问题**当我们使用SpringMVC框架开发项目时,可能会遇到在前端页面调用WEB-INF目录下jsp页面的情况.由于访问权限或者说安全问题,我们无法直 ...

  7. linux下jsp环境的搭建

    转自http://gehailong.blog.51cto.com/765312/264162作gehailong 一 .安装JDK #chmod +x jdk-6u13-linux-i586-rpm ...

  8. jsp mysql 连接池_Tomcat下JSP连接mysql连接池

    现在假如项目目录名为: test MYSQL数据库用户名为:root ,数据库密码为:jsp MYSQL建立一个数据库为:jsptest 首先写一个跟开发项目名相同的xml文件:test.xml 程序 ...

  9. Tomcat下JSP、Servlet和JavaBean环境的配置

    一.开发环境配置 第一步:下载j2sdk和tomcat:到sun官方站(http://java.sun.com/)下载j2sdk,注意下载版本,同时最好下载J2SE  Documentation,然后 ...

最新文章

  1. java程序无法连接redis 正常启动但是无法访问
  2. java饿汉式有啥作用,Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?...
  3. 超好用的移动端布局自适应大小rem判断js文件及超过一定高度回到顶部按钮代码...
  4. LaTeX半小时速成究极进化版(修改版)
  5. Beta 冲刺(1/7)
  6. git clone 获取指定分支的指定commit版本
  7. Java面向对象基础接口和抽象的理解
  8. 【OJ】洛谷函数与结构体题单题解锦集
  9. 微信潜规则:月薪过万的90后,过年都在看什么?
  10. 今天看到了和我男朋友不一样的程序员!好帅哦!
  11. 会场安排问题NYOJ14
  12. mysql FROM_UNIXTIME 格式化MYSQL时间戳函数
  13. Java基础知识总结(超详细整理),java从入门到精通pdf
  14. 3dmax渲染器下载VRay4.1渲染器下载安装教程(支持3dmax2013-2019)
  15. CTSC2016APIO2016爆零记
  16. 埃默里大学有计算机专业吗,埃默里大学计算机科学研究生最新专业排名
  17. java 分词获取词性_jie分词之分词、词性分析、关键词抽取
  18. 查询宇宙生命的家谱--TaxonKit工具详解
  19. libreoffice7.0 离线安装
  20. Java招聘网站源码+页面

热门文章

  1. gradle 修改java代码_Gradle 插件
  2. 详解Web API requestAnimationFrame
  3. spark kafka java api_java实现spark streaming与kafka集成进行流式计算
  4. linux 优盘分区,怎么在Linux系统下使用NTFS的U盘或者是分区以及移动硬盘-使用工具NTFS-3G...
  5. mysql怎么用sb文件_初识mysql数据库
  6. php 分页类 bootstrap,ThinkPHP分页使用bootstrap样式
  7. DataFrame列转json以及json转DataFrame列
  8. hive/hadoop文件格式,序列化和反序列化
  9. FastDFS环境搭建
  10. Google发布超难问答数据集「自然问题」:30万对问答,BERT都达不到70分