JSP服務器端表單驗證

JSP服務器端表單驗證

一、引言

在Web開發中,表單驗證是保障數據合法性的重要環節。《Web編程技術》第五次實驗要求,詳細講解如何基于JSP內置對象實現服務器端表單驗證,包括表單設計、驗證邏輯、交互反饋等核心功能。最終實現:輸入5個非空字符,否則返回提示信息并清空輸入框,聚焦待重新輸入。

二、技術實現方案

1. 核心需求

  • 表單功能:單行文本輸入框,提交后驗證是否為空且長度為5。
  • 交互要求:驗證失敗時顯示錯誤信息,清空輸入框并激活焦點;成功時提示格式正確。
  • 技術限制:僅使用JSP內置對象(requestresponse),不依賴框架。

2. 架構設計

  • 表單頁面(form.html):負責用戶輸入和提示信息展示,通過HTML/CSS美化界面。
  • 驗證頁面(validate.jsp):接收表單數據,執行服務器端驗證,通過重定向傳遞結果參數。

三、代碼實現與解析

1.項目結構

在這里插入圖片描述

2. 表單頁面(form.html)

代碼示例
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>表單驗證</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f4;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}form {background-color: #fff;padding: 20px;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);width: 300px;}label {display: block;margin-bottom: 5px;}input[type="text"] {width: 100%;padding: 8px;margin-bottom: 15px;border: 1px solid #ccc;border-radius: 4px;box-sizing: border-box;}input[type="submit"] {background-color: #007BFF;color: white;padding: 10px 15px;border: none;border-radius: 4px;cursor: pointer;width: 100%;}input[type="submit"]:hover {background-color: #0056b3;}.error-message {color: red;margin-bottom: 10px;}</style>
</head><body><form action="validate.jsp" method="post"><div id="error-message" class="error-message"></div><label for="inputText">請輸入 5 個字符:</label><input type="text" id="inputText" name="inputText"><input type="submit" value="判斷"></form><script>const urlParams = new URLSearchParams(window.location.search);const message = urlParams.get('message');const shouldClear = urlParams.get('clear');if (message) {document.getElementById('error-message').textContent = message;}if (shouldClear =='true') {document.getElementById('inputText').value = '';document.getElementById('inputText').focus();} </script>
</body></html>    
關鍵邏輯
  • CSS美化:使用flex布局實現頁面居中,添加陰影和圓角提升視覺效果,錯誤信息紅色顯示。
  • JavaScript交互:通過URLSearchParams解析URL參數,根據message顯示錯誤信息,根據shouldClear執行清空和聚焦操作。

2. 驗證頁面(validate.jsp)

代碼示例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
<%  // 1. 獲取表單數據  String inputText = request.getParameter("inputText");  String message = "";  boolean shouldClear = false;  // 2. 服務器端驗證  if (inputText == null || inputText.trim().isEmpty()) {  message = "輸入不能為空,請重新輸入!";  shouldClear = true;  } else if (inputText.length() != 5) {  message = "輸入的字符必須為5個,請重新輸入!";  shouldClear = true;  } else {  message = "輸入格式正確!";  }  // 3. 編碼處理,避免URL亂碼  String encodedMessage = java.net.URLEncoder.encode(message, "UTF-8");  // 4. 重定向回表單頁面,攜帶參數  response.sendRedirect("form.html?message=" + encodedMessage + "&clear=" + shouldClear);  
%>  
關鍵邏輯
  • 輸入驗證:使用request.getParameter獲取輸入值,通過條件判斷驗證非空和長度。
  • 重定向機制:通過response.sendRedirect返回表單頁面,拼接URL參數傳遞驗證結果(message)和操作指令(shouldClear)。
  • 編碼處理:使用URLEncoder對中文信息編碼,確保URL參數正確傳遞。 在這里插入圖片描述

四、效果演示

1. 輸入為空時

  • 操作:點擊提交按鈕(輸入框為空)。
  • 結果
    • 跳回表單頁面,顯示紅色錯誤信息“輸入不能為空”。
    • 輸入框內容清空,光標自動聚焦(如圖1)。
      在這里插入圖片描述

圖1:輸入為空的驗證效果

2. 輸入長度錯誤時

  • 操作:輸入3個字符(如“abc”)。
  • 結果
    • 提示“輸入的字符必須為5個”,輸入框清空并聚焦(如圖2)。
      在這里插入圖片描述

圖2:長度不符的驗證效果

3. 輸入正確時

  • 操作:輸入5個字符(如“12345”)。
  • 結果:提示“輸入格式正確”,清除輸入框(如圖3)。

在這里插入圖片描述

圖3:輸入正確的驗證效果

五、核心技術點解析

JSP內置對象的作用

  • request:獲取客戶端提交的表單數據(request.getParameter)。
  • response:控制服務器響應,通過sendRedirect實現頁面重定向。

六、注意事項

  1. 輸入框ID一致性:確保form.html中的輸入框id="inputText"與JavaScript代碼中的選擇器一致。
  2. 重定向與轉發的區別
    • 重定向(sendRedirect):瀏覽器發起新請求,URL會改變,適合跨頁面傳參。
    • 轉發(forward):服務器內部跳轉,URL不變,無法跨域傳遞參數,此處不適用。
  3. 瀏覽器緩存問題:若提示信息不更新,可在validate.jsp中添加響應頭禁止緩存:
    response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");  
    

七、總結

通過JSP內置對象實現服務器端表單驗證,核心在于:

  1. 表單頁面負責用戶交互和視覺反饋;
  2. 驗證頁面專注業務邏輯,通過重定向傳遞結果;
  3. URL參數作為橋梁,實現跨頁面數據傳遞。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902454.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[創業之路-381]:企業法務 - 企業經營者,有哪些生產安全風險,哪些人承擔責任?承擔哪些責任?如何防范?

企業生產安全風險、責任主體、責任類型及防范措施 一、企業生產安全風險類型 安全生產條件不達標 包括生產設施、設備不符合國家安全標準&#xff0c;作業環境存在重大安全隱患&#xff08;如易燃易爆物品存放不當、通風不良等&#xff09;。案例&#xff1a;某企業因未對特種…

BPC電波授時技術

BPC電波授時技術是一種基于低頻時碼信號的授時方式&#xff0c;廣泛應用于中國的時間同步領域。其核心在于通過發射特定頻率的低頻信號&#xff0c;將高精度的時間信息傳遞給接收設備&#xff0c;從而實現時間同步。以下將從技術原理、系統組成、應用領域及發展歷史等方面詳細介…

polkit補丁升級手順

確認當前Polkit版本 rpm -qa |grep polkit上傳polkit安裝包 上傳安裝包&#xff1a; polkit-0.115-11.el8_4.2.x86_64.rpm polkit-libs-0.115-11.el8_4.2.x86_64.rpm執行升級操作 yum update polkit-0.115-11.el8_4.2.x86_64.rpm polkit-libs-0.115-11.el8_4.2.x86_64.rpm檢…

Pycharm(十五)面向對象程序設計基礎

目錄 一、定義類及使用類的成員 二、self關鍵字介紹 三、在類內部調用類中的函數 class 類名&#xff1a; 屬性&#xff08;類似于定義變量&#xff09; 行為&#xff08;類似于定義函數&#xff0c;只不過第一個形參要寫self&#xff09; 一、面向對象基本概述 屬性&…

ZYNQ筆記(九):定時器中斷

版本&#xff1a;Vivado2020.2&#xff08;Vitis&#xff09; 任務&#xff1a;使用定時器 (私有定時器) 中斷 實現 LED&#xff08;PS端&#xff09; 定時1s亮滅翻轉 目錄 一、介紹 二、硬件設計 三、軟件設計 四、效果 一、介紹 Zynq系列是Xilinx(現為AMD)推出的集成了AR…

邏輯思維與軟件開發:從選定方向到風險管理的全流程

在軟件開發的過程中&#xff0c;邏輯思維是至關重要的。它不僅幫助我們在復雜的技術問題中找到解決方案&#xff0c;還能指導我們在項目管理、團隊協作和風險控制等方面做出明智的決策。本文將探討如何結合邏輯思維&#xff0c;圍繞“選定大方向、及時止損、制定適合自己的執行…

描述城市出行需求模式的復雜網絡視角:大規模起點-目的地需求網絡的圖論分析

描述城市出行需求模式的復雜網絡視角&#xff1a;大規模起點-目的地需求網絡的圖論分析 原文&#xff1a; A complex network perspective for characterizing urban travel demand patterns: graph theoretical analysis of large-scale origin–destination demand networks…

如何測試雷達與相機是否時間同步?

在多傳感器融合系統中&#xff0c;相機與雷達的協同感知已成為環境理解的關鍵。相機通過捕捉紋理信息識別物體類別&#xff0c;而雷達利用激光或毫米波實現全天候精確測距。兩者的數據融合既能避免單一傳感器缺陷&#xff08;如相機受光照影響、雷達缺乏語義信息&#xff09;&a…

探尋Gson解析遇到不存在鍵值時引發的Kotlin的空指針異常的原因

文章目錄 一、問題背景二、問題原因三、問題探析Kotlin空指針校驗Gson.fromJson(String json, Class<T> classOfT)TypeTokenGson.fromJson(JsonReader reader, TypeToken<T> typeOfT)TypeAdapter 和 TypeAdapterFactoryReflectiveTypeAdapterFactoryRecordAdapter …

ESP-ADF外設子系統深度解析:esp_peripherals組件架構與核心設計(存儲類外設之SPIFFS)

目錄 ESP-ADF外設子系統深度解析&#xff1a;esp_peripherals組件架構與核心設計&#xff08;存儲類外設之SPIFFS&#xff09;1. 簡介2. 模塊概述功能定義架構位置核心特性 SPIFFS外設SPIFFS外設概述SPIFFS外設層次架構圖 SPIFFS外設API和數據結構外設層API公共API內部API內部數…

【Pandas】pandas DataFrame truediv

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于執行 DataFrame 與另一個對象&#xff08;如 DataFrame、Series 或標量&#xff09;的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于執行 DataFrame 與另一個對象&…

開發網頁程序時預覽時遇到跨域問題解決方法

CocosCreator 開發h5游戲要用接口、開發html程序網頁程序在chrome中預覽時都會遇到跨域問題,怎么辦? 網上有很多方法,主要是通過服務器端去配置,但那個相對來說消弱安全問題,這個不建議,因為是開發,個人行業,我們知道問題所以,簡單點就主要是通過chrome的參數來禁用: 關閉 Ch…

C語言main的參數;argc與argv

目錄 前言 什么是命令行參數 argc與argv argc (Argument Count) argv (Argument Vector) 示例 前言 在C語言中&#xff0c;main函數的標準形式通常有兩種&#xff1a; int main(void)int main(int argc, char *argv[]) 其中&#xff0c;argc 和 argv 是用于處理命令行參數…

實驗一 進程控制實驗

一、實驗目的 1、掌握進程的概念&#xff0c;理解進程和程序的區別。 2、認識和了解并發執行的實質。 3、學習使用系統調用fork()創建新的子進程方法&#xff0c;理解進程樹的概念。 4、學習使用系統調用wait()或waitpid()實現父子進程同步。 5、學習使用getpid()和getppi…

【Python Web開發】01-Socket網絡編程01

文章目錄 1.套接字(Socket)1.1 概念1.2 類型1.3 使用步驟 Python 的網絡編程主要用于讓不同的計算機或者程序之間進行數據交換和通信&#xff0c;就好像人與人之間打電話、發消息一樣。 下面從幾個關鍵方面通俗易懂地介紹一下&#xff1a; 1.套接字(Socket) 在 Python 網絡編…

Git 配置 GPG 提交簽名

使用 GPG 對 Git 提交進行簽名&#xff0c;可以證明該提交確實是你本人提交的。這在團隊協作和代碼審核中非常有用&#xff0c;GitHub/GitLab 等平臺也會顯示 “Verified” 標簽。 &#x1f9e9; 一、檢查是否已安裝 GPG gpg --version 如果未安裝&#xff0c;可使用以下命令…

MySQL運維三部曲初級篇:從零開始打造穩定高效的數據庫環境

文章目錄 一、服務器選型——給數據庫一個舒適的家二、系統調優——打造高性能跑道三、MySQL配置——讓數據庫火力全開四、監控體系——數據庫的體檢中心五、備份恢復——數據安全的最后防線六、主從復制——數據同步的藝術七、安全加固——守護數據長城 引言&#xff1a;從小白…

實踐項目開發-hbmV4V20250407-跨平臺開發框架深度解析與VSCode一站式開發實踐

跨平臺開發框架深度解析與VSCode一站式開發實踐 在當今多端應用開發需求激增的背景下&#xff0c;跨平臺開發框架成為了眾多開發者的首選。本文將圍繞React Native、Taro及其結合方案&#xff0c;以及Uni-app、MUI、Quasar等輕量級框架展開詳細分析&#xff0c;并探討如何在VS…

Android15沉浸式界面頂部有問題

Android15沉浸式界面頂部有問題 往往開發人員的手機沒這么高級&#xff0c;客戶或者老板的手機是Android15的。 我明明就設了狀態欄透明&#xff0c;我的手機也沒問題。但Android15是有問題的。 先看下有問題的界面&#xff1a; 解決方案&#xff1a; 處理1&#xff1a; if (…

uni-app 狀態管理深度解析:Vuex 與全局方案實戰指南

uni-app 狀態管理深度解析&#xff1a;Vuex 與全局方案實戰指南 一、Vuex 使用示例 1. 基礎 Vuex 配置 1.1 項目結構 src/ ├── store/ │ ├── index.js # 主入口文件 │ └── modules/ │ └── counter.js # 計數器模塊 └── main.js …