简单验证码生成(基于HTML+Servlet)

叁歲伎倆 2023-10-07 11:14 102阅读 0赞

目录

    • 1.需求介绍
    • 2.代码实现
    • 3.运行结果

1.需求介绍

本文是一个 基于Servlet+HTML实现的简单的验证码生成案例 ,高级的验证码也都是通过基础的验证码实现上改进过来的,此案例可帮助了解生成验证码的原理。

2.代码实现

Servlet代码

  1. package com.servlet;
  2. import javax.imageio.ImageIO;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.awt.*;
  9. import java.awt.image.BufferedImage;
  10. import java.io.IOException;
  11. import java.util.Random;
  12. @WebServlet("/checkCodeServlet")
  13. public class CheckCodeServlet extends HttpServlet {
  14. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  15. int width = 100;
  16. int height = 50;
  17. //1.创建一对象,在内存中图片(验证码图片)
  18. BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
  19. //2.美化图片
  20. //2.1背景色填充
  21. Graphics g = image.getGraphics();//设置画笔对象
  22. g.setColor(Color.YELLOW);//画笔颜色
  23. g.fillRect(0,0,width,height);
  24. //2.2画边框
  25. g.setColor(Color.RED);
  26. g.drawRect(0,0,width-1,height-1);
  27. String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  28. //创建随机数
  29. Random ran = new Random();
  30. for (int i = 1; i <=4 ; i++) {
  31. int index = ran.nextInt(str.length());
  32. //获取字符
  33. char ch = str.charAt(index);//随机字符
  34. //2.3写验证码
  35. g.drawString(ch+"",width/5*i,height/2);
  36. }
  37. //2.4画干扰线
  38. g.setColor(Color.GREEN);
  39. //生成随机坐标点
  40. for (int i = 1; i <=5 ; i++) {
  41. int x1 = ran.nextInt(width);
  42. int x2 = ran.nextInt(width);
  43. int y1 = ran.nextInt(height);
  44. int y2 = ran.nextInt(height);
  45. g.drawLine(x1,y1,x2,y2);
  46. }
  47. //3.将图片输出到页面展示
  48. ImageIO.write(image,"jpg",response.getOutputStream());
  49. }
  50. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  51. this.doPost(request,response);
  52. }
  53. }

HTML代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>验证码</title>
  6. </head>
  7. <script>
  8. window.onload = function () {
  9. //1.获取图片对象
  10. var img = document.getElementById("checkCode");
  11. //2.绑定单击事件
  12. img.onclick = function () {
  13. //加时间戳
  14. var date = new Date().getTime();
  15. img.src = "/day04/checkCodeServlet?"+date;//保证验证码每次访问都会刷新
  16. }
  17. }
  18. </script>
  19. <body>
  20. <img id="checkCode" src="/day04/checkCodeServlet" />
  21. <a id="change" href="">看不清换一张</a>
  22. </body>
  23. </html>

3.运行结果

每次点击图片都会自动切换另一张验证码
在这里插入图片描述

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,102人围观)

还没有评论,来说两句吧...

相关阅读

    相关 验证生成

    视图函数里 > 1,导入图片,画布,画笔,画笔上的字体,定义坐标 > 2,从外部导入字体(字体导入到static静态中) > 3,随机生成验证码,验证码颜色,验证