java生成图片验证码

来源:互联网 发布:二级域名 不同端口 编辑:程序博客网 时间:2024/06/14 11:16


1.java工具类的编写,该工具类生成验证码.

package com.isoftstone.util;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.util.Random;/** * 工具类,生成验证码. * @author 浮生若梦 */public class IdentifyingUtil {/** * 定义数组常量,比较难识别的比如 1,l,o,0,不再其中. */private static final char[] CHAR_ARRAY = "ASDqwertyuipkjhgfdsazxcvbnm23456789".toCharArray();/** * 定义Random对象,因为下面多次 用到,避免内存浪费. */private static Random random = new Random();/** * 生成一张随机验证码图片返回. */public static BufferedImage getIdentifyingImage(String identifying){//1.设置图片的宽度,高度.int width = 100;int height = 30;//2.创建图片对象.BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//3.创建画笔对象,绘图生成图片.Graphics2D gra = image.createGraphics(); //3.1 绘制背景色.Color color = getBackgroundColor();gra.setColor(color);gra.fillRect(0, 0, width, height); //3.2绘制字体颜色,字体大小.Font font = new Font(Font.SANS_SERIF, Font.BOLD, 18);gra.setFont(font);gra.setColor(getForegroundColor(color));gra.drawString(identifying, 22, 22); //3.3绘制噪点.int length = new Random().nextInt(100);for (int i = 0; i < length; i++) {gra.drawRect(random.nextInt(width),random.nextInt(height),1,1);}   return image;}/** * 获取随机数的方法. * @return 随机出来的6位字符串. */public static String getIdentifyingCode(){StringBuffer buffer = new StringBuffer();for (int i = 0; i < 6; i++) {buffer.append(CHAR_ARRAY[random.nextInt(CHAR_ARRAY.length)]);}return buffer.toString();}/** * 生产随机颜色,做背景色用. * @return 背景色. */public static Color getBackgroundColor(){return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));}/** * 生成背景色的反色,防止背景和字体颜色一致. * @param 背景颜色. * @return 字体颜色. */public static Color getForegroundColor(Color color){return new Color(255-color.getRed(), 255-color.getGreen(), 255-color.getBlue());}}

2.servlet的编写,设置响应格式,将验证码图片输出到前端页面.

package com.isoftstone.servlet;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.OutputStream;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.isoftstone.util.IdentifyingUtil;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class IdentifyingServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.设置相应类型.resp.setContentType("image/jpeg");//2.获取输出流.OutputStream out = resp.getOutputStream();//3.获取生成的字符串保存在session中,和用户输入的作比较,此处省略.String identify = IdentifyingUtil.getIdentifyingCode();BufferedImage image = IdentifyingUtil.getIdentifyingImage(identify);//4.在前端页面显示的方式一.    //ImageIO.write(image, "JPEG", out);//在前端页面显示的方式二.JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(image);out.flush();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}}

3.web.xml的配置,访问servlet的路径.

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">  <!-- servlet的配置 -->  <servlet>  <servlet-name>identifying</servlet-name>  <servlet-class>com.isoftstone.servlet.IdentifyingServlet</servlet-class>  </servlet>  <servlet-mapping>  <servlet-name>identifying</servlet-name>  <url-pattern>/identifying</url-pattern>  </servlet-mapping></web-app>
4.jsp的编写,展示验证码,通过参数的每次都不同来进行图片验证码的刷新效果.

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><script type="text/javascript">function  changeImg() {document.getElementById("ident").src="identifying?ts="+new Date().getTime();}</script><img  id="ident" src="identifying"><button value="" onclick="changeImg()">看不清换一张</button></body></html>
5.测试结果.








0 0
原创粉丝点击