在jsp向页面输出图片的时候,使用response.getOutputStream()会有这样的异常错误提示信息:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
解决办法:
把所有%>和<%之间的空格、换行都删除掉
【原因】:
因为Application Server在处理编译jsp时对于%>和<%之间的内容通过PrintWriter输出(包括HTML标签,空格,回车等通过浏览器生成的标识符),而在上面的例子又要进行流输出:ServletOutputStream,这样做相当于试图在Servlet中使用两种输出机制,
就会发生:getOutputStream() has already been called for this response的错误
例如:<%int i%>
<%int a%>应该写成:<%int i%><%int a%>这样的
jsp都需要编译成servlet才能运行,本质上就是一个class,可以在%Tomcat Home%/work/Catalina/localhost对应于网站根路径的目录找到这个.java,可以看到里面其实已经用了PrintWriter out = response.getWriter();或者类似的语句,这里面已经调用了一次getOutputStream().所以如果需要获得outputstream,一种方法就是servlet,还有一种就是可以直接引用out这个变量。不过这种做法只是一种投机的方法(万一在jsp编译出来的servlet变量名不是out就麻烦了),所以直接的方法还是servlet。
编写servlet不是很难,只要extends HttpServlet这个类,实现类中未实现的接口,在web.xml中加入url映射就行了。直接用Myeclipse IDE或者JBuilder等IDE实现更简单,只要明白原理就不难。
--转自
该贴由koei123转至本版2015-7-26 22:50:08