zoukankan      html  css  js  c++  java
  • 案例:Java 简单写一个验证码

    验证码
    1. 本质:图片
    2. 目的:防止恶意表单注册

    import javax.imageio.ImageIO;
    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.*;
    import java.awt.image.BufferedImage;
    import java.io.BufferedInputStream;
    import java.io.IOException;
    import java.util.Random;
    
    /**
     * @author Lucky
     * @Date 2020/6/18 19:32
     */
    @WebServlet("/checkCodeServlet")
    public class CheckCodeServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            int width = 100;
            int height = 50;
    
            // 1.创建一对象,在内存图中(验证码图片对象)
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
            // 2.美化图片
            // 2.1填充背景色
            // 画笔对象
            Graphics g = image.getGraphics();
            // 设置画笔颜色
            g.setColor(Color.PINK);
            // 填充矩形
            g.fillRect(0,0,width,height);
    
            // 2.2画边框
            g.setColor(Color.BLUE);
            g.drawRect(0,0,width-1,height-1);
    
            String str = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz1234567890";
            // 生产随机角标
            Random ran = new Random();
    
            for (int i = 1; i <=4; i++) {
                int index = ran.nextInt(str.length());
                // 获取字符  随机字符
                char ch = str.charAt(index);
                //2.3写验证码
                g.drawString(ch+"",width/5*i,height/2);
            }
            // 2.4画干扰线
            g.setColor(Color.GREEN);
    
            // 随机生成坐标点
            for (int i = 0; i <10; i++) {
                int x1 = ran.nextInt(width);
                int x2 = ran.nextInt(width);
                int y1 = ran.nextInt(width);
                int y2 = ran.nextInt(width);
                g.drawLine(x1,y1,x2,y2);
            }
    
            // 3.将图片输出到页面展示
            ImageIO.write(image,"jpg",response.getOutputStream());
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }
    
    

    点击图片换验证码

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8">
        <title>验证码</title>
        <script>
          /*
          分析:点击超链接或图片,需要换一张
          1.给超链接和图片添加单击事件
          2.重新设置图片的src属性值
           */
          window.onload = function () {
            // 1.获取图片对象
            var img = document.getElementById("checkCode");
            // 2.绑定单击事件
            img.onclick = function () {
              var date = new Date().getTime();
              img.src = "/day15_response/checkCodeServlet?"+date;
            }
          }
        </script>
      </head>
      <body>
          <img id="checkCode" src = "/day15_response/checkCodeServlet" />
        <a id="change" href="">看不清换一张?</a>
      </body>
    </html>
    
    
  • 相关阅读:
    主线程MainThread与渲染线程RenderThread
    杀死进程的几种方式
    Android App的设计架构:MVC,MVP,MVVM与架构经验谈
    动画完全解析(二):补间动画原理及自定义动画
    SublimeText教程
    JqGrid自定义的列
    js 除法 取整
    js日期字符串增加天数的函数
    Oracle中的rownum和rowid
    jQuery判断对象是否是函数
  • 原文地址:https://www.cnblogs.com/anke-z/p/13159553.html
Copyright © 2011-2022 走看看