• 严重: Servlet.service() for servlet jsp threw exception java.lang.IllegalStateException: getOutputStream() has already been called


    错误:

    严重: Servlet.service() for servlet jsp threw exception java.lang.IllegalStateException: getOutputStream() has already been called


    输出验证码的类:

    package com.jxc.util;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
    /**
     * 验证码输出类
     * @author Pan
     *
     */
    public class GraphisVerfCode {
    
    	private HttpServletResponse response;
    	private Point point;
    	private int linesize;
    	private String code="";
    	public GraphisVerfCode(HttpServletResponse response,Point p,int linesize){
    		
    		this.response=response;
    		this.point=p;
    		this.linesize=linesize;
    		code=RandomCode.getRandomString(4);
    	}
    	public String getCode() {
    		return this.code;
    	}
    	public void Draw() throws IOException{
    		//输出类型
    		response.setContentType("image/jpeg");
    		response.setHeader("Pragma", "No-cache");//设置响应头信息,告诉浏览器不要缓存此内容
    		response.setHeader("Cache-Control", "no-cache");
    		//创建对象
    		BufferedImage bImage=new BufferedImage(point.x, point.y,BufferedImage.TYPE_INT_RGB);
    		Graphics2D g=bImage.createGraphics();
    		//前景色
    
    		//填充矩形
    		g.fillRect(0, 0, point.x, point.y);	
    
    		drowString(g);
    		//干扰线
    		drowLine(g,this.linesize);
    		//输出图片
    		 ServletOutputStream out = response.getOutputStream();
             ImageIO.write(bImage, "jpeg", out);
             out.flush();
             out.close();
    	}
    	//干扰线条
    	 private void drowLine(Graphics g,int linesize){
    		 Random random=new Random(System.currentTimeMillis()); 
    	
    		 for (int i = 0; i < linesize; i++) {
    	        int x = random.nextInt(point.x);
    	        int y = random.nextInt(point.y);
    	        int xl = random.nextInt(13);
    	        int yl = random.nextInt(15);
    	        g.setColor(new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)));
    	        g.drawLine(x, y, x+xl, y+yl);
    				 }
    	    }
    	 
    	 private void drowString(Graphics g){
    			g.setFont(new Font("微软雅黑",Font.BOLD,22));
    			Random random=new Random(System.currentTimeMillis());
    			//循环绘制每个字的颜色
    			for(int i=0;i<code.length();i++){
    		        g.setColor(new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)));
    		        g.drawString(code.charAt(i)+"", 20*i, 25);
    			}
    	 }
    }
    


    最开始使用的时候,没有调用   out.flush();这个方法,就一直报错。加上就好了。


  • 相关阅读:
    5个步骤迅速脱离低薪族
    phpdebugapd调试器
    重置zend studio 默认设置的方法
    CMD用什么命令可以删除服务?
    PHP自动识别字符集并完成转码
    一只赖蛤蟆写给白天鹅的情书
    遇到的问题
    Sql 注入漏洞
    分页技术
    flex学习记录——加载图片
  • 原文地址:https://www.cnblogs.com/james1207/p/3297322.html
Copyright © 2020-2023  润新知