欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > 网站制作教程 >

JSP验证码getOutputStream的处理方法

发表于2019-04-24 13:06| 次阅读| 来源网络整理| 作者session

摘要:JSP验证码getOutputStream的处理方法

JSP验证码getOutputStream的处理方法

  利用JSP生成的验证码会报出同样:getOutputStream()hasalreadybeencalledforthisresponse,其缘由就是输出流的成绩,利用Servlet则处理了此成绩以下是代码:
  
  /*
  *Image.java
  *
  *Createdon2006年7月13日,下午4:43
  */
  
  packagecom.tot.certcode;
  
  importjava.io.*;
  importjava.net.*;
  importjavax.servlet.*;
  importjavax.servlet.http.*;
  importjava.awt.*;
  importjava.awt.image.*;
  importjava.util.*;
  importjavax.imageio.*;
  /**
  *
  *@author
  *@version
  */
  publicclassImageextendsHttpServlet{
  
  /**ProcessesrequestsforbothHTTP<code>GET</code>and<code>POST</code>methods.
  *@paramrequestservletrequest
  *@paramresponseservletresponse
  */
  protectedvoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)
  throwsServletException,IOException{
  response.setContentType("image/jpeg");
  response.setHeader("Pragma","No-cache");
  response.setHeader("Cache-Control","no-cache");
  response.setDateHeader("Expires",0);
  HttpSessionsession=request.getSession();
  //在内存中创建图象
  intwidth=60,height=20;
  BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
  
  //获取图形上下文
  Graphicsg=image.getGraphics();
  
  //生成随机类
  Randomrandom=newRandom();
  
  //设定背风光
  g.setColor(getRandColor(200,250));
  g.fillRect(0,0,width,height);
  
  //设定字体
  g.setFont(newFont("TimesNewRoman",Font.PLAIN,18));
  
  //画边框
  //g.setColor(newColor());
  //g.drawRect(0,0,width-1,height-1);
  
  
  //随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
  g.setColor(getRandColor(160,200));
  for(inti=0;i<155;i++){
  intx=random.nextInt(width);
  inty=random.nextInt(height);
  intxl=random.nextInt(12);
  intyl=random.nextInt(12);
  g.drawLine(x,y,x+xl,y+yl);
  }
  
  //取随机产生的认证码(4位数字)
  StringsRand="";
  for(inti=0;i<4;i++){
  Stringrand=String.valueOf(random.nextInt(10));
  sRand+=rand;
  //将认证码显示到图象中
  g.setColor(newColor(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数进去的色彩相反,能够是由于种子太靠近,所以只能间接生成
  g.drawString(rand,13*i+6,16);
  }
  
  //将认证码存入SESSION
  session.setAttribute("rand",sRand);
  //图象生效
  g.dispose();
  ServletOutputStreamresponseOutputStream=response.getOutputStream();
  //输出图象到页面
  ImageIO.write(image,"JPEG",responseOutputStream);
  
  //以下关闭输入流!
  responseOutputStream.flush();
  responseOutputStream.close();
  }
  ColorgetRandColor(intfc,intbc){//给定范围获得随机色彩
  Randomrandom=newRandom();
  if(fc>255)fc=255;
  if(bc>255)bc=255;
  intr=fc+random.nextInt(bc-fc);
  intg=fc+random.nextInt(bc-fc);
  intb=fc+random.nextInt(bc-fc);
  returnnewColor(r,g,b);
  }
  //<editor-folddefaultstate="collapsed"desc="HttpServletmethods.Clickonthe+signonthelefttoeditthecode.">
  /**HandlestheHTTP<code>GET</code>method.
  *@paramrequestservletrequest
  *@paramresponseservletresponse
  */
  protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
  throwsServletException,IOException{
  processRequest(request,response);
  }
  
  /**HandlestheHTTP<code>POST</code>method.
  *@paramrequestservletrequest
  *@paramresponseservletresponse
  */
  protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
  throwsServletException,IOException{
  processRequest(request,response);
  }
  
  /**Returnsashortdescriptionoftheservlet.
  */
  publicStringgetServletInfo(){
  return"Shortdescription";
  }
  //</editor-fold>
  }