A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

1. JS点击切换验证码

需求 : 用户注册时,通用会有验证码。目的就是-防止用户使用程序恶意注册。


那么我们如何点击验证码图片时,切换验证码的内容呢?

1.1        制作验证码图片
验证码图片生成的原理说明:
    用户在注册时,注册页面加载时,需要加载一个图片信息,此时页面的图片以及图片的验证码信息是由后台Servlet生成的。 这样才可以保证验证码是可以动态生成的,也就是刷新一次,Servlet被访问一次,那么图片就会动态生成一次。
    通过页面标签<img src='servlet地址'> 我们可以向服务器Servlet发送请求,由Servlet对象通过HttpServletResponse输出流的形式将验证码图片回应给<img>标签。

1. Servlet生成验证码代码:
Servlet制作验证码图片代码,因此处需要设计到gui相关代码,因此只需要了解下述代码即可,不需要掌握编写。

    public classCheckcodeServlet extends HttpServlet {
   
            private static final long serialVersionUID = 1L;
     
   
            protected void doGet(HttpServletRequest request,HttpServletResponse response)
   
                           throws ServletException, IOException {
   
                    // gui 生成图片
   
                    // 1 高和宽
   
                    int height = 30;
   
                    int width = 60;
   
                    String data ="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
   
                    Random random = new Random();
   
                    // 2 创建一个图片
   
                    BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
   
                    // 3 获得画板
   
                    Graphics g = image.getGraphics();
   
                    // 4 填充一个矩形
   
                    // * 设置颜色
   
                    g.setColor(Color.BLACK);
   
                    g.fillRect(0, 0, width, height);
   
   
                    g.setColor(Color.WHITE);
   
                    g.fillRect(1, 1, width - 2, height - 2);
   
                    // * 设置字体
   
                    g.setFont(new Font("宋体", Font.BOLD | Font.ITALIC, 25));
   
                    // 5 写随机字
   
                    for (int i = 0; i < 4; i++) {
   
                           // 设置颜色--随机数
   
                           g.setColor(new Color(random.nextInt(255),random.nextInt(255), random.nextInt(255)));
   
     
                           // 获得随机字
   
                           int index = random.nextInt(data.length());
   
                           String str = data.substring(index, index + 1);
   
                           // 写入
   
                           g.drawString(str, width / 6 * (i + 1), 20);
   
                    }
   
   
                    // 6 干扰线
   
                    for (int i = 0; i < 3; i++) {
   
                           // 设置颜色--随机数
   
                           g.setColor(new Color(random.nextInt(255),random.nextInt(255), random.nextInt(255)));
   
                           // 随机绘制先
   
                            g.drawLine(random.nextInt(width),random.nextInt(height), random.nextInt(width), random.nextInt(height));
   
                           // 随机点
   
                            g.drawOval(random.nextInt(width),random.nextInt(height), 2, 2);
   
                    }
   
     
   
                    // end 将图片响应给浏览器
   
                    ImageIO.write(image, "jpg",response.getOutputStream());
   
            }
说明: 上述Servlet只需要访问即可生成一个验证码图片,通过浏览器访问,刷新一次浏览器,Servlet被访问一次,图片变化一次。

1. 将上述Servlet在web.xml映射配置。
         <servlet>
           <description></description>
           <display-name>CodeServlet</display-name>
           <servlet-name>CodeServlet</servlet-name>
           <servlet-class>cn.itheima.response.download.CodeServlet</servlet-class>
         </servlet>
         <servlet-mapping>
           <servlet-name>CodeServlet</servlet-name>
           <url-pattern>/codeServlet</url-pattern>
         </servlet-mapping>
      
      
2. 测试: 启动服务器,浏览器直接访问该Servlet地址即可,效果:
http://localhost:8080/发布的应用程序名称/codeServlet

1.2        注册页面添加验证码图片
    当验证码生成之后,我们只需通过标签`<img src='servlet访问地址即可'>` 就可以将验证码图片加载到注册页面html中。
    `实现步骤`:
    1. 编写一个`code.html`页面,编写注册表单`form` ,记得要有验证码哦。
   
    代码如下:
   
    ```html
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
      <script type="text/javascript">
         function change(obj){
                 obj.src='codeServlet?'+new Date().getTime();
         }
      </script>
    </head>
    <body>   
                        输入验证码 <input type="text" name="code">
                  <img alt="验证码制作" src="codeServlet"  style="cursor: pointer;"        >
    </body>
    </html>


1.3        点击图片切换验证码
问题: 当验证码在注册页面生成时,我们如何通过点击验证码图片本身,达到切换验证码的效果呢?
思路: 其实我们只需要通过js操作,当用户在浏览器通过点击图片事件,向我们的Servlet发送一次请求即可。
实现步骤:

     <script type="text/javascript">
         function change(obj){
                 obj.src='codeServlet?'+new Date().getTime();
         }
      </script>
    //  时间戳  浏览器img 标签会每次都发起请求  访问servlet资源

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马