Java Servlet实现随机验证码图片生成:附代码与配置全攻略
要实现这个需求,可以按照以下步骤进行: 1. 创建一个Servlet类,继承自javax.servlet.http.HttpServlet。 2. 重写doGet方法,在该方法中实现生成验证码图片的逻辑。 3. 在doGet方法中,使用java.awt和javax.imageio包来创建验证码图片,并将验证码文本保存到session中。 4. 在生成验证码图片时,使用随机算法生成一个包含指定个数字符的字符串,作为验证码文本。 5. 将生成的验证码图片以JPEG格式输出到ServletResponse的输出流中,通过设置Content-Type为"image/jpeg"来告诉浏览器这是一张图片。 6. 在JSP页面或者HTML页面中,使用img标签引用该Servlet的URL,即可显示验证码图片。 以下是一个示例代码: ```java import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; public class CaptchaServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final int WIDTH = 100; private static final int HEIGHT = 30; private static final int CODE_COUNT = 4; private static final int FONT_SIZE = 20; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg"); // 创建验证码图片对象 BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); // 设置颜色 g.setColor(Color.WHITE); g.fillRect(0, , WIDTH, HEIGHT); // 设置边框颜色 g.setColor(Color.BLACK); g.drawRect(0, , WIDTH - 1, HEIGHT - 1); // 设置验证码文本的字体和大小 Font font = new Font(Font.SANS_SERIF, Font.BOLD, FONT_SIZE); g.setFont(font); // 生成随机验证码字符串 String captcha = generateCaptcha(CODE_COUNT); // 将验证码字符串保存到session中 request.getSession().setAttribute("captcha", captcha); // 在图片上绘制验证码 g.setColor(Color.BLACK); g.drawString(captcha, 10, 20); // 绘制干扰线 Random random = new Random(); for (int i = ; i < 5; i++) { g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256))); int x1 = random.nextInt(WIDTH); int y1 = random.nextInt(HEIGHT); int x2 = random.nextInt(WIDTH); int y2 = random.nextInt(HEIGHT); g.drawLine(x1, y1, x2, y2); } // 输出验证码图片 ImageIO.write(image, "JPEG", response.getOutputStream()); } private String generateCaptcha(int length) { String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; StringBuilder captcha = new StringBuilder(); Random random = new Random(); for (int i = ; i < length; i++) { captcha.append(chars.charAt(random.nextInt(chars.length()))); } return captcha.toString(); } } ``` 在web.xml中配置Servlet的映射路径: ```xml <servlet> <servlet-name>CaptchaServlet</servlet-name> <servlet-class>CaptchaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CaptchaServlet</servlet-name> <url-pattern>/captcha.jpg</url-pattern> </servlet-mapping> ``` 使用该验证码Servlet的URL生成图片,示例: ```html <img src="/contextPath/captcha.jpg" alt="Captcha"> ``` 其中的"/contextPath"是你应用程序的上下文路径,具体根据你的部署环境而定。 ######[AI写代码神器 | 3212点数解答 | 2024-04-17 10:59:51]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)419
- 代码填空挑战:完成正态分布、随机数生成及数据处理代码(阿里通义 | 506点数解答 | 2025-03-23 14:32:14)329
- 挑战!完成代码填空解锁数据处理奥秘(字节豆包 | 116点数解答 | 2025-03-26 22:22:15)349
- 挑战填空!完成这段 NumPy 代码实现数据生成与保存(DeepSeek | 178点数解答 | 2025-03-26 22:26:30)410
- "Solving 'javax.servlet.servletexception' in Grails: Troubleshooting the Missing 'login' View"(阿里通义 | 308点数解答 | 2023-12-04 16:56:34)256
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)322
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1195
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)362
- Java实现带验证码功能的用户登录程序:含示例代码与详细步骤( | 1826点数解答 | 2024-04-22 16:44:01)264
- 超详细!含用户名、手机号等要素的游戏账号注册页面代码大揭秘(字节豆包 | 601点数解答 | 2025-03-13 15:26:13)182
- Java应用运行失败:java.lang.NoClassDefFoundError: javax/servlet/ServletException 全方位解决指南(阿里通义 | 325点数解答 | 2024-03-15 10:54:21)278
- Java Servlet:实现 MyFilter 过滤器处理 UTF - 8 编码与跨域访问(讯飞星火 | 805点数解答 | 2024-11-12 14:47:34)288