java生成验证码
servlet:
package com.tch;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AuthImage extends HttpServlet {
private static final long serialVersionUID = 1L;
private static char[] codeArr = new char[] {'a','b','c','d','e','f','g','h','i',
'j','k','l','m','n','o','p','q','r',
's','t','u','v','w','x','y','z','A',
'B','C','D','E','F','G','H','I','J',
'K','L','M','N','O','P','Q','R','S',
'T','U','V','W','X','Y','Z','0','1',
'2','3','4','5','6','7','8','9'};
private Random random = new Random();
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int length = codeArr.length;
int width = 200;
int height = 100;
//存放生成的字符
String code = "";
//存放最终的字符组成的字符串验证码
String validateCode = "";
//构建BufferedImage对象,用来存储生成的验证码图片(临时存放在内存中)
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//获取BufferedImage的Graphics对象,Graphics起着画笔的作用,用来写验证码及其它内容
Graphics graphics = bufferedImage.getGraphics();
//开始在BufferedImage对象上面涂背景色
graphics.setColor(Color.white);
graphics.fillRect(0, 0, width-1, height-1);
//在BufferedImage对象上面画边框
graphics.setColor(Color.black);
graphics.drawRect(0, 0, width-1, height-1);
//设置要画的字符串的字体
graphics.setFont(new Font("Comic Sans MS",Font.PLAIN,70));
for(int i=0;i<4;i++){
//随机产生字符
code=""+codeArr[random.nextInt(length)];
//随机产生颜色
graphics.setColor(getRandColor());
//将字符写到BufferedImage对象上(Graphics最终是写到对应的BufferedImage对象上面)
graphics.drawString(code, 5+i*50, 70);
//添加到验证码字符串里面
validateCode += code;
}
System.out.println("validateCode : "+validateCode);
//释放画笔占用的资源
graphics.dispose();
//将生成的图片通过response的输出流返回给页面
ImageIO.write(bufferedImage, "JPEG", response.getOutputStream());
}
//产生随机颜色
private Color getRandColor() {
Random random = new Random();
Color color[] = new Color[10];
color[0] = new Color(32, 158, 25);
color[1] = new Color(218, 42, 19);
color[2] = new Color(31, 75, 208);
return new Color(random.nextInt(220), random.nextInt(220), random.nextInt(220));
}
}
web.xml配置servlet:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>authImage</servlet-name> <servlet-class>com.tch.AuthImage</servlet-class> </servlet> <servlet-mapping> <servlet-name>authImage</servlet-name> <url-pattern>/servlet/authImage</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
页面index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>导出表格到PDF实例</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <script type="text/javascript"> var basePath = "<%=basePath %>"; </script> <script type="text/javascript" charset="utf-8"> function refreshCode(obj){ obj.src = 'http://localhost:8080/xxx/servlet/authImage?d='+(new Date().getTime()); } </script> </head> <body id="dt_example"> <a href="###"><img src="http://localhost:8080/xxx/servlet/authImage" width="60" height="25" onclick="refreshCode(this);"></a> </body> </html>
浙公网安备 33010602011771号