zoukankan      html  css  js  c++  java
  • 假期进度八:验证码的实现

    package servlet;
    
    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.IOException;
    import java.util.Random;
    
    @WebServlet("/checkCodeServlet")
    public class CheckCodeServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            int width=100;
            int height=50;
            //创建一对象,在内存中图片(验证码图片对象)
            BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            //美化图片
            //填充背景色
            Graphics g=image.getGraphics();//画笔对象
            g.setColor(Color.pink);//设置画笔颜色
            g.fillRect(0,0,width,height);
            //画边框
            g.setColor(Color.blue);
            g.drawRect(0,0,width-1,height-1);
    
            String str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
            //生成随机角标
            Random ran=new Random();
            for (int i = 1; i <=4 ; i++) {
                int index = ran.nextInt(str.length());
                //获取字符
                char ch = str.charAt(index);
                //写验证码
                g.drawString(ch+"",width/5*i,height/2);
            }
    
            //画干扰线
            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(height);
                int y2 = ran.nextInt(height);
                g.drawLine(x1,x2,y1,y2);
            }
    
    
            //将图片输出到页面显示
            ImageIO.write(image,"jpg",response.getOutputStream());
        }
    
        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</title>
        <script>
            /**
             * 点击超链接或图片,需要换一张
             * 给超链接和图片绑定单击事件
             * 重新设置图片的src属性值
             */
            window.onload=function () {
                //获取图片对象
                let img = document.getElementById("checkCode");
                //绑定单击事件
                img.onclick=function () {
                    /**
                     * 因为浏览器会有默认缓存,如果路径不变,只会访问缓存,所以加date改变参数,保证每次都不同
                     * @type {number}
                     */
                    //加时间戳
                    let date=new Date().getTime();
                    img.src="/day13_response/checkCodeServlet?"+date;
                }
            }
        </script>
    </head>
    <body>
        <img    id="checkCode" src="/day13_response/checkCodeServlet"/>
    </body>
    </html>
  • 相关阅读:
    HTTP 错误 500.21
    《21天学通C#》给多个变量赋值
    《21天学通C#》变量使用前需要声明和赋值,赋值后可以重新赋新的值
    《21天学通C#》课后习题:编写代码将你的名字打印到控制台
    《21天学通C#》数字前面补0
    《21天学通C#》将写的代码原封不动的在控制台显示
    《21天学通C#》Write和WriteLine的区别
    《21天学通C#生成XML文件
    《21天学通C#》嵌套循环,输出上三角形X。
    Scala之隐式转换implicit详解
  • 原文地址:https://www.cnblogs.com/yeyueweiliang/p/13555560.html
Copyright © 2011-2022 走看看