欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java Servlet 实现动态验证码图片示例

程序员文章站 2024-03-05 19:15:07
整理文档,搜刮出一个java servlet 实现动态验证码图片的代码,稍微整理精简一下做下分享。 package com.hacker; import j...

整理文档,搜刮出一个java servlet 实现动态验证码图片的代码,稍微整理精简一下做下分享。

package com.hacker;

import java.awt.color;
import java.awt.font;
import java.awt.graphics2d;
import java.awt.image.bufferedimage;
import java.io.bufferedreader;
import java.io.bytearrayoutputstream;
import java.io.file;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.outputstream;
import java.net.urlencoder;
import java.util.date;
import java.util.locale;
import java.util.random;

import javax.imageio.imageio;
import javax.servlet.servletexception;
import javax.servlet.servletoutputstream;
import javax.servlet.annotation.webservlet;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import javax.servlet.http.httpsession;

import com.bean.student;


public class hackerservlet extends httpservlet {
  
  
   //验证码图片的宽度。
     private int width=60;
     //验证码图片的高度。
     private int height=20;
@override
  protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
   bufferedimage buffimg=new bufferedimage(width,height,
               bufferedimage.type_int_rgb);
           graphics2d g=buffimg.creategraphics();
           
          //创建一个随机数生成器类。
           random random=new random();
          
           g.setcolor(color.white);
           g.fillrect(0,0,width,height);
          
           //创建字体,字体的大小应该根据图片的高度来定。
           font font=new font("times new roman",font.plain,18);
           //设置字体。
          g.setfont(font);
           
           //画边框。
           g.setcolor(color.black);
           g.drawrect(0,0,width-1,height-1);
           
           //随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
           g.setcolor(color.gray);
           for (int i=0;i<160;i++) {
            int x = random.nextint(width);
             int y = random.nextint(height);
            int xl = random.nextint(12);
            int yl = random.nextint(12);
             g.drawline(x,y,x+xl,y+yl);
           }
          
           
          //randomcode用于保存随机产生的验证码,以便用户登录后进行验证。
           stringbuffer randomcode=new stringbuffer();
           int red=0,green=0,blue=0;
           
          //随机产生4位数字的验证码。
          for (int i=0;i<4;i++) {
            //得到随机产生的验证码数字。
            string strrand=string.valueof(random.nextint(10));
            
            //产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
            red=random.nextint(110);
            green=random.nextint(50);
            blue=random.nextint(50);
            
            //用随机产生的颜色将验证码绘制到图像中。
             g.setcolor(new color(red,green,blue));
            g.drawstring(strrand,13*i+6,16);
            
             //将产生的四个随机数组合在一起。
            randomcode.append(strrand);
          }
          //将四位数字的验证码保存到session中。
          httpsession session=req.getsession();
          session.setattribute("randomcode",randomcode.tostring());
          
           //禁止图像缓存。
          resp.setheader("pragma","no-cache");
          resp.setheader("cache-control","no-cache");
          resp.setdateheader("expires", 0);
          
          resp.setcontenttype("img/jpg");
          
           //将图像输出到servlet输出流中。
          servletoutputstream sos=resp.getoutputstream();
          imageio.write(buffimg, "jpg",sos);
          sos.close();
        }
  

  }

java Servlet 实现动态验证码图片示例

当然这还需要改进成平常见到的验证码 形式,还需要努力

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。