JavaWeb JSP+Servlet实现简单普通验证码…纯验证码…
jsp页面—用作视图展示和用户输入验证码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录案例验证码登录</title>
</head>
<body>
<!-- form表单提交验证码信息,去服务器后台对比验证码正确性 -->
<center>
<form action="/work1/ExperimentalServlet" method="post">
验证码:<input type="text" name="checkCode" required="required"><img style="margin-top: 0.6rem" id="checkCode" src="/work1/CheckCodeServlet">
<input type="submit" value="提交">
</form>
</center>
<script>
//script用于点击验证码图像是刷新验证码
document.getElementById("checkCode").onclick=function () {
//利用时间戳达到重复请求
var time = new Date().getTime();
document.getElementById("checkCode").src='/work1/CheckCodeServlet?time='+time;
}
</script>
</body>
</html>
绘制验证码+输出验证码到jsp页面CheckCodeServlet.java
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;
//采用注解配置的方式进行servlet的配置
@WebServlet(name = "CheckCodeServlet", value = "/CheckCodeServlet")
public class CheckCodeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//绘制传统验证码
//可以利用对象BufferedImage,设置宽度与高度,以及图片类型
int width = 120;
int height = 30;
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
//获取画笔对象
Graphics g = image.getGraphics();
//设置画笔颜色,设置填充的方法
g.setColor(Color.pink);
//填充绘制的图片
g.fillRect(0,0,width,height);
//利用Graphics对象和Random对象在图片中随机填写数据
String str = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789";
g.setColor(Color.blue);
Random random = new Random();
String checkCode = "";//用来获取验证码的值
for (int i = 1; i < 5; i++) {
int index = random.nextInt(str.length());
String s = str.charAt(index)+"";
checkCode+=s;
//设置填写的数据以及位置
g.drawString(s,120/5*i,height/2);
}
HttpSession session = request.getSession();
//存放验证码在session里面用来验证验证码的正确性
//session的作用域在服务器期间一直存在且共享
session.setAttribute("checkCode",checkCode);
//随机绘制干扰线
g.setColor(Color.green);
for (int i = 0; i < 10; 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);
}
//通过response的输出流将图像输出到页面
ImageIO.write(image,"jpg",response.getOutputStream());
}
}
ExperimentalServlet.java用来验证验证码是否正确
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "ExperimentalServlet", value = "/ExperimentalServlet")
public class ExperimentalServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//该页面用于验证码验证
//用户输入的验证码
String checkCode1 = request.getParameter("checkCode");
//session存放的验证码
HttpSession session = request.getSession();
String checkCode2 = session.getAttribute("checkCode").toString();
//对比
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
if (checkCode1.equalsIgnoreCase(checkCode2)){
writer.write("<script>alert('验证码正确');location.href='/work1/index.jsp'</script>");
//销毁当前session存放的验证码
session.removeAttribute("checkCode");
}else {
writer.write("<script>alert('验证码错误');location.href='/work1/index.jsp'</script>");
}
}
}
运行情况