欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  JAVA基础之设置随机成语验证码
 
  packagecom.oracle;
 
  importjava.awt.Color;
 
  importjava.awt.Font;
 
  importjava.awt.Graphics;
 
  importjava.awt.Graphics2D;
 
  importjava.awt.image.BufferedImage;
 
  importjava.io.BufferedReader;
 
  importjava.io.FileReader;
 
  importjava.io.IOException;
 
  importjava.util.ArrayList;
 
  importjava.util.List;
 
  importjava.util.Random;
 
  importjavax.imageio.ImageIO;
 
  importjavax.servlet.ServletException;
 
  importjavax.servlet.http.HttpServlet;
 
  importjavax.servlet.http.HttpServletRequest;
 
  importjavax.servlet.http.HttpServletResponse;
 
  /**
 
  *验证码生成程序
 
  *
 
  *
 
  *
 
  */
 
  publicclassCheckImgServletextendsHttpServlet{
 
  //集合中保存所有成语
 
  privateList<String>words=newArrayList<String>();
 
  @Override
 
  publicvoidinit()throwsServletException{
 
  //初始化阶段,读取new_words.txt
 
  //web工程中读取文件,必须使用绝对磁盘路径
 
  Stringpath=getServletContext().getRealPath("/WEB-INF/new_words.txt");
 
  try{
 
  BufferedReaderreader=newBufferedReader(newFileReader(path));
 
  Stringline;
 
  while((line=reader.readLine())!=null){
 
  words.add(line);
 
  }
 
  reader.close();
 
  }catch(IOExceptione){
 
  e.printStackTrace();
 
  }
 
  }
 
  publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
 
  throwsServletException,IOException{
 
  //禁止缓存
 
  //response.setHeader("Cache-Control","no-cache");
 
  //response.setHeader("Pragma","no-cache");
 
  //response.setDateHeader("Expires",-1);
 
  intwidth=120;
 
  intheight=30;
 
  //步骤一绘制一张内存中图片
 
  BufferedImagebufferedImage=newBufferedImage(width,height,
 
  BufferedImage.TYPE_INT_RGB);
 
  //步骤二图片绘制背景颜色---通过绘图对象
 
  Graphicsgraphics=bufferedImage.getGraphics();//得到画图对象---画笔
 
  //绘制任何图形之前都必须指定一个颜色
 
  graphics.setColor(getRandColor(200,250));
 
  graphics.fillRect(0,0,width,height);
 
  //步骤三绘制边框
 
  graphics.setColor(Color.WHITE);
 
  graphics.drawRect(0,0,width-1,height-1);
 
  //步骤四四个随机数字
 
  Graphics2Dgraphics2d=(Graphics2D)graphics;
 
  //设置输出字体
 
  graphics2d.setFont(newFont("宋体",Font.BOLD,18));
 
  Randomrandom=newRandom();//生成随机数
 
  intindex=random.nextInt(words.size());
 
  Stringword=words.get(index);//获得成语
 
  //定义x坐标
 
  intx=10;
 
  for(inti=0;i<word.length();i++){
 
  //随机颜色
 
  graphics2d.setColor(newColor(20+random.nextInt(110),20+random
 
  .nextInt(110),20+random.nextInt(110)));
 
  //旋转-30---30度
 
  intjiaodu=random.nextInt(60)-30;
 
  //换算弧度
 
  doubletheta=jiaodu*Math.PI/180;
 
  //获得字母数字
 
  charc=word.charAt(i);
 
  //将c输出到图片
 
  graphics2d.rotate(theta,x,20);
 
  graphics2d.drawString(String.valueOf(c),x,20);
 
  graphics2d.rotate(-theta,x,20);
 
  x+=30;
 
  }
 
  //将验证码内容保存session
 
  request.getSession().setAttribute("checkcode_session",word);
 
  //步骤五绘制干扰线
 
  graphics.setColor(getRandColor(160,200));
 
  intx1;
 
  intx2;
 
  inty1;
 
  inty2;
 
  for(inti=0;i<30;i++){
 
  x1=random.nextInt(width);
 
  x2=random.nextInt(12);
 
  y1=random.nextInt(height);
 
  y2=random.nextInt(12);
 
  graphics.drawLine(x1,y1,x1+x2,x2+y2);
 
  }
 
  //将上面图片输出到浏览器ImageIO
 
  graphics.dispose();//释放资源
 
  //将图片写到response.getOutputStream()中
 
  ImageIO.write(bufferedImage,"jpg",response.getOutputStream());
 
  }
 
  publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
 
  throwsServletException,IOException{
 
  doGet(request,response);
 
  }
 
  /**
 
  *取其某一范围的color
 
  *
 
  *@paramfc
 
  *int范围参数1
 
  *@parambc
 
  *int范围参数2
 
  *@returnColor
 
  */
 
  privateColorgetRandColor(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);
 
  }
 
  }
 
  <%@pagelanguage="java"contentType="text/html;charset=UTF-8"
 
  pageEncoding="UTF-8"%>
 
  <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
 
  <html>
 
  <head>
 
  <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
 
  <title>Inserttitlehere</title>
 
  <scripttype="text/javascript">
 
  functioncode(node){
 
  node.src="/WEB0/CheckImgServlet?time="+newDate().getTime();
 
  }
 
  </script>
 
  </head>
 
  <body>
 
  <imgsrc="/WEB0/CheckImgServlet"onclick="code(this)"><br>
 
  请输入验证码:<inputtype="text"name="pwd">
 
  </body>
 
  </html>

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h56893.shtml