tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法...
【标 题】:tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
【关键字】:tomcat5,jsp,getOutputStream,has,already,been,called,for,this,response
【来 源】:http://blog.csdn.net/alexwan/archive/2007/02/13/1508871.aspx
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 contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*,java.io.*" %>
<%!
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);
OutputStream os = response.getOutputStream();
// 在内存中创建图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
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(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
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);
}
// 取随机产生的认证码(4位数字)
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
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();
}
%>
转载于:https://www.cnblogs.com/huqingyu/archive/2009/02/18/1393126.html
tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法...相关推荐
- getOutputStream() has already been called for this response异常的原因和解决方法[转]
1.在tomcat6.0下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 在tomcat6.0下j ...
- getOutputStream() has already been called for this response异常的原因和解决方法
今天在调试一个小web项目时,验证码不显示了,而且后台报错 getOutputStream() has already been called for this response 经过查找得知: 在t ...
- (转载)tomcat5下jsp出现getOutputStream() has already been called for this
(来自:http://guoyiqi.javaeye.com/blog/75929) tomcat5下jsp出现getOutputStream() has already been called fo ...
- getOutputStream() has already been called for this response 当前响应已经调用了方法getOutputStream()
getOutputStream() has already been called for this response 当前响应已经调用了方法getOutputStream() 如果遇到这个问题,一般 ...
- linux 下搭建yolov3错误,yolov3---报段错误的可能原因及解决方法
参考: ************************************************************************************************ ...
- python open找不到文件的原因_浅谈python在提示符下使用open打开文件失败的原因及解决方法...
题目:在提示符下使用open打开一个文件 刚开始网上看了下打开的方式,结果一直实现不了,报错是没找到这个文件,而且和我输入的文件名不一样. 错误如下: >>>open('d:\456 ...
- win7下计划任务schtasks使用详解及错误:无法加载列资源的解决方法1
win7下计划任务schtasks使用详解及"错误:无法加载列资源"的解决方法1 2011-12-10 20:33 schtasks 命令简述: 安排命令和程序,使其定期运行或在指 ...
- [css] 父元素下有子元素,子元素也有高度但父元素的高度为何为0呢?分析下可能出现的原因及解决方法
[css] 父元素下有子元素,子元素也有高度但父元素的高度为何为0呢?分析下可能出现的原因及解决方法 父元素塌陷父元素在文档流中高度默认是被子元素撑开的,当子元素脱离文档流以后,将无法撑起父元素的高度 ...
- /var/spool/clientmqueue目录下存在大量文件的原因及解决方法
/var/spool/clientmqueue目录下存在大量文件的原因及解决方法 参考文章: (1)/var/spool/clientmqueue目录下存在大量文件的原因及解决方法 (2)https: ...
最新文章
- LA3602DNA序列
- 【推荐系统】基于图嵌入技术的推荐系统长文综述
- 第十七天:规划沟通管理
- mysql 修复表和优化表
- 有乳胶枕吗_乳胶枕怎么挑?网传的踩鸡蛋检测法,实际不靠谱
- 从0到1搭建移动App功能自动化测试平台(2):操作iOS应用的控件
- html怎么设置自动音乐播放器,运用js教你轻松制作html音乐播放器
- 计蒜客 第一场 搜狗输入法
- mht转html保留图片,【JAVA】mht文件转html
- 啸叫抑制(howling suppression)
- yarn 错误There appears to be trouble with your network connection. Retrying
- 布朗大学计算机专业怎么样,布朗大学的计算机专业如何?
- apicloud——微信第三方登录、apple登录
- Jquery 浏览器调用高德地图进行导航
- 8寸Single机台喷淋去胶加工服务
- java软件工程师工作业绩_java工程师个人简历自我评价_JAVA软件工程师面试简历的自我评价...
- 004-JDK的下载和安装
- 使用四种框架分别实现1百万websocket常连接的服务器
- MPB:中农戴兆来组-​猪肠道微生物的体外培养与功能研究
- Spring核心组件详解(Bean、Context、Core)
热门文章
- 最全的C++面试题来啦!(来自各大一线互联网)
- java转换汇编,请问如何把JAVA程序转为汇编?
- vsm java_java – 我尝试使用JAXB将对象编组到xml文件中时,错误为“缺少@XmlRootElement注释”...
- idle不是python自带的开发工具_Python的开发工具
- cout不明确什么意思_劈腿什么意思?原来出轨和劈腿不一样!原来如此!
- everything安装版和便携版有什么区别_A2奶粉内幕:国行版和澳洲版有什么区别 贵的不一定好!...
- c++中 int, long long, double 等数据类型的长度及范围整理
- 【渝粤题库】陕西师范大学165107工作分析与设计作业(高起专)
- lr监控虚拟服务器,lr监控服务器 教程
- matlab中rb代表什么意思,你知道“川藏线上”女游客举着“求RB”的牌子是啥意思吗?暗语啊!...