首先使用maven搭建web项目导入一下servlet依赖
<!-- servlet依赖的jar包start -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- servlet依赖的jar包start -->
<!-- jsp依赖jar包start -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<!-- jsp依赖jar包end -->
<!--jstl标签依赖的jar包start -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--jstl标签依赖的jar包end -->
第二步前端页面有点简陋自己用到时改一下根据自己的页面就行了,页面代码
<%--
Created by IntelliJ IDEA.
User: Lenovo
Date: 2020/2/12
Time: 12:39
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<title>使用代码实现kaptcha验证码</title>
<style type="text/css">
.code_a {
color: #0000ff;
font-size: 12px;
text-decoration: none;
cursor: pointer;
}
#imgCode {
cursor: pointer;
}
</style>
<script type="text/javascript">
function changeCode() {
var imgCode = document.getElementById("imgCode");
imgCode.src="codesKaptcha?"+Math.random();
}
</script>
<body>
<form action="vailCodeKaptchas" method="post">
<label>验证码:</label>
<input type="text" id="inputCode" name="inputCode" placeholder="输入验证码,大小写无关"/>
<%--此处src的名称codeImage与web.xml中配置的<url-pattern>/codeImage</url-pattern>名称相同--%>
<img src="codesKaptcha" id="imgCode" align="center" onclick="changeCode()"/>
<a class="code_a" onclick="changeCode()">看不清!切换一张</a><br>
<input type="submit" value="登录">
</form>
<div style="color: #ff0000;">${errMsg}</div>
</body>
</html>
最重要的配置web.xml配置此处小心、
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Archetype Created Web Application</display-name>
<!--生成验证码的使用代码实现kaptcha验证码的servlet-->
<servlet>
<servlet-name>codeKaptchas</servlet-name>
<servlet-class>demo3.servlet.CodeKaptchaServlet</servlet-class>
</servlet>
<!--访问路径src生成验证的图片-->
<servlet-mapping>
<servlet-name>codeKaptchas</servlet-name>
<url-pattern>/codesKaptcha</url-pattern>
</servlet-mapping>
<!--验证使用代码生成kaptcha验证码的servlet-->
<servlet>
<servlet-name>vailCodesKaptchas</servlet-name>
<servlet-class>demo3.servlet.VailCodesKaptchas</servlet-class>
</servlet>
<!--提交使用代码实现kaptcha的访问路径action-->
<servlet-mapping>
<servlet-name>vailCodesKaptchas</servlet-name>
<url-pattern>/vailCodeKaptchas</url-pattern>
</servlet-mapping>
<!--<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>-->
</web-app>
生成验证码的servlet代码
package demo3.servlet;
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import sun.security.krb5.Config;
import sun.security.krb5.KrbException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Properties;
/**
* package_name:demo3.servlet
* Author:徐亚远
* Date:2020/2/12 12:19
* 项目名:code-projects
* Desription:
**/
public class CodeKaptchaServlet 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 {
//设置属性集
Properties pro = new Properties();
//是否有边框
pro.put("Kaptcha.border", "no");
//字体颜色
pro.put("kaptcha.textproducer.font.color", "red");
//图片宽度
pro.put("kaptcha.image.width", "125");
//<!--使用哪些字符生成验证码-->
pro.put("kaptcha.textproducer.char.string", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
//图片高度
pro.put("kaptcha.image.height", "50");
//字体大小
pro.put("kaptcha.textproducer.font.size", "43");
//干扰线的颜色
pro.put("kaptcha.noise.color", "black");
//字符个数
pro.put("kaptcha.textproducer.char.length", "4");
//字体
pro.put("kaptcha.textproducer.font.names", "Arial");
pro.put("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.ShadowGimpy");
com.google.code.kaptcha.util.Config config = new com.google.code.kaptcha.util.Config(pro);
//创建kaptcha对象
DefaultKaptcha kaptcha = new DefaultKaptcha();
kaptcha.setConfig(config);
//生成验证码保存在session中
String kaptchaCode = kaptcha.createText();
req.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, kaptchaCode);
//生成图片
BufferedImage image = kaptcha.createImage(kaptchaCode);
//返回图片
ServletOutputStream sos = resp.getOutputStream();
ImageIO.write(image, "png", sos);
sos.flush();
sos.close();
}
}
验证验证码的servlet代码
package demo3.servlet;
import com.google.code.kaptcha.Constants;
import com.sun.org.apache.bcel.internal.classfile.Code;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* package_name:demo3.servlet
* Author:徐亚远
* Date:2020/2/12 12:41
* 项目名:code-projects
* Desription:
**/
public class VailCodesKaptchas 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 {
//得到数据输入框输入的
String inputCode = req.getParameter("inputCode").toString().toLowerCase();
//得到生成的验证码数据
String vailKaptcha = req.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY).toString().toLowerCase();
if (inputCode.equals(vailKaptcha)){
resp.sendRedirect("success.jsp");
}else {
req.getSession().setAttribute("errMsg","验证码输入错误,请重新输入" );
//返回上一页
resp.sendRedirect("codesKaptchas.jsp");
}
}
}
实现效果如图: