代码编织梦想

在JSP页面实现验证码校验文章中当时是使用的Servlet类来进行的验证码校验,但是这种方式并不能即时校验,在正常情况下都是直接在用户输入之后就进行校验,这样对用户来说很方便的。

AJAX 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。

ajax 是一种浏览器异步发起请求。局部更新页面的技术。
jQuery ajax详解可参阅:jQuery与Ajax


先看效果:


这个刷新验证的原理在JSP页面实现验证码校验已经解释过了,之前说的是跳转到另一个页面进行验证判断用户输入的验证码是否正确。但是这个Ajax的效果是在前端用户输入之后即时进行验证是否正确,并且将相关提示性信息展示在页面。

这个实现原理是利用的Ajax的方式进行验证的,这个也是需要一个Servlet程序进行校验判断用户输入的验证码和session对象保存的那个验证码是否一致,如果一致就返回一个yes,不一致就返回no ,然后在页面显示这里定义一个Ajax的函数,一方面是是将用户输入的信息提交给Servlet程序,另一方面是对Servlet的返回结果进行判断,如果用户输入的正确,那就显示一个"验证码正确!"的提示信息(提示信息是在id为flagcode的div标签里显示的),反之就提示一个"验证码错误!"的提示信息。

代码示例:
在jsp页面中是需要先引进一个jQuery的库的:

<script src="https://s3.pstatp.com/cdn/expire-1-M/jquery/3.3.1/jquery.min.js"></script>

定义的两个JS函数(负责刷新验证码和负责校验验证码的)

<script type="text/javascript">
        function reloadCode() {
            document.getElementById("imagecode").src="<%= request.getContextPath()%>/imageGenerate?time" + new Date().getTime();
        }
        $(function(){<!-- -->
            $("input[name='Usercode']").change(function(){
                let Usercode = $("input[name='Usercode']").val();
                $.post("<%= request.getContextPath()%>/CodeAjax",{<!-- -->
                    Usercode : Usercode,
                },function(res){
                    if(res=="yes"){
                        $("#flagcode").empty();
                        $("#flagcode").append("验证码正确!");
                    }
                    else{
                        $("#flagcode").empty();
                        $("#flagcode").append("验证码错误!");
                    }
                })
            })
        })
</script>

页面表单:

<form action="#"method="post" >
    <input type="text" name="userid" id="userid" placeholder="请输入账号" /><br />
    <input type="password" name="password" id="password" placeholder="请输入密码" /><br />
    <input type="text" name="Usercode" id="ucode" placeholder="验证码" required="required"><div id="flagcode"></div>
    <img id="imagecode" alt="Code" src="<%= request.getContextPath()%>/imageGenerate"  width="150" height="50">
    <a href=""  id="rest"><br/>
        <font color="black" >看不清楚</font>
    </a><br/>
    <input type="submit" name="denglu" id="denglu" value="登录" />
</form>

负责校验验证码的Servlet:

package com.kailong.servlet;
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.io.IOException;
import java.io.PrintWriter;
@WebServlet("/CodeAjax")
public class CodeAjax extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String Usercode = request.getParameter("Usercode");
        String code = (String)request.getSession().getAttribute("piccode");
        String res = "";

        if (code.equals(Usercode)) {
                res = "yes";
        } else {
                res = "no";
        }
        PrintWriter out = response.getWriter();
        out.print(res);
        out.flush();
        out.close();
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                doGet(request, response);
    }
}

注意:
这个是需要结合JSP页面实现验证码校验或利用Hutool-(Java工具类)实现验证码校验里面的实现验证码生成的Servlet结合的,因为前端的校验处理的验证码比对是比对的用户输入的和session对象里保存的,session对象里保存的是生成验证码时候保存进去的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_57781768/article/details/127974989

java这门语言 如何从刚毕业的小菜鸟进阶成月薪15k以上的工程师_当富网络的博客-爱代码爱编程

java 学习开发一些体会 文章目录 java 学习开发一些体会前言一、学习知识汇总1.1、Java se基础1.2、java学习详细路线指导 二、学习Java需要达到的30个目标2.1 先学习j2s

计算机网络面试总结(附答案)_明天的我没有昨天的博客-爱代码爱编程

1、OSI: 开放系统互联参考模型:力求将网络简化,并以模块化的方式来设计网络。OSI并不是一个标准,而是在制定标准时所使用的概念性框架。 先从应用层到物理层,再从物理层到应用层处理数据头部。 OST将计算机网络共分为7层

阿里巴巴Java开发手册(华山版)-爱代码爱编程

这是第二次研读阿里规约,这本书对我们的编码规范影响非常深远,希望大家可以参考哦。阿里巴巴Java开发手册(华山版) 提取码:92gv 前 言 《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结, 经历了多次大规模一线实战的检验及不断完善, 公开到业界后,众多社区开发者踊跃参与,共同打磨完善, 系统化地整理成册。现代软件行业的高

JAVA编码规范-爱代码爱编程

命名风格 代码命名不能以下划线或者美元符号开头或者结尾代码命名不能以中文拼音或者中文拼音与英文混合方式类名使用UpperCamCamelCase风格,但DO、PO、DTO、VO、BO等除外方法名、参数名、变量名统一使用lowerCamelCase,必须遵守驼峰命名常量名全部大写,单词间用下划线隔开抽象类必须以Abstract或者Base开头,异常类必须以

SaaS模式、技术与案例详解——第9章 SaaS平台基础组件分析与设计-爱代码爱编程

本章导读语】 所有真正杰出的设计一旦被设计好,看起来都是那么的简单和显而 易见。但是在获得杰出设计的过程中,需要付出令人难以置信的努力 ________Michael Abrash《波斯王子:时之沙开发秘话》 任何系统都是由一个个模块组成的,软件系统里有许多模块是公用的,成熟的软件公司会充分利用软件的复用技术来降低开发量,避免重复开发。但要做到软件

Python 网络爬虫与数据采集(一)-爱代码爱编程

Python 网络爬虫与数据采集 第1章 序章 网络爬虫基础1 爬虫基本概述1.1 爬虫是什么1.2 爬虫可以做什么1.3 爬虫的分类1.4 爬虫的基本流程1.4.1 浏览网页的流程1.4.2 爬虫的基本流程1.5 爬虫与反爬虫1.5.1 爬虫的攻与防1.5.2 常见的反爬与反反爬1.6 爬虫的合法性与 robots 协议1.6.1 robots

[文章]剖析web 2.0_weboperation2.0-爱代码爱编程

什么是WEB2.0?   要理解WEB2.0,先得看WEB的历史。 World Wide Web,简称WWW,是英国人TimBerners-Lee 1989年在欧洲共同体的一个大型科研机构任职时发明的。通过WEB,互联网上的资源,可以在一个网页里比较直观的表示出来;而且资源之间,在网页上可以链来链去。在WEB1.0上做出巨大贡献的公司有Netscape,

字节面试杂谈——计算机网络原理_mon.zijieapi.com-爱代码爱编程

目录 一、OSI模型、TCP/IP模型(各层协议) 二、TCP和UDP的区别 三、TCP可靠传输的原理:序列号与确认号、重传机制、流量控制、拥塞控制、首部检验和 四、TCP三次握手,四次挥手过程 五、timewait 和 closewait 六、HTTP:报文格式、1.0 1.1 2.0、状态码,无状态解决(Cookie,Session) 七