发布时间:2024-07-14 11:01
上一篇《Servlet方式实现验证码--Javaweb》使用servlet实现的验证码点击刷新,现在我们要对验证码输入进行判断,是对上一篇博客的补充。
目录
实现验证码输入判断
代码如下
CodeServlrt:
CodeUtil:
code.jsp:
codejy.jsp:
部署web.xml
结果如图:
如果输入正确,页面输出 输入的验证码正确!
如果输入错误,页面输出 输入的验证码错误!
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author Sun
* @version 2021.2
* @date 2022/4/24 18:23
*/
public class CodeServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 设置请求的编码
request.setCharacterEncoding(\"UTF-8\");
// 设置响应的编码
response.setContentType(\"text/html;charset=UTF-8\");
// 获取验证码
String scode = CodeUtil.getCode();
// 将验证码保存到session中,便于以后验证码
request.getSession().setAttribute(\"scode\", scode);
// 发送图片
ImageIO.write(CodeUtil.getCodeImg(scode), \"JPEG\", response.getOutputStream());
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
doPost(req, resp);
}
}
/**
* @author Sun
* @version 2021.2
* @date 2022/4/24 18:25
*/
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;
/**
* 验证码
*
* @author lck100
*/
public class CodeUtil {
// 验证码长度
private static int CODE_LENGTH = 5;
// 单个验证码的宽度
private static int SINGLECODE_WIDTH = 15;
// 单个验证码的高度
private static int SINGLECODE_HEIGHT = 30;
// 单个验证码之间的间隔
private static int SINGLECODE_GAP = 5;
// 验证码图片的宽度
private static int IMG_WIDTH = CODE_LENGTH * (SINGLECODE_WIDTH + SINGLECODE_GAP);
// 验证码图片的长度
private static int IMG_HEIGHT = SINGLECODE_HEIGHT;
/**
* 获取验证码
*
* @return 返回验证码值字符串
*/
public static String getCode() {
String code = \"\";
for (int i = 0; i < CODE_LENGTH; i++) {
code += (new Random()).nextInt(10);
}
return code;
}
/**
* 画一张验证码图片
*
* @return 返回一张验证码图片
*/
public static BufferedImage getCodeImg(String code) {
BufferedImage img = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_BGR);
// 得到图片上的一个画笔
Graphics g = img.getGraphics();
// 设置画笔的颜色,用来做背景色
g.setColor(Color.YELLOW);
// 用画笔填充一个矩形,矩形的左上角坐标,宽和高
g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT);
// 将画笔颜色设置为黑色,用来写字
g.setColor(Color.BLACK);
// 设置字体:微软雅黑、不带格式的、字号
g.setFont(new Font(\"微软雅黑\", Font.PLAIN, SINGLECODE_HEIGHT + 5));
// 输出数字
char c;
for (int i = 0; i < code.toCharArray().length; i++) {
// 取到对应位置的字符
c = code.charAt(i);
// 画出一个字符串:要画的内容,开始的位置,高度
g.drawString(c + \"\", i * (SINGLECODE_WIDTH + SINGLECODE_GAP) + SINGLECODE_GAP / 2, IMG_HEIGHT);
}
// 实例化一个随机数对象
Random random = new Random();
// 干扰因素
for (int i = 0; i < 20; i++) {
int x = random.nextInt(IMG_WIDTH);
int y = random.nextInt(IMG_HEIGHT);
int x2 = random.nextInt(IMG_WIDTH);
int y2 = random.nextInt(IMG_HEIGHT);
// 画干扰线
g.drawLine(x, y, x + x2, y + y2);
}
return img;
}
}
<%--
Created by IntelliJ IDEA.
User: 86130
Date: 2022/4/24
Time: 18:26
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>
验证码
<%--
Created by IntelliJ IDEA.
User: 86130
Date: 2022/4/24
Time: 18:27
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>
验证结果
<%
// 获取后台的验证码
String scode = (String) session.getAttribute(\"scode\");
// 获取前台输入的验证码
String ucode = request.getParameter(\"ucode\");
// 对二者进行比较对比
if (scode.equals(ucode)) { %>
输入的验证码正确!
<% } else { %>
输入的验证码错误!
<% }
%>
code.jsp
CodeServlet
CodeServlet
CodeServlet
/codeServlet