参考 hutool 工具:https://www.hutool.club
使用需要下载 jar 包放入工程下的 lib 中:
https://repo1.maven.org/maven2/cn/hutool/hutool-all/4.6.5/hutool-all-4.6.5.jar
/
具体还可参考 参考文档 或 API文档
一、创建一个servlet,类
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.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.CircleCaptcha;
/**
* @ClassName: CheckCodeServlet
* @Description: 验证码Servlet
* @author: lexiaowu
* @date: 2019年9月12日 下午3:41:03
*/
@WebServlet(urlPatterns = {"/checkCode.do"})
public class CheckCodeServlet extends HttpServlet {
private static final long serialVersionUID = 6757587943622901427L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
CircleCaptcha checkCode = CaptchaUtil.createCircleCaptcha(200, 100);
//编码 随机字符串
System.out.println(checkCode.getCode());
//具体的验证码字符串
String code = checkCode.getCode();
//将产生的验证码存储在session中
req.getSession().setAttribute("checkCode", code);
/**
* 如果使用IO流的形式 ,将图片输出到浏览器
* 浏览器显示什么:图片
*
* 利用 response 获取 与客户端的连接输出流,
* 此时将产生的图片的字节数据,利用response对象,向浏览器进行输出.
* 浏览器,获取到数据后,进行解析.解析成图片
*/
checkCode.write(resp.getOutputStream());
}
}
二、JSP页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login.do" method="get">
<!-- 使用EL表达式 填充 用户名和密码 的值 -->
用户名:<input type="text" name="userName" /><br>
密码:<input type="text" name="password" /><br>
验证码:<input type="text" name="checkCode" /><img id="codeImg" onclick="getCode()" src="checkCode.do" style="width: 100px;height: 40px"><br>
<!-- 使用EL表达式 为标签添加属性 checked -->
<input type="submit" value="提交"/>
</form>
<script type="text/javascript">
function getCode(){
//注意:当url地址,一样时,浏览器默认不会重复请求,所以使用随机数的策略,修改URL地址,让浏览器不走缓存,发送新的请求
document.getElementById("codeImg").src = "checkCode.do?"+Math.random();
}
</script>
</body>
</html>