再用jsp进行图片的生成的时候,例如一些验证码,比例图的时候,在对图片进行输出调用 getOutputStream() 的时候会报该方法已经被调用的冲突。

例如如下的程序:

<%@ page contentType="image/jpeg" language="java"%>
<%@ page import="java.awt.image.*,javax.imageio.*,java.io.*,java.awt.*" %>
<%
 BufferedImage image=new BufferedImage(340,160,BufferedImage.TYPE_INT_RGB);
 Graphics g=image.getGraphics();
 g.fillRect(0, 0, 400, 400);
 g.setColor(new Color(255,0,0));
 g.fillArc(20, 20, 100, 100, 30, 120);
 g.setColor(new Color(0,255,0));
 g.fillArc(20, 20, 100, 100, 150, 120);
 g.setColor(new Color(0,0,255));
 g.fillArc(20, 20, 100, 100, 270, 120);
 g.setColor(new Color(0,0,0));
 g.setFont(new Font("Arial Black",Font.PLAIN,16));
 g.drawString("red:climb", 200, 60);
 g.drawString("green:swim", 200, 100);
 g.drawString("blue:jump", 200, 140);
 g.dispose();
 ImageIO.write(image, "jpg", response.getOutputStream());
%>

运行以后的结果是:

十二月 02, 2014 9:58:53 上午 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
十二月 02, 2014 9:58:53 上午 org.apache.catalina.startup.Catalina start
INFO: Server startup in 581 ms
十二月 02, 2014 9:59:00 上午 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jsp] in context with path [/testt1] threw exception [java.lang.IllegalStateException: getOutputStream() has already been called for this response] with root cause
java.lang.IllegalStateException: getOutputStream() has already been called for this response
    at org.apache.catalina.connector.Response.getWriter(Response.java:638)
    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:214)
    at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
    at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:190)
    at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:126)
    at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:80)
    at org.apache.jsp.img_jsp._jspService(img_jsp.java:95)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

出现这种情况的原因是因为在产生web容器的时候servlet代码中已经调用了out.write()的方法,所以我们在jsp页面上进行调用的时候系统会提示已经调用过了的重复请求的冲突。

解决的方法有以下的几个:

第一种直接在调用getOutputStream()之前对out方法进行清空,即调用out.clear()方法。

同时注意不要在%><%之间写内容包括空格和换行符

第二种是对于outputstream方法进行刷新即outputStream output=response.getOutputStream();
output.flush();

jsp中调用getOutputStream()产生冲突的更多相关文章

  1. 在Jsp中调用静态资源,路径配置问题,jsp获取路径的一些方法

    在Jsp中调用图片.JS脚本等,针对取得的路径有两种调用方式: 1.放入Body中生成绝对路径(不建议) <%@ page language="java" import=&q ...

  2. 在Jsp中调用静态资源,路径配置问题

    在Jsp中调用图片.JS脚本等,针对取得的路径有两种调用方式: 1.放入Body中生成绝对路径(不建议) <%@ page language="java" import=&q ...

  3. 在JSP中使用jQuery的冲突解决(收集整理)

    在JSP中使用<jsp:include page="somethingPage.jsp"></jsp>来嵌套页面的时候,会出现jQuery之间的冲突 解决办 ...

  4. JSP中调用Spring的方法

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. jsp中的out对象 和 servlet中的response.getOutputStream()

    web容器生成的servlet代码中有out.write(””),这个和JSP中调用的response.getOutputStream()产生冲突. 即Servlet规范说明,不能既调用 respon ...

  6. jsp实现文件下载,out = pageContext.pushBody();out.close();不用写到jsp中

    测试jsp: <%@ page contentType="text/html; charset=gbk" %> <% try{ com.enfo.intrust. ...

  7. JSP中setattribute与setParameter的区别

    HttpServletRequest类既有getAttribute()方法,也由getParameter()方法,这两个方法有以下区别: (1)HttpServletRequest类有setAttri ...

  8. JSP中getParameter和getAttribute区别

    (1)HttpServletRequest类有setAttribute()方法,而没有setParameter()方法 (2)当两个Web组件之间为链接关系时,被链接的组件通过getParameter ...

  9. JSP中引用CSS样式文件却无法显示的问题解决方案

    你也遇到过这种问题吗,CSS写好了,JSP写好了,在JSP中调用CSS文件,路径检查后也正确,但是无法显示渲染后的页面 原因:罪魁祸首就是过滤器响应数据的时候,响应头设置为了“text/html”,但 ...

随机推荐

  1. 做 fzu oj 1106 题目学到的

    题目如下 这道题的意识就是给一个数问是否可以又阶乘之和构成,而难点主要是在于如果是7的话就是1!+3!,并不是单纯的从1的阶乘开始加,而是没顺序的,所以这题就得用到递归. (大概就是函数自己调用函数自 ...

  2. POJ1384Piggy-Bank(DP)

    POJ1384http://poj.org/problem?id=1384 最简单的完全背包问题,注意下初始化为INF就可以. #include <map> #include <se ...

  3. HDU 5438 Ponds (DFS,并查集)

    题意:给定一个图,然后让你把边数为1的结点删除,然后求连通块结点数为奇的权值和. 析:这个题要注意,如果删除一些结点后,又形成了新的边数为1的结点,也应该要删除,这是坑,其他的,先用并查集判一下环,然 ...

  4. 解决Android singleTask模式下PendingIntent不能给onNewIntent传值的Bug

    http://phenix.blogbus.com/logs/220656659.html 博主简直碉堡了, 我用PendingIntent给singleTask的顶层Activity传值一直收不到, ...

  5. C:预编译指令

    预编译 关于编译 参考 关于宏定义 参考 预编译又称为预处理,是做些代码文本的替换工作处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等,就是为编译做的预 ...

  6. SQL语句 & 查询表结构

    [group by] 对结果集进行分组,常与汇总函数一起使用. SELECT column,SUM(column) FROM table GROUP BY column HAVING 通常与 GROU ...

  7. WSO2 ESB

    什么是WSO2 ESB? WSO2 ESB是一个轻量级的易于使用的企业服务资源总线.WSO2 ESB允许系统管理员和SOA架构师,消息路由,虚拟化,中介,转换,日志记录,任务调度,负载平衡,失败了路由 ...

  8. HTML中诡异的空文本

    (从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-03-27) 今天在写代码的时候发现了一个诡异的问题,我的HTML页面代码当中明明没有多余的行,标签书写规范,没有加任何样式( ...

  9. NSNotificationCenter需要注意的几个问题

    NSNotificationCenter是iOS中常用的消息通知机制,不过在使用过程中有几点需要注意的问题. 直接贴Apple 的官方文档吧: A notification center delive ...

  10. centos 没有可用的网络设备

    在重装的时候记得查看网络情况,提示没有可用的网络设备. 系统是64位的,我再创建虚拟机选择客户机操作系统的时候,选择成了 centos .不是centos 64位.改成centos 64位后,就显示了 ...