字母数字验证码
- 采用的是IDEA这个编程软件,具体环境配置请百度。话不多说,直接上图
![总体布局](https://i-blog.csdnimg.cn/blog_migrate/7d24c7d9945a3b48a6e499ca9f471c7c.png)
- CaptchCode类的具体代码
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.awt.peer.CanvasPeer;
import java.util.Random;
public class CaptchCode {
/**
* 验证生成的方法
*/
public static String drawImage(HttpServletResponse response){
//1.定义字符串拼接的StringBuilder
StringBuilder builder=new StringBuilder();
//准备产生4个字符串的随机数
for (int i = 0; i <4; i++) {
builder.append(randomChar());
}
String code=builder.toString();
//2:定义图片的宽度和高度
int width = 120;
int height = 25;
//简历bufferedImage对象,制定图片的长度和宽度以及色彩
BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
//3:获取到 Graphics2D 绘制对象,开始绘制验证码
Graphics2D g = bi.createGraphics();
//4:设置文字的字体和大小
Font font = new Font("微软雅黑",Font.PLAIN,20);
//设置字体的颜色
Color color = new Color(0,0,0);
//设置字体
g.setFont(font);
//设置颜色
g.setColor(color);
//设置背景
g.setBackground(new Color(226,226,240));
//开始绘制对象
g.clearRect(0,0,width,height);
//绘制形状,获取矩形对象
FontRenderContext context = g.getFontRenderContext();
Rectangle2D bounds = font.getStringBounds(code,context);
//计算文件的坐标和间距
double x = (width - bounds.getWidth())/2;
double y = (height - bounds.getHeight())/2;
double ascent = bounds.getY();
double baseY = y - ascent;
g.drawString(code,(int)x,(int)baseY);
//结束绘制
g.dispose();
try {
ImageIO.write(bi,"jpg",response.getOutputStream());
//刷新响应流
response.flushBuffer();
}catch(Exception ex){
ex.printStackTrace();
}
return code;
}
/**
* 用于用户产生随机数字母和数字
*/
private static char randomChar(){
//1:定义验证需要的字母和数字
String string = "QWERTYUIOPASDFGHJKLZXCVBNM0123456789";
//2:定义随机对象
Random random = new Random();
return string.charAt(random.nextInt(string.length()));
}
public static void main(String[] args) {
CaptchCode.drawImage(null);
}
}
- code.jsp的具体代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
//1.清空浏览器缓存
response.setHeader("pragma","no-cache");
response.setHeader("cache-control","no-cache");
response.setHeader("expires","0");
//调用编写的生成验证码工具
String code= CaptchCode.drawImage(response);
session.setAttribute("code",code);
//3.解决getoutputstream异常问题
out.clear();
out=pageContext.pushBody();
%>
- index.jsp的具体代码
<html>
<head>
<title>验证码</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<img src="code.jsp" alt="" id="code">
<a href="javascript:void(0);" onclick="changeCode()">看不清?点我</a>
<script>
function changeCode() {
document.getElementById("code").src="code.jsp?d="+new Date().getTime();
}
</script>
</body>
</html>
- 其中,lib下的servlet-api.jar包在你自己tomc安装目录下的lib文件中,仔细找找就有了
- 最后运行服务器就搞定啦,每次刷新就有不同的字母和数字结合验证码生成,具体结果如下:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/bc640ce8a27ddaaccbd242e23a8f47cd.png)