JSP利用AJAX實現頁面即時校驗驗證碼

来源:https://www.cnblogs.com/kohler21/archive/2022/11/21/16911509.html
-Advertisement-
Play Games

在JSP頁面實現驗證碼校驗文章中當時是使用的Servlet類來進行的驗證碼校驗,但是這種方式並不能即時校驗,在正常情況下都是直接在用戶輸入之後就進行校驗,這樣對用戶來說很方便的。 AJAX 即“Asynchronous Javascript And XML”(非同步 JavaScript 和 XML) ...


JSP頁面實現驗證碼校驗文章中當時是使用的Servlet類來進行的驗證碼校驗,但是這種方式並不能即時校驗,在正常情況下都是直接在用戶輸入之後就進行校驗,這樣對用戶來說很方便的。

AJAX 即“Asynchronous Javascript And XML”(非同步 JavaScript 和 XML),是指一種創建互動式網頁應用的網頁開發技術。

ajax 是一種瀏覽器非同步發起請求。局部更新頁面的技術。
jQuery ajax詳解可參閱:jQuery與Ajax


先看效果:
image
這個刷新驗證的原理在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對象里保存的是生成驗證碼時候保存進去的。

公眾號首發地址:https://mp.weixin.qq.com/s/elm8hmdoKZjn7uysuyMeJw
歡迎關註公眾號:愚生淺末。

歡迎關註我的公眾號,共同學習


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • WEB開發會話技術02 6.Cookie的生命周期 預設情況下,Cookie只在瀏覽器的記憶體中存活,也就是說,當你關閉瀏覽器後,Cookie就會消失。但是也可以通過方法設置cookie的生存時間。 cookie的生命周期指的是如何管理cookie,什麼時候cookie被銷毀。 setMaxAge(i ...
  • 全局有序 在RocketMQ中,如果使消息全局有序,可以為Topic設置一個消息隊列,使用一個生產者單線程發送數據,消費者端也使用單線程進行消費,從而保證消息的全局有序,但是這種方式效率低,一般不使用。 局部有序 假設一個Topic分配了兩個消息隊列,生產者在發送消息的時候,可以對消息設置一個路由I ...
  • 目錄 一.簡介 二.freeglut + glew 三.glfw + glad 四.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL E ...
  • 一.小結 1.標識符是程式中事務的名稱 2.標誌符是由字母 數字 下劃線 和美元符號$構成的字元序列 3.標識符必須以字母或下劃線開頭,不能以數字開頭 4.標識符不能是保留字 5.標識符可以是任意長度 6.選擇描述性的標識符可提高程式的可讀性 7.使用變數存儲在程式中使用的數據 8.聲明變數就是告訴 ...
  • 大家好,歡迎來到 Crossin的編程教室 ! 前幾天,後臺老有小伙伴留言“愛心代碼”。這不是Crossin很早之前發過的內容嘛,怎麼最近突然又被人翻出來了?後來才知道,原來是一部有關程式員的青春偶像劇《點燃我,溫暖你》在熱播,而劇中有一段關於期中考試要用程式畫一個愛心的橋段。 於是出於好奇,Cro ...
  • 列表和字典的區別是列表可以通過索引來訪問值,而字典可以通過名稱來訪問各個值。 字典這種數據結構稱為映射(mapping),字典是Python中唯一內置映射類型,值不按照順序排列,而是存儲再鍵下麵。 其中鍵可以是數字、字元串或元組等不可變數據類型。 字典的用途 字典的名稱指出了這種數據結構的用途。日常 ...
  • 來源:blog.csdn.net/u014454538/article/details/98515807 1. Java中的線程安全 Java線程安全:狹義地認為是多線程之間共用數據的訪問。 Java語言中各種操作共用的數據有5種類型:不可變、絕對線程安全、相對線程安全、線程相容、線程獨立 ① 不可 ...
  • 1、快速開始 1.1、現有一張 User 表,其表結構如下 | id | name | age | emali | | | | | | | 1 | Jone | 18 | [email protected] | | 2 | Jack | 20 | [email protected] | | 3 ...
一周排行
    -Advertisement-
    Play Games
  • MQTTnet 是一個高性能的MQTT類庫,支持.NET Core和.NET Framework。 MQTTnet 原理: MQTTnet 是一個用於.NET的高性能MQTT類庫,實現了MQTT協議的各個層級,包括連接、會話、發佈/訂閱、QoS(服務質量)等。其原理涉及以下關鍵概念: MqttCli ...
  • 在WPF中,源屬性(Source Property)指的是提供數據的屬性,通常是數據模型或者其他控制項的屬性,而目標屬性(Target Property)則是數據綁定的目標,通常是綁定到控制項的屬性,例如TextBlock的Text屬性。數據綁定將源屬性的值自動更新到目標屬性中。 主要包含以下幾個事件: ...
  • async/await 是 C# 中非同步編程的關鍵特性,它使得非同步代碼編寫更為簡單和直觀。下麵深入詳細描述了 async/await 的使用場景、優點以及一些高級使用方法,並提供了相應的實例源代碼。 使用場景: I/O 操作: 非同步編程特別適用於涉及 I/O 操作(如文件讀寫、網路請求等)的場景。在 ...
  • 使用過office的visio軟體畫圖的小伙伴都知道,畫圖軟體分為兩部分,左側圖形庫,存放各種圖標,右側是一個畫布,將左側圖形庫的圖標控制項拖拽到右側畫布,就會生成一個新的控制項,並且可以自由拖動。那如何在WPF程式中,實現類似的功能呢?今天就以一個簡單的小例子,簡述如何在WPF中實現控制項的拖拽和拖動,... ...
  • 1、Blazor Hybrid簡介 Blazor Hybrid 使開發人員能夠將桌面和移動本機客戶端框架與 .NET 和 Blazor 結合使用。在 Blazor Hybrid 應用中,Razor 組件在設備上是本機運行的。 這些組件通過本地互操作通道呈現到嵌入式 Web 視圖控制項。 組件不在瀏覽器 ...
  • 除了內置的數據集,scikit-learn還提供了隨機樣本的生成器。通過這些生成器函數,可以生成具有特定特性和分佈的隨機數據集,以幫助進行機器學習演算法的研究、測試和比較。 目前,scikit-learn庫(v1.3.0版)中有20個不同的生成樣本的函數。本篇重點介紹其中幾個具有代表性的函數。 1. ...
  • 從0到1,手把手帶你開發截圖工具ScreenCap------002實現通過文件對話框,選擇合適的文件夾,自定義預設的圖片保存位置,簡單易學 ...
  • 每次談到容器的時候,除了Docker之外,都會說起 Kubernetes,那麼什麼是 Kubernetes呢?今天就來一起學快速入門一下 Kubernetes 吧!希望本文對您有所幫助。 Kubernetes,一種用於管理和自動化雲中容器化工作負載的工具。 想象一下你有一個管弦樂隊,將每個音樂家視為 ...
  • 目錄 基本說明 安裝 Nginx 部署 VUE 前端 部署 Django 後端 Django admin 靜態文件(CSS,JS等)丟失的問題 總結 1. 基本說明 本文介紹了在 windows 伺服器下,通過 Nginx 部署 VUE + Django 前後端分離項目。本項目前端運行在 80 埠 ...
  • 從0到1,手把手帶你開發截圖工具ScreenCap------003實現最小化程式到托盤運行,- 為了方便截圖乾凈,實現最小化程式到托盤運行,簡潔,勿擾,實現最小化程式到托盤運行, 實現托盤菜單功能,實現回顯主窗體, 實現托盤開始截屏, 實現氣泡信息提示,實現托盤程式提示,實現托盤退出程式, 封裝完... ...