锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. 验证码功能在前端的直接应用2.0

验证码功能在前端的直接应用2.0

0
  • 软件开发
  • 发布于 2024-09-26
  • 0 次阅读
黄健
黄健

成果图:


要完成这个验证码功能需要有导入一个jar包,

;

我们要新建一个后端类用来验证码的生成:

package fangwuzulin.yewu;

import cn.dsna.util.images.*;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/code")
public class code extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建了一个 ValidateCode 实例,传入四个参数:
        //第一个参数是验证码图像的宽度(500 像素)。
        //第二个参数是验证码图像的高度(200 像素)。
        //第三个参数是验证码字符的数量(4 个字符)。
        //第四个参数是干扰线的数量(100 条线)。
        ValidateCode validateCode = new ValidateCode(500,200,4,100);
        //拿到生成的验证码值
        String code = validateCode.getCode();
//将生成的验证码字符串存储到 session 中,键为 "code"
// 这样可以在后续的请求中验证用户输入的验证码是否正确
        HttpSession sessions = req.getSession();
        sessions.setAttribute("code",code);
        //将生成的验证码图像写入到响应的输出流中。
        // 验证码图像会被发送给客户端显示。
        validateCode.write(resp.getOutputStream());
    }
}

现在后端就生成了验证码的图片和数据,现在我们要把验证码放到前端显示:

这是前端的主体:

<body>
<div>
    <h1>欢迎登录</h1>
    <form action="denglu" method="get">
        <label for="user">账号:</label>
        <input type="text" id="user" name="user" required>
        <label for="pwd">密码:</label>
        <input type="password" id="pwd" name="pwd" required>
        <img src="code" alt="加载失败" width="100" onclick="this.src=this.src+'?'+Math.random()">
        <input type="text" ID="yz" name="yz">
        <button type="button" onclick="denglu()">登录</button>
        <button type="button" >注册</button>
    </form>
</div>
</body>

关于验证码最重要的就是这一行:

 <img src="code" alt="加载失败" width="100" onclick="this.src=this.src+'?'+Math.random()">
  • <img>: 这是 HTML 中的图像标签,用于在网页上展示图片。
  • src="code": src 属性指定了图像的源文件位置。在这里,"code" 可能是指向服务器端的一个脚本(例如 PHP 或者 Java Servlet),该脚本负责生成验证码图片并返回给客户端。通常情况下,这会是一个动态生成的图片。
  • alt="验证码加载失败": alt 属性提供了当图像无法显示时的一个替代文本。这里设置为 “验证码加载失败”,意味着当验证码图像无法加载时,浏览器会显示这句话。
  • width="100": width 属性指定了图像的宽度,这里是 100 像素。
  • onclick="this.src=this.src+'?'+Math.random()": onclick 属性定义了当用户点击该图像时触发的 JavaScript 代码。这段代码的作用是在点击图像时更新图像的 src 属性,从而刷新验证码。
  • this.src = this.src + '?' + Math.random();: 更新 src 属性,使其包含原来的 URL 加上随机数,这样就会请求一个新的验证码图像。

这样我们的验证码就显示在前端页面了,最后我们再加上比对的逻辑让验证码在正确时进入正确的页面,在错误时弹框告知。

在js中:

    const yzInput = document.getElementById('yz');

通过这个方式拿到验证框里用户输入的值,

const user = {
                user: name,
                pwd: pwd,
                yz:yz
            };

将值放入对象里,再用post方式传到后端:

//将对象JSON序列化
let s = JSON.stringify(user);
            //配置向后端请求类型 get post 异步请求数据 传递数据
            xmlHttpRequest.open("post", "/ajax_war_exploded/denglu" , true);
            xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded")

//将值传回后端
 let xmlHttpRequest = new XMLHttpRequest();
    xmlHttpRequest.send(s);

这样我们就将验证码的值传回了后端,我们只要在后端将验证码比对就能知道是否正确。

原文链接: https://blog.csdn.net/daibadetianshi/article/details/141090124

标签: #前端 145
相关文章

万字:支付“核心系统”详解 2024-11-02 15:33

专栏作者:隐墨星辰 \| 主编:陈天宇宙 这篇文章也尝试化繁为简,探寻支付系统的本质,讲清楚在线支付系统最核心的一些概念和设计理念。 虽然支付行业已经过了风头最劲的时光,但跨境支付仍然在蓬勃发展,每年依然有很多新人进入这个行业,这篇文章尝试为这些刚入行的新人提供一点帮助。 文章只介绍一些支付行业十几

资深支付架构师视角:实战从问题定义到代码落地的完整套路 2024-11-02 15:33

前言 今天从一个实际案例入手,介绍站在架构师的角度,如何识别并定义问题,提炼需求,技术方案选型,再到详细设计,最后利用AI的能力协助写出核心的代码,验证与调优。 解决问题存在一定的模式,也可以称之为框架,总结出自己的思考和解题框架,以后再碰到同类型的问题就可以如庖丁解牛一样容易。 很多年前,我写代码

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

设计模式第16讲——迭代器模式(Iterator) 2024-10-08 11:24

一、什么是迭代器模式 迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。 二、角色组成 抽象迭代器(Iterator):定义了遍历聚合对象所需的方法

vue2路由和vue3路由区别及原理 2024-10-08 11:24

一、Vue2 与 Vue3 路由的区别 1. 创建路由实例方式的不同 Vue 2 中,通过 Vue.use() 注册路由插件,并通过 new VueRouter() 来创建路由实例。 import Vue from 'vue';import VueRouter from 'vue-router';i

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.