package com;
import javax.imageio.ImageIO;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
@WebServlet(name = "VerifyCodeServlet", urlPatterns = "/code")
public class VerifyCodeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int width = 100;
int height = 30;
String data = "abcdefghijklmncpqrst01234567890";
//设立一个随机函数对象
Random random = new Random();
// BufferedImage是缓冲图像类,这里的意思是创建一个宽为width,高为height,不带透明色的图片对象;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//创建一个可绘制image的几何,坐标变换,颜色管理和文本布局的2D对象,此对象属于Graphics类;
Graphics graphics = image.getGraphics();
//调用graphics的方法在image对象里设置一个指定颜色(当前为灰色);
graphics.setColor(Color.gray);
//绘制image对象中灰色区域的范围,x,y为左上角坐标,width,height为右下角坐标,下行意思为灰色覆盖区域为image对象的左上角到右下角(全覆盖)
graphics.fillRect(0, 0, width, height);
//调用graphics的方法在image对象里设置一个指定颜色(当前为黑色);
graphics.setColor(Color.black);
for (int i = 0; i < 4; i++) {
//取得data字符串里字符的随机位置;
int position = random.nextInt(data.length());
//调用String里的substring(int beginIndex, int endIndex),进行索引位置上的字符,beginIndex为开始位置,endIndex为结束位置(结束位置不包括在索引范围);
String randomStr = data.substring(position, position + 1);
//调用graphics类的方法使用当前颜色(黑色)绘制指定(randomStr)字符串给出的文本,x是字符串到图形左侧边框的距离,y是字符串到图形上边边框的距离
graphics.drawString(randomStr, width / 5 * (i + 1), 15);
}
ImageIO.write(image, "jpg", response.getOutputStream());
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div align="center">
<h2>切换验证码</h2>
<script>
function changeImageCode() {
document.getElementById('btn').isDisabled=true;
document.getElementById('identity').src='code?ts='+new Date().getTime();
}
</script>
<image src="code" id="identity" onload="btn.disable=false;" style="cursor:pointer; vertical-align:middle">
</image>
<input type="button" value="看不清,更换验证码" onclick="changeImageCode()" id="btn" style="vertical-align:middle">
</div>
</body>
</html>
<%--
Created by IntelliJ IDEA.
User: pan
Date: 2021/7/14
Time: 12:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
HelloWorld
</body>
<div class="col-sm-3">
<img src="${pageContext.request.contextPath}/code">
</div>
</body>
</html>