在Tomcat容器中,创建Servlet程序,实现5位随机验证码,验证码包含数字和字母,背景为灰色,字体为斜体。

时间:2023-05-26 19:07:19 浏览:41
以下是一个实现此功能的Servlet程序示例: ``` import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class VerifyCodeServlet extends HttpServlet { // 验证码图片的宽度和高度 private static final int WIDTH = 100; private static final int HEIGHT = 30; // 随机种子,用于生成验证码字符串 private static final String SEEDS = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 在内存中创建一张验证码图片 BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); // 设置背景色 g.setColor(Color.GRAY); g.fillRect(0, 0, WIDTH, HEIGHT); // 生成随机字符串 Random random = new Random(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 5; i++) { sb.append(SEEDS.charAt(random.nextInt(SEEDS.length()))); } // 将随机字符串作为验证码存入Session中 request.getSession().setAttribute("verifyCode", sb.toString()); // 绘制字符串 g.setColor(Color.BLACK); g.setFont(new Font("Italic", Font.BOLD, 20)); for (int i = 0; i < 5; i++) { g.drawString(String.valueOf(sb.charAt(i)), 20 + i * 20, 20); } // 发送验证码图片到浏览器 response.setContentType("image/jpeg"); ImageIO.write(image, "jpeg", response.getOutputStream()); } } ``` 在这个Servlet程序中,我们首先创建了一个内存中的图片,然后绘制了一个灰色的背景。接着,我们通过生成随机数来生成5位随机字符串,并将其作为验证码存入Session中。最后,我们将字符串绘制到验证码图片上,并将图片发送到浏览器中。 这样,每当用户访问此Servlet时,都会生成一个新的验证码,并将其存入Session中。当用户提交表单时,我们只需要将用户输入的验证码和Session中存储的验证码进行比较即可。如果相同,则说明验证码正确。

最新推荐

基于SSM的校园帮平台(源码+数据库).zip

毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。毕业设计项目,内含源码及数据库文件,亲测可以用。

安徽省市县乡四级界线shp文件,2000,117E

安徽省市县乡四级界线shp文件,2000,117E

家政服务微信小程序.zip

源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经

virtualbox教程(中文)

virtualbox教程 virtualbox中文教程 virtualboxvirtualbox教程 virtualbox中文教程 virtualboxvirtualbox教程 virtualbox中文教程 virtualbox

electron中download-progress如何监听

您好!关于您的问题,可以通过electron的webContents模块来监听下载进度。 具体的代码实现可以参考以下示例: ```javascript const { session } = require("electron") const { webContents } = require('electron') // 注册监听器 session.defaultSession.on('will-download', (event, item, webContents) => { // 设置下载路径 item.setSavePath('/path/to/save/the/fil

微信小程序调用摄像头隐藏式拍照功能

主要介绍了微信小程序调用摄像头隐藏式拍照功能,本文给大家带来了解决方法、官网代码和小编写的比较完整代码,需要的朋友可以参考下

如何用过gensim判断两句话含义相近

感谢提问。我会尽力回答你的问题。关于gensim如何判断两句话含义相近,你可以使用gensim中的Word2Vec模型。首先将待比较句子进行分词处理,然后将分词结果作为Word2Vec模型的输入,得到每个单词对应的词向量。接着将两句话的词向量求平均值,得到两个平均向量,再计算这两个平均向量之间的余弦相似度。如果余弦相似度越接近1,则说明两句话的含义越相近。代码示例: ``` from gensim.models import Word2Vec import numpy as np # 加载Word2Vec模型 model = Word2Vec.load('your_word2vec_mod

libevent中文参考手册.pdf

Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;

gbest = poss_sols[i].copy()解释这行代码

这行代码是Python语言中的一行,作用是将一个可变对象poss_sols的第i个元素进行复制(即创建一个新的对象),并将其赋值给变量gbest。具体而言,如果poss_sols[i]是一个列表、字典等可变对象,那么gbest和poss_sols[i]将指向两个地址不同但内容相同的对象。

hx8340b SPEC

hx8340b 初始化 WriteCOM(0x0060); WriteDAT(0x0000); WriteCOM(0x0061); WriteDAT(0x0006); WriteCOM(0x0062); WriteDAT(0x0000); WriteCOM(0x0063); WriteDAT(0x00D9); WriteCOM(0x0073); WriteDAT(0x0070); WriteCOM(0x0040); WriteDAT(0x0000); WriteCOM(0x0041); WriteDAT(0x0040); WriteCOM(0x0042); WriteDAT(0x0045); WriteCOM(0x0043); WriteDAT(0x0001); WriteCOM(0x0044); WriteDAT(0x0060); WriteCOM(0x0045); WriteDAT(0x0005); WriteCOM(0x0046); WriteDAT(0x000C); WriteCOM(0x0047); WriteDAT(0x00D1); WriteCOM(0x0048); WriteDAT(0x0005); WriteCOM(0x0050); WriteDAT(0x0075); WriteCOM(0x0051); WriteDAT(0x0001); WriteCOM(0x0052); WriteDAT(0x0067); WriteCOM(0x0053); WriteDAT(0x0014); WriteCOM(0x0054); WriteDAT(0x00F2); WriteCOM(0x0055); WriteDAT(0x0007); WriteCOM(0x0056); WriteDAT(0x0003); WriteCOM(0x0057); WriteDAT(0x0049); //Power Voltage Setting WriteCOM(0x001F); WriteDAT(0x0003); WriteCOM(0x0020); WriteDAT(0x0001); WriteCOM(0x0024); WriteDAT(0x001C); WriteCOM(0x0025); WriteDAT(0x0034); //****VCOM offset**/// WriteCOM(0x0023); WriteDAT(0x002F); WriteCOM(0x0018); WriteDAT(0x0044); WriteCOM(0x001B); WriteDAT(0x0044); WriteCOM(0x0021); WriteDAT(0x0001); WriteCOM(0x0001); WriteDAT(0x0000); WriteCOM(0x001C); WriteDAT(0x0003); WriteCOM(0x0019); WriteDAT(0x0006); delayms(5); //262k/65k color selection WriteCOM(0x0017); WriteDAT(0x0005); WriteCOM(0x0026); WriteDAT(0x0084); delayms(40); WriteCOM(0x0026); WriteDAT(0x00B8); delayms(40); WriteCOM(0x0026); WriteDAT(0x00BC); //Set GRAM Area WriteCOM(0x0002); WriteDAT(0x0000); WriteCOM(0x0003); WriteDAT(0x0000); //Column Start WriteCOM(0x0004); WriteDAT(0x0000); WriteCOM(0x0005); WriteDAT(0x00AF); //Column End WriteCOM(0x0006); WriteDAT(0x0000); WriteCOM(0x0007); WriteDAT(0x0000); //Row Start WriteCOM(0x0008); WriteDAT(0x0000); WriteCOM(0x0009); WriteDAT(0x00DB); //Row End WriteCOM(0x0022); }