奇怪的问题?拿分啦

zhouzongxi 2008-07-10 11:11:35
我用自定义标签写了个类作为验证码,这几天都写的很顺利
今天又自己练习一遍出现一个异常:
严重: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:599)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:195)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:124)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:117)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:182)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:115)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
at org.apache.jsp.code_jsp._jspService(code_jsp.java:70)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.zzx.filters.ChineseFilter.doFilter(ChineseFilter.java:29)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
2008-7-10 15:06:58 org.apache.catalina.startup.HostConfig checkResources

拿着这段代码去别的机器上好好的 有谁知道怎么回事么?
我的做验证码的代码:
package com.zzx.tags;

import java.awt.BufferCapabilities;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class ValidateTag extends BodyTagSupport {

@Override
public int doAfterBody() throws JspException {
// TODO Auto-generated method stub
return super.doAfterBody();
}

@Override
public int doEndTag() throws JspException {
// TODO Auto-generated method stub
ServletResponse response = (ServletResponse) pageContext.getResponse();
response.setContentType("image/jpeg");
BufferedImage img = new BufferedImage(60, 20, 1);
Graphics g = img.getGraphics();
g.setColor(Color.blue);
g.fillRect(0, 0, 60, 20);
g.setFont(new Font("宋体", 1, 20));
g.setColor(Color.cyan);
char x[] = this.getChars();
pageContext.getSession().setAttribute("code", new String(x));
g.drawString("" + x[0], 12, 16);
g.drawString("" + x[1], 24, 18);
g.drawString("" + x[2], 36, 15);
g.drawString("" + x[3], 48, 18);

try {
ImageIO.write(img, "JPEG", response.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return super.EVAL_PAGE;
}

@Override
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
return super.doStartTag();
}

// 生成四个随机验证码的方法
public char[] getChars() {
String str = "abcdefghijkmnpqrstuvwxy123456789ABCDEFGHJKLMNPQRSTUVWXY";
char[] x = new char[4];
for (int i = 0; i < x.length; i++) {
x[i] = str.charAt(new Random().nextInt(str.length()));
}
return x;
}

}

知道的请教怎么解决 网上搜了方法 但是...
先谢谢了!!
...全文
73 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouzongxi 2008-07-11
  • 打赏
  • 举报
回复
具体怎么清空呢。验证码的源代码我也有 只是做了几遍 前面还好 后面无故出现问题 不解。
给我个页面缓存的代码
谢谢
heting1024 2008-07-11
  • 打赏
  • 举报
回复
页面缓存的问题,在随即生成图片的类里面,把你的流清空下就好了,另外我空间有验证码的源码下载
yztommyhc 2008-07-10
  • 打赏
  • 举报
回复
这个问题我也遇到过,也没能解决。但是好像不影响程序正常功能的吧。

我是在做文件下载的时候出现的这个异常,不影响正常的使用。

期待解决问题的方法!

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧