验证码使用
验证码生成步骤
- 创建图片缓存对象
BufferedImage
- 画图
- 生成随机数据
- 填充到图片中
- 干扰线
- 将图片展示到前端页面
package com.servlet;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
/**
* @author LiYang
* 验证码生成并展示
*/
@SuppressWarnings("all")
@WebServlet("/CheckCode")
public class CheckCodeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int width = 100;
int height = 50;
resp.setCharacterEncoding("utf-8");
//resp.setContentType("text/html;charset=utf-8");
// 1. 创建一个对象,在内存中代表图片
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 2. 画图
Graphics g = image.getGraphics();
// 2.1 填充
g.setColor(Color.RED);
g.fillRect(0, 0, width, height);
//2.2 画边框
g.setColor(Color.BLACK);
g.drawRect(0, 0, width-1, height-1);
String s = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
//生成随机数据
Random random = new Random();
g.setFont(new Font("黑体",Font.BOLD, 35));
String str = "";
for (int j = 0; j < 4 ; j++) {
int index = random.nextInt(s.length());
str += String.valueOf(s.charAt(index));
g.drawString(String.valueOf(s.charAt(index)), 20* j, 40);
}
//设置干扰线
g.setColor(Color.GREEN);
for(int i = 0; i< 6; i++){
int x1 = random.nextInt(width);
int x2 = random.nextInt(width);
int y1 = random.nextInt(height);
int y2 = random.nextInt(height);
g.drawLine(x1, y1, x2, y2);
}
System.out.println(str);
req.setAttribute("CheckCode",str);
// 图片输出展示
// PrintWriter writer = resp.getWriter();
// writer.write("<form action=\"\" method=\"post\" id=\"form1\">\n" +
// " 请输入验证码:<input type=\"text\" id=\"reset\" name=\"kayValue\" />\n" +
// " <input type=\"submit\" value=\"验证\" />\n" +
// "</form>");
ImageIO.write(image, "jpg", resp.getOutputStream());
}
}