日期:2014-05-18  浏览次数:20701 次

JSP中生成验证码图片,怎么报异常!
java.lang.IllegalStateException:   getOutputStream()   has   already   been   called   for   this   response
at   org.apache.catalina.connector.Response.getWriter(Response.java:604)
at   org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)
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:191)
at   org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:119)
at   org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:78)
at   org.apache.jsp.Jsp.util.validatecode_jsp._jspService(validatecode_jsp.java:78)
at   org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at   javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at   org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
at   org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at   org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at   javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at   prm.filter.EncodingFilter.doFilter(EncodingFilter.java:23)
at   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at   org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at   org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at   org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at   java.lang.Thread.run(Thread.java:595)

以上是报的异常..是那里出了问题啊..
不过图片还是能正常显示!!

------解决方案--------------------
是的,!!!
输出流问题啊!!
````以前我也有过response.getOutputStream();
你把你生成验证码放在那里的,我一般都是放在一个Servlet类中或则放在Action的子类中。
BufferedImage image = new BufferedImage(width - j, height - j,BufferedImage.TYPE_INT_RGB);
ServletOutputStream responseOutputStream = response.getOutputStream();
// 输出生成后的验证码图象到页面
ImageIO.write(image, "JPEG ", responseOutputStream);