servlet随机验证码

本文介绍了一个使用Java Servlet生成随机背景颜色及数字验证码图片的方法。通过定义ImageServlet类并覆盖service方法,设置响应类型为image/jpeg,创建指定尺寸的BufferedImage对象,使用Graphics对象绘制带有随机颜色背景和黑色随机数字的图片,并通过JPEGImageEncoder进行编码输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class ImageServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg"); BufferedImage image = getImage(60, 20, BufferedImage.TYPE_INT_BGR); image(image); JPEGImageEncoder encoder = encoder(response.getOutputStream()); encoder.encode(image); } private BufferedImage getImage(int... is) { return new BufferedImage(is[0], is[1], is[2]); } private JPEGImageEncoder encoder(OutputStream stream) { return JPEGCodec.createJPEGEncoder(stream); } private void image(BufferedImage image) { Graphics graphics = image.getGraphics(); Random r = new Random(); graphics.setColor(new Color(r.nextInt(255), r.nextInt(255), r .nextInt(255))); graphics.fillRect(0, 0, 60, 20); graphics.setColor(new Color(0, 0, 0)); String number = String.valueOf(r.nextInt(99999)); graphics.drawString(number, 5, 15); } }
<?xml version="1.0" encoding="GB18030"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>ImageServlet</servlet-name> <servlet-class>ImageServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ImageServlet</servlet-name> <url-pattern>/image</url-pattern> </servlet-mapping> </web-app>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值