表单的数据处理

本文介绍了如何在Java中处理表单数据,通过HttpServletRequest和HttpServletResponse对象获取用户在register.html页面的输入,以及FormServlet的使用,展示了POST请求的处理过程和字符编码设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概要


 *  表单数据处理 (表单数据作为请求参数传递到服务端,在服务端通常使用请求对象的成员方法
 *                                  String getparameter(name) 获取表单数据
 *                                  String[] getParameterValues(name)   获取表单数据(文本域)
 *          FormServlet 读取 register.html ------页面用户传来的请求参数并显示 用户输入的信息             

整体架构流程

// import --- 导包
import java.io.IOException; //输入输出异常
import java.io.PrintWriter; //字符打印流 
import javax.servlet.ServletException; //异常处理
import javax.servlet.annotation.WebServlet; //网络服务器

//http超文本传输协议
import javax.servlet.http.HttpServlet; // 对象时  Servlet的核心,每当一个客户请求一个 Http Servlet对象时,该对象的 Service()方法就要被调用。
import javax.servlet.http.HttpServletRequest;//请求对象
import javax.servlet.http.HttpServletResponse;//响应对象

技术名词解释

//HttpServletRequest  获得请求对象  HttpServletResponse 获得响应对象

//doPost处理Post请求的的数据并做出响应

//网络服务器 servlet运行在web服务器上的java程序

技术细节

用户注册页面

<!DOCTYPE html>
<!-- 文档类型声明 -->
<html>
<head>
<meta charset="UTF-8">
<!-- charset字符集 -->
<title>用户注册页面</title>
</head>
<body>
	<h4>用户注册页面</h4>

	<!-- 
	Attribute : action
    Data Type : URI
	
	Attribute : method
		Data Type : ENUM
		Default Value : get
		Enumerated Values : 
	- get
	- post -->

	<!-- name:指定的控件名称
		value:每个控件仅有一个value值
	    size:设置控件的大小
	 -->

	<form action="register.action" method="post">
		<!-- 以post的方式提交 -->
		<fieldset>
			<!-- 外加边框 -->
			<table>
				<!-- 表格 -->
				<tr>
					<!-- 表格行 -->
					<td>用户名:</td>
					<!-- 单元格 -->
					<td><input type="text" name="username" size="15"></td>
					<!-- 文本框 -->
				</tr>
				<tr>
					<td>密码:</td>
					<td><input type="password" name="password" size="16"></td>
					<!-- 密码框 -->
				</tr>
				<tr>
					<td>性别:</td>
					<!-- 单选按钮,单选框 -->
					<td><input type="radio" name="sex" value="male">男 <input
						type="radio" name="sex" value="female">女</td>
				</tr>
				<tr>
					<td>年龄:</td>
					<!-- 文本框 -->
					<td><input type="text" name="age" size="5"></td>
				</tr>
				<tr>
					<td>兴趣:</td>
					<!-- 多选按钮,复选框 -->
					<td><input type="checkbox" name="hobby" value="read(文学)">文学
						<input type="checkbox" name="hobby" value="sport(体育 )">体育
						<input type="checkbox" name="hobby" value="computer(电脑)">电脑</td>
				</tr>
				<tr>
					<td>学历:</td>
					<td><select name="education">
							<!-- 组合框 -->
							<option value="bachelor(学士)">学士</option>
							<!-- 列表框,下拉框 -->
							<option value="master(硕士)">硕士</option>
							<option value="doctor(博士)">博士</option>
					</select></td>
				</tr>
				<tr>
					<td>邮件地址:</td>
					<td><input type="text" name="email" size="20"></td>
					<!-- 文本框 -->
				</tr>
				<tr>
					<td>简历:</td>
					<td><textarea name="resume" rows="5" cols="30"></textarea></td>
					<!-- 多行文本框 -->
				</tr>
				<tr>
					<td><input type="submit" name="submit" value="提交"></td>
					<!-- 按钮 -->
					<td><input type="reset" name="reset" value="重置"></td>
				</tr>
			</table>
		</fieldset>
	</form>
</body>
</html>

FormServlet

//在那个包下
package com.demo;

// import --- 导包
import java.io.IOException; //输入输出异常
import java.io.PrintWriter; //字符打印流 
import javax.servlet.ServletException; //异常处理
import javax.servlet.annotation.WebServlet; //网络服务器

//http超文本传输协议
import javax.servlet.http.HttpServlet; // 对象时  Servlet的核心,每当一个客户请求一个 Http Servlet对象时,该对象的 Service()方法就要被调用。
import javax.servlet.http.HttpServletRequest;//请求对象
import javax.servlet.http.HttpServletResponse;//响应对象

import javax.servlet.http.Part;

/**
 *  表单数据处理 (表单数据作为请求参数传递到服务端,在服务端通常使用请求对象的成员方法
 *  								String getparameter(name) 获取表单数据
 *  								String[] getParameterValues(name)   获取表单数据(文本域)
 *          FormServlet 读取 register.html ------页面用户传来的请求参数并显示 用户输入的信息             
 * */


//网络服务器 servlet运行在web服务器上的java程序
@WebServlet(name = "FormServlet", urlPatterns = { "/register.action" })
public class FormServlet extends HttpServlet {

	// 序列化的版本号
	private static final long serialVersionUID = -2899814123246634151L;
	
	// 最终的  static 成员常量
	private static final String TITLE = "用户信息";

	//doPost处理Post请求的的数据并做出响应
	@Override		//HttpServletRequest  获得请求对象  HttpServletResponse 获得响应对象
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		// 1.处理乱码
		request.setCharacterEncoding("utf-8");//请求
		response.setCharacterEncoding("utf-8");//响应
		response.setContentType("text/html; charset=utf-8");//设置响应内容类型
		
		// 2.获取资源  PrintWriter 字符打印流对象    (字符流)
		PrintWriter out = response.getWriter();//响应(流)资源
		
		// 4.响应用户
		// println换行打印(Java 语言中的命令)
		out.println("<!DOCTYPE html>");
		out.println("<html><head>");
		out.println("<meta charset=\"UTF-8\">");
		out.println("<title>" + TITLE + "</title></head>");
		out.println("</head>");
		out.println("<body><h4>" + TITLE + "</h4>");
		out.println("<table>");
		out.println("<tr><td>用户名</td>");
		
		// 3.获取数据
		String username = request.getParameter("username");
		out.println("<td>" + username + "</td></tr>");
		out.println("<tr><td>密码:</td>");
		out.println("<td>" + request.getParameter("password") + "</td></tr>");
		out.println("<tr><td>性别:</td>");
		out.println("<td>" + request.getParameter("sex") + "</td></tr>");
		out.println("<tr><td>年龄:</td>");
		out.println("<td>" + request.getParameter("age") + "</td></tr>");
		out.println("<tr><td>爱好:</td>");
		out.println("<td>");
		
		// 3.获取数据
		String[] hobbys = request.getParameterValues("hobby"); //多选按钮有多个  参数的值必须为动态的,以使动态web服务将其状态瞬间从外部更改为内部,或反之亦然。
		
		// 视图层 逻辑判断 数组不能为空否则引发空指针
		if (hobbys != null) {
			for (String hobby : hobbys) {
				System.out.println(hobby);
				out.println(hobby + "<br/>");
			}
		}
		
		// 3.获取数据
		out.println("</td></tr>");
		out.println("<tr><td>学历:</td>");
		out.println("<td>" + request.getParameter("education") + "</td></tr>");
		out.println("<tr><td>邮件地址:</td>");
		out.println("<td>" + request.getParameter("email") + "</td></tr>");
		out.println("<tr><td>简历:</td>");
		out.println("<td>" + request.getParameter("resume") + "</td></tr>");
		out.println("</table>");
		out.println("</body>");
		out.println("</html>");
		
		// 5.关闭资源
		out.close();
	}	
}

小结

  1. 首先,DNS域名解析器会解析你输入的域名(mp.weixin.qq.com),将其对应的IP地址确定下来。可以通过在线工具或者使用cmd命令窗口ping域名获取IP。

  2. 浏览器会使用默认的80端口与服务器建立HTTP连接。同时,浏览器客户端会随机选择一个可用的端口作为客户端端口。在客户端和服务器进程之间,会建立一个套接字用于通信。

  3. HTTP客户端通过套接字向服务器发送一个HTTP请求报文。这个请求报文中包含了请求的资源路径(mp/appmsgalbum),而问号后面则是我们需要的参数。关于HTTP请求报文的详细内容,我们稍后会进行详细讨论。

  4. HTTP服务器通过套接字接收到这个请求报文后,会对请求进行解析,并从存储器(RAM或磁盘)中检索出请求的对象(mp.weixin.qq.com/mp/appmsgalbum)。然后,服务器会将检索到的对象封装到HTTP响应报文中,并通过套接字发送给客户端。

  5. HTTP服务器会通知TCP断开连接。实际上,TCP连接的断开需要等到客户端完全接收完响应报文后才会断开连接。

  6. 当HTTP客户端接收完响应报文后,TCP连接会关闭。客户端会从响应报文中提取出响应的文件,并对HTML文件进行检查。然后,客户端会循环检查报文中的其他内部对象。

  7. 在检查完成后,HTTP客户端会将相应的资源通过显示器呈现给用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

apesource.芯轴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值