(转载)tomcat5下jsp出现getOutputStream() has already been called for this
(来自: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相关推荐
- tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法...
tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 [标 题]:tomcat5下js ...
- Java小项目中WEB-INF下jsp页面如何访问?
Java小项目中WEB-INF下jsp页面如何访问? - 今天又是充满希望的一天 - CSDN博客 关闭 今天又是充满希望的一天 目录视图 摘要视图 订阅 var username = "H ...
- Linux系统下Jsp验证码显示不出来, nginx 返回500 解决方法
Linux系统下Jsp验证码显示不出来, nginx 返回500 解决方法 tomcat日志 localhost.1949-09-15.log 报错信息 1949-09-15 9:13:34 org. ...
- linux是不是在根目录下安装的软件其它用户就可以使用,[转载]Linux下非root用户如何安装软件...
[转载]Linux下非root用户如何安装软件 这是本人遇到的实际问题,之前用到的所有机器,无论是自己的PC还是云服务器,root权限都是妥妥的,但是现在发现实验室的服务器原来自己并没有root权限2 ...
- tomcat 下jsp乱码的原因分析
tomcat 下jsp乱码 我们先看一个例子(包含2个文件一个test.jsp , 和result.jsp): test.jsp <%@ page language="java&quo ...
- 解决前端调用WEB-INF下jsp无法访问的问题
**解决前端调用WEB-INF下jsp无法访问的问题**当我们使用SpringMVC框架开发项目时,可能会遇到在前端页面调用WEB-INF目录下jsp页面的情况.由于访问权限或者说安全问题,我们无法直 ...
- linux下jsp环境的搭建
转自http://gehailong.blog.51cto.com/765312/264162作gehailong 一 .安装JDK #chmod +x jdk-6u13-linux-i586-rpm ...
- jsp mysql 连接池_Tomcat下JSP连接mysql连接池
现在假如项目目录名为: test MYSQL数据库用户名为:root ,数据库密码为:jsp MYSQL建立一个数据库为:jsptest 首先写一个跟开发项目名相同的xml文件:test.xml 程序 ...
- Tomcat下JSP、Servlet和JavaBean环境的配置
一.开发环境配置 第一步:下载j2sdk和tomcat:到sun官方站(http://java.sun.com/)下载j2sdk,注意下载版本,同时最好下载J2SE Documentation,然后 ...
最新文章
- java程序无法连接redis 正常启动但是无法访问
- java饿汉式有啥作用,Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?...
- 超好用的移动端布局自适应大小rem判断js文件及超过一定高度回到顶部按钮代码...
- LaTeX半小时速成究极进化版(修改版)
- Beta 冲刺(1/7)
- git clone 获取指定分支的指定commit版本
- Java面向对象基础接口和抽象的理解
- 【OJ】洛谷函数与结构体题单题解锦集
- 微信潜规则:月薪过万的90后,过年都在看什么?
- 今天看到了和我男朋友不一样的程序员!好帅哦!
- 会场安排问题NYOJ14
- mysql FROM_UNIXTIME 格式化MYSQL时间戳函数
- Java基础知识总结(超详细整理),java从入门到精通pdf
- 3dmax渲染器下载VRay4.1渲染器下载安装教程(支持3dmax2013-2019)
- CTSC2016APIO2016爆零记
- 埃默里大学有计算机专业吗,埃默里大学计算机科学研究生最新专业排名
- java 分词获取词性_jie分词之分词、词性分析、关键词抽取
- 查询宇宙生命的家谱--TaxonKit工具详解
- libreoffice7.0 离线安装
- Java招聘网站源码+页面
热门文章
- gradle 修改java代码_Gradle 插件
- 详解Web API requestAnimationFrame
- spark kafka java api_java实现spark streaming与kafka集成进行流式计算
- linux 优盘分区,怎么在Linux系统下使用NTFS的U盘或者是分区以及移动硬盘-使用工具NTFS-3G...
- mysql怎么用sb文件_初识mysql数据库
- php 分页类 bootstrap,ThinkPHP分页使用bootstrap样式
- DataFrame列转json以及json转DataFrame列
- hive/hadoop文件格式,序列化和反序列化
- FastDFS环境搭建
- Google发布超难问答数据集「自然问题」:30万对问答,BERT都达不到70分