栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

整理文档,搜刮出一个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();
 }
  

  }


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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/147555.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号