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.mzph.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 …