Servlet与表单数据交互(如文本框、单选按钮、复选框、下拉列表等)

news2024/12/29 9:50:09

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:JAVA开发者成长之路
✨特色专栏:国学周更-心性养成之路
🥭本文内容:Servlet与表单数据交互(如文本框、单选按钮、复选框、下拉列表等)
更多内容点击👇
      一文解决IDEA中文乱码问题

【本文目录】

    • 💖 前言
    • 💖 创建表单
    • 💖 Servlet类
    • 💖 文本字段和密码字段值的读取
    • 💖 单选按钮字段值的读取
    • 💖 复选框字段值的读取
    • 💖 下拉列表(组合框)字段值的读取
    • 💖 文本区域字段值的读取
    • 💖 完整代码分享

在这里插入图片描述

💖 前言

  动态Web请求中最重要的是与访问用户的交互。而交互性的基本形式就是HTML表单,表单中常用的提交模式为POST,这样就必须在处理的Servlet类中明确进行doPost()方法覆写。

  本篇中,我将指导您如何使用Java Servlet从服务器端的 HTML 表单中读取常用输入字段的值。您知道,处理以 HTML 页面表示的表单数据是 Web 开发中非常常见的任务。一个典型的场景是用户填写表单的字段并提交。服务器将根据提交的数据处理请求,并将响应发送回客户端。

  下图描述了在服务器端使用 Java servlet 的工作流:

在这里插入图片描述

💖 创建表单

在form01.html页面中创建表单,我们需要使用以下标签:

  • <form>:创建一个表单以在其正文中添加字段。
  • <input> , <select> , <textarea> …:创建表单字段,如文本框、密码框、单选按钮、复选框、下拉列表、文本区域……和提交按钮。

为了使表单与 Java servlet 一起工作,我们需要为标记指定以下属性:

  • method =”post”:将表单数据作为 HTTP POST 请求发送到服务器。一般情况下,表单提交应该在 HTTP POST 方法中完成。
  • action =” servlet 的 URL ”:指定负责处理从该表单发布的数据的 servlet 的相对 URL。

  在进行表单提交时需要注意请求处理的Servlet映射路径要与HTML页面路径相匹配。例如:form01.html页面储存在/welcome路径下,为了便于访问一般会将Servlet的映射路径也设置同样的路径,如下图所示:

在这里插入图片描述

💖 Servlet类

  servlet 的 URL 由servlet 类之前的 @WebServlet 注释指定。当用户提交上面的登录表单时,servlet 容器会调用servlet 的 doPost()方法 。通常,我们将在doPost()方法中执行以下任务:

  • 通过请求 对象(javax.servlet.http.HttpServletRequest接口的实现)读取从表单发布的字段的值。
  • 做一些处理,例如连接到数据库来验证用户名和密码。
  • 通过响应 对象(javax.servlet.http.HttpServletResponse接口的实现)将响应返回给用户。

为了读取表单字段的值,HttpServletRequest 接口提供了以下方法:

  • String getParameter(String name):获取由给定名称指定的字段的值,作为字符串。如果不存在具有给定名称的表单字段,则该方法返回 null。
  • String[] getParameterValues(String name): 在 String 对象数组中获取一组具有相同名称的字段的值。如果不存在具有给定名称的字段,则该方法返回 null。
    请注意,上述方法还可以处理 URL 查询字符串中的参数,因此名称为 getParameter。

  例如,我们可以在doPost()方法中编写以下代码来读取表单字段的值:

        String name= req.getParameter("userName");
        String age= req.getParameter("userAge");

  要将响应发送回客户端,我们需要通过调用HttpServletResponse接口的 getWriter()方法 从响应对象中获取写入器,然后使用print()或println()方法 传递响应。例如:

        String name= req.getParameter("userName");
        String age= req.getParameter("userAge");
        resp.getWriter().println("你好!"+name+"!你今年"+age+"岁!");

💖 文本字段和密码字段值的读取

【1】HTML 表单代码

  <p>用户名:<input type="text" name="userName"/></p>
  <p>用户密码:<input type="password" name="userPassword"/></p>

【2】HTML 表单运行效果

在这里插入图片描述

【3】Servlet 中的 Java 代码

        String name= req.getParameter("userName");
        String password= req.getParameter("userPassword");
        resp.getWriter().println("用户名:"+name+",用户密码:"+password);

【4】提交表单后运行效果

在这里插入图片描述

💖 单选按钮字段值的读取

【1】HTML 表单代码

<p>性别:<input type="radio" name="sex" value="" checked/><input type="radio" name="sex" value=""/></p>

【2】HTML 表单运行效果

在这里插入图片描述

【3】Servlet 中的 Java 代码

	String sex= req.getParameter("sex");
	resp.getWriter().println("性别:"+sex);

【4】提交表单后运行效果

在这里插入图片描述

💖 复选框字段值的读取

【1】HTML 表单代码

 <p>兴趣爱好:<input type="checkbox" name="hobby" value="篮球"/>篮球 
 			 <input type="checkbox" name="hobby" value="足球"/>足球</p>

【2】HTML 表单运行效果

在这里插入图片描述

【3】Servlet 中的 Java 代码

        String[] hobbys=req.getParameterValues("hobby");
        String a="";
        for(int i=0;i<hobbys.length;i++)
        {a+="【"+hobbys[i]+"】";}
        resp.getWriter().println("兴趣爱好:"+a);

【4】提交表单后运行效果

在这里插入图片描述

💖 下拉列表(组合框)字段值的读取

【1】HTML 表单代码

    用户年龄:<select name="userAge">
      <option name="opAge" value="18">18</option>
      <option name="opAge" value="19">19</option>
      <option name="opAge" value="20">20</option>
      <option name="opAge" value="21">21</option>
  </select>

【2】HTML 表单运行效果

在这里插入图片描述

【3】Servlet 中的 Java 代码

        String opAge = req.getParameter("userAge");
        resp.getWriter().println("年龄:"+opAge);

【4】提交表单后运行效果

在这里插入图片描述

💖 文本区域字段值的读取

【1】HTML 表单代码

  <p>个人简介:<textarea name="perIntro" rows="5" cols="30"></textarea></p>

【2】HTML 表单运行效果

在这里插入图片描述

【3】Servlet 中的 Java 代码

        String perIntro= req.getParameter("perIntro");
        resp.getWriter().println("个人简介:"+perIntro);

【4】提交表单后运行效果

在这里插入图片描述

💖 完整代码分享

【1】HTML页面:form01.html 代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>作业一</title>
</head>
<body>
<!--welcome为HTML页面路径,要与Servlet映射路径相匹配-->
<form action="welcome" method="post">
  <p>用户名:<input type="text" name="userName"/></p>
  <p>用户密码:<input type="password" name="userPassword"/></p>
  <p>性别:<input type="radio" name="sex" value="" checked/><input type="radio" name="sex" value=""/></p>
  <p>兴趣爱好:<input type="checkbox" name="hobby" value="篮球"/>篮球 <input type="checkbox" name="hobby" value="足球"/>足球</p>
    用户年龄:<select name="userAge">
      <option name="opAge" value="18">18</option>
      <option name="opAge" value="19">19</option>
      <option name="opAge" value="20">20</option>
      <option name="opAge" value="21">21</option>
  </select>
  <p>个人简介:<textarea name="perIntro" rows="5" cols="30"></textarea></p>
  <p><input type="submit" value="提交"/></p>
</form>
</body>
</html>

【2】Servlet类:FormServletDemo01.java 代码

package cn.lqgx.www;

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;

//注解方式替换web.xml中的配置,Servlet映射路径
@WebServlet("/welcome")
public class FormServletDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        String name= req.getParameter("userName");
        String password= req.getParameter("userPassword");
        String sex= req.getParameter("sex");

        String[] hobbys=req.getParameterValues("hobby");
        String a="";
        for(int i=0;i<hobbys.length;i++)
        {a+="【"+hobbys[i]+"】";}

        String opAge = req.getParameter("userAge");
        String perIntro= req.getParameter("perIntro");
        resp.getWriter().println("用户名:"+name+",用户密码:"+password+",性别:"+sex+",兴趣爱好:"+a+",年龄:"+opAge+",个人简介:"+perIntro);
//        System.out.println("用户名:"+name+",用户密码:"+password+",性别:"+sex+",兴趣爱好:"+a+",年龄:"+opAge);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

【3】架构图特别说明

在这里插入图片描述

【4】完整代码运行效果

html页面:
在这里插入图片描述
【5】提交表单后运行效果:

在这里插入图片描述


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于遗传算法解决TSP问题(Matlab代码实现)

目录 1 概述 2 运行结果 3 Matlab代码实现 4 结语 5 参考文献 1 概述 旅行商问题是一个经典的路径规划问题&#xff0c;传统TSP假设客户位置和客户之间旅行时间是固定不变的&#xff0c;而在现实生活中交通状况和客户要求可能会随着时间而改变&#xff0c;为了找到最经济的…

(附源码)ssm教育机构管理系统 毕业设计 010224

ssm教育机构管理系统 摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设…

被AI包裹的冬天,智慧供热打破城市供热的“不可能三角”

最近很多城市都迎来了今冬以来的最强寒潮&#xff0c;在拉尼娜事件的影响下&#xff0c;一个格外寒冷的冬天似乎不可避免。而每次降温&#xff0c;有暖气的北方城市就会引来网络上一片艳羡之声。前不久网络上就流传着一个段子“南方人的命也是命&#xff0c;请给南方装暖气 ”&…

自定义jdk镜像

启动虚拟机&#xff0c;进入centos 1.创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件 #创建镜像目录 mkdir –p /javaxl_docker/jdk #安装lrzsz命令 yum install lrzsz -y #选择文件进行上传 rz # 注意d是大写 touch Dockerfile 2.编写 Dockerfile 文件 #1.指定基…

使用C++实现Windows和Linux的Flutter文档扫描插件

文档扫描应用大都是移动应用。结合手机摄像头可以实现文档拍摄&#xff0c;边缘检测&#xff0c;自动剪裁&#xff0c;透视矫正&#xff0c;滤镜等功能。但是桌面办公也少不了文档处理。这里分享下如何使用Dynamsoft Document Normalizer C SDK实现用于桌面文档处理的Flutter插…

抖音最新版抓包方案,修改so绕过ssl

dy过ssl charles抓包 及xposed的justtrustme安装到手机上只能过系统的ssl。 抖音写了一个非系统的ssl所以需要反编译so来处理。 第一步&#xff0c;charles 我用的是magisk手机&#xff0c;先重charles把证书下载到pc端 选项1&#xff0c;安装证书到本地 选项2&#xff0c…

Android桌面图标快捷方式

一、背景 长按桌面图标实现快捷方式最早是iOS提供的功能,而Android最早在Android 7.1版本也提供了对这方面的支持,于是在短时间内,像微信,支付宝,头条等流量级应用都提供了这方面的支持,如下图。 现在,长按桌面图标快捷方式已经是很成熟的功能,实现上也比较简单,主…

知识图谱-KGE-语义匹配-双线性模型(打分函数用到了双线性函数)-2011:RESCAL【双线性模型的开山之作】【把每个关系对应的邻接矩阵进行了矩阵的分解】

【paper】 A Three-Way Model for Collective Learning on Multi-Relational Data 【简介】 这篇文章应该算是双线性模型的开山之作。是德国的一个团队发表在 ICML 2011 上的工作&#xff0c;比较老了&#xff0c;主要思想是三维张量分解。 想研究啥&#xff0c;啥就很重要 Re…

Activity7-流程初体验

流程符号详解&#xff1a; 创建Activiti工作流的主要步骤包含以下几步: 1. 定义流程。按照BPMN的规范&#xff0c;使用流程定义工具&#xff0c;将整个流程描述出来。 2. 部署流程。把画好的BPMN流程定义文件加载到数据库中&#xff0c;生成相关的表数据。 3. 启动流程。使用…

基于粒子群优化算法的微电网调度(光伏、储能、电动车、电网交互)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…

目标检测3

还是目标检测相关~这次是Box Size置信度偏差会损害目标检测器 检测器的置信度预测在目标大小和位置方面存在偏差&#xff0c;但目前尚不清楚这种偏差与受影响的目标检测器的性能有何关系。 无数应用依赖于目标检测器的可靠置信度估计的准确预测。然而&#xff0c;众所周知&am…

[附源码]Python计算机毕业设计Django在线招聘网站

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

突破40%!新能源汽车L2级辅助驾驶搭载率创新高

新能源汽车正在成为智能化的主力军。 高工智能汽车研究院监测数据显示&#xff0c;2022年1-10月中国市场&#xff08;不含进出口&#xff09;新能源汽车前装标配搭载L2级辅助驾驶交付上险167.51万辆&#xff0c;前装搭载率首次突破40%&#xff0c;达到41.93%&#xff1b;同期&…

[Java反序列化]CommonsBeanutils1利用链学习

0x01 前篇shiro的利用&#xff0c;需要动态字节码 &#xff0c;而这种方式需要我们自己添加依赖&#xff0c;所以很局限&#xff0c;而CommonsBeanutils 是shiro的依赖&#xff0c; CommonsBeanutils 是应用于 javabean 的工具 javabean的定义 类必须是具体的和公共的&#…

传统服务器与云服务器

传统服务器 传统服务器即物理服务器&#xff0c;是指独立服务器&#xff0c;也就是指物理上的单独服务器&#xff0c;物理服务器的构成包括处理器、硬盘、内存、系统总线等&#xff0c;和通用的计算机架构类似。 裸机物理服务器(BMS) 裸机服务器的官方定义是&#xff1a;裸机…

【嵌入式硬件芯片开发笔记】4-2 mADAC芯片AD5421配置流程

【嵌入式硬件芯片开发笔记】4-2 mADAC芯片AD5421配置流程 16位、串行输入、环路供电、4 mA至20 mA DAC 可用于HART协议相关电路 同AD5700配合使用 AD5421的SPI和普通的不一样 回读时要发两段 CS中间拉高一次 数据在SCLK上升沿逐个输出&#xff0c;而且在 SCLK下降沿有效 固CPO…

微服务框架 SpringCloud微服务架构 26 数据聚合 26.2 DSL 实现Bucket聚合

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构26 数据聚合26.2 DSL 实现Bucket聚合26.2.1 DSL 实现Bucket聚合26.2.2 Buc…

【设计模式】享元模式(Flyweight Pattern)

享元模式属于结构型模式&#xff0c;主要解决系统需要使用大量相似对象&#xff08;细粒度对象&#xff09;而消耗大量内存资源的问题。享元模式运用共享技术有效地支持大量细粒度的对象&#xff0c;其通过提取对象共同的信息抽象出享元对象&#xff0c;实现共享功能&#xff0…

mysql详解之B树的查询时间复杂度

前言 本文是我在看了这篇文章之后&#xff08;这篇文章对b树的时间复杂度总结的很全面&#xff09;&#xff0c;关于B树&#xff08;或B树&#xff09;时间复杂度做的进一步思考&#xff08;如果对解题过程不感兴趣&#xff0c;可以直接看最后的总结&#xff09;。 正题 在这…

Java继承(extends)简明教程

继承是面向对象的三大特征之一。继承和现实生活中的“继承”的相似之处是保留一些父辈的特性&#xff0c;从而减少代码冗余&#xff0c;提高程序运行效率。 Java 中的继承就是在已经存在类的基础上进行扩展&#xff0c;从而产生新的类。已经存在的类称为父类、基类或超类&…