简单实现Java验证码功能
发布时间 - 2026-01-11 00:58:47 点击率:次今晚看到网上有关验证码的实现的代码,很早就想写一个了,感觉验证码挺有意思的,于是就写了一个,然而后来一直加载不出图片。尝试了很多方法,后来终于解决了,原来是我项目里面的 web.xml中没有部署servlet的映射,web.xml如下图:

运行效果如下:
代码如下:
package model;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
/**
* Created by Petty on 2017/5/4.
*/
public class VCode {
private int w; //图片宽
private int h;//图片高
private Color bgColor = new Color(240,240,240);//背景色
private Random random = new Random();//随机对象
//设置字体范围
private String[] fontNames = {"宋体","华文楷体","黑体","华文新魏","华文隶书","微软雅黑","楷体"};
//设置字体样式范围
private int[] fontstyle = {0,1,2,3};
//设置字号范围
private int[] fontSizes = {24,25,26,27,28};
//设置所有字符串范围
private String codes="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
//无参数构造函数
public VCode(){
}
//带宽和高的构造函数
public VCode(int w,int h){
this.w = w;
this.h = h;
}
//返回一张背景图片
private BufferedImage createImage(){
/**
* 1.创建图片 2.设置背景色
*/
//创建图片
BufferedImage img = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
//设置背景色
Graphics g = img.getGraphics();
g.setColor(bgColor);
g.fillRect(0,0,w,h);
return img;
}
// 随机返回字体颜色
private Color randomColor() {
int r = random.nextInt(256);
int g = random.nextInt(256);
int b = random.nextInt(256);
return new Color(r, g, b);
}
//随机返回字体样式
private Font randomFont(){
//随机生成字体下标,随机从给定的范围内获取一个字体
int index = random.nextInt(fontNames.length);
String name = fontNames[index];
//随机生成字体样式下标,随即从给定的范围内获取一个字体样式
index = random.nextInt(fontstyle.length);
int style = fontstyle[index];
//随机生成字体大小下标,随机从给定的范围内获取一个字体大小
index = random.nextInt(fontSizes.length);
int size = fontSizes[index];
return new Font(name,style,size);
}
//随机返回字体内容
private String randomChar(){
int index = random.nextInt(codes.length());
return codes.charAt(index)+"";
}
//随机返回几条干扰线
private void getLine(BufferedImage img){
//设置干扰线的宽度为1.5倍宽,随机画五条
Graphics2D g =(Graphics2D) img.getGraphics();
g.setColor(Color.BLACK);
g.setStroke(new BasicStroke(1.5f));
for(int i=0;i<5;i++){
int x1 = random.nextInt(w);
int y1 = random.nextInt(h);
int x2 = random.nextInt(w);
int y2 = random.nextInt(h);
g.drawLine(x1,y1,x2,y2);
}
}
//用户调用该方法获取图片
public BufferedImage getImage(){
/**
* 随机生成字符0-9A-Za-z,设置字体,字号,是否粗体,字符颜色,都是随机的
*/
BufferedImage img = createImage();
this.getLine(img);
//获取画笔
Graphics g = img.getGraphics();
//画内容
for(int i=0;i<4;i++){
g.setColor(this.randomColor());//获取随机颜色
g.setFont(this.randomFont());//获取随机字体
g.drawString(this.randomChar(),w/4*i,h-5);//获取字符串随机内容
}
return img;
}
//用户调用该方法保存图片到本地
public void saveImage(BufferedImage img, OutputStream ous){
try {
ImageIO.write(img,"JPEG",ous);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package model;
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 java.awt.image.BufferedImage;
import java.io.IOException;
/**
* Created by Petty on 2017/5/4.
*/
@WebServlet(name = "BServlet")
public class BServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
VCode v = new VCode(70,35);
BufferedImage img = v.getImage();
v.saveImage(img,response.getOutputStream());
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
VCode v = new VCode(70,35 );
BufferedImage img = v.getImage();
v.saveImage(img,response.getOutputStream());
}
}
<%--
Created by IntelliJ IDEA.
User: Petty
Date: 2017/5/4
Time: 22:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>一次性验证码</title>
</head>
<body>
<form action="" method="get">
<table align="center">
<tr>
<td><img id="img" alt="" src="servlet/BServlet" onclick="changeNext()"></td>
</tr>
</table>
</form>
</body>
</html>
<script type="text/javascript">
function changeNext(){
var a=document.getElementById("img");
a.src="servlet/BServlet?a="+new Date().getTime();
}
</script>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Java
# 验证码
# java登录验证码实现代码
# java 图片验证码的实现代码
# Java实现验证码具体代码
# Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例
# Java随机生成手机短信验证码的方法
# java实现验证码类生成中文验证码
# java生成图片验证码示例程序
# Java Web开发之图形验证码的生成与使用方法
# Java实现仿淘宝滑动验证码研究代码详解
# 解析Java实现随机验证码功能的方法详解
# 背景色
# 都是
# 不出
# 微软
# 写了
# 很早
# 几条
# 大家多多
# 如下图
# 宋体
# 五条
# 想写
# 粗体
# 挺有意思
# 加载
# 今晚
# 解决了
# 网上
# 华文新
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么使用Intervention Image库处理图片上传和缩放
智能起名网站制作软件有哪些,制作logo的软件?
详解阿里云nginx服务器多站点的配置
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
独立制作一个网站多少钱,建立网站需要花多少钱?
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
如何快速辨别茅台真假?关键步骤解析
如何快速查询网站的真实建站时间?
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
如何破解联通资金短缺导致的基站建设难题?
如何用景安虚拟主机手机版绑定域名建站?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
怎么用AI帮你为初创公司进行市场定位分析?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何在VPS电脑上快速搭建网站?
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
昵图网官网入口 昵图网素材平台官方入口
Laravel如何创建自定义中间件?(Middleware代码示例)
如何在Windows环境下新建FTP站点并设置权限?
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
如何快速生成ASP一键建站模板并优化安全性?
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
详解Oracle修改字段类型方法总结
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
新三国志曹操传主线渭水交兵攻略
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
详解Android图表 MPAndroidChart折线图
实例解析Array和String方法
网站建设要注意的标准 促进网站用户好感度!
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
浅谈Javascript中的Label语句
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
制作公司内部网站有哪些,内网如何建网站?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】

