表单中多个请求参数名字相同,服务器到底获取的是哪个请求参数的值,表单的action和get和post提交方式的关系以及提交数据的不同点

直接看代码和截图吧,代码中有注释,还有文字说明!

表单get提交和post提交,一个很大的不同点大家都应该知道,post提交,浏览器地址栏中不会明文显示,而get提交,浏览器地址栏中会明文显示,这不是我们今天讨论的重点!

今天讨论的重点如下:

1.表单中如果有2个控件的name属性的值相同,服务器端获取请求参数的时候,获取到的是前面的那个请求参数(不信的话,可以用get方式提交表单,在浏览器地址栏看下这2个名字相同的请求参数哪个在前,服务器端拿到的就是前面的那个请求参数)

2.表单的action中带了请求参数的话,post方式会提交action中的请求参数,get方式不会提交action中的请求参数

3.当表单的action中带的请求参数名称和表单中的控件的name属性的值一样时,如果是post提交表单的话,服务器端获取到的是action中带的请求参数,如果是get提交表单的话,那么服务器端获取到的是表单中的控件(原因参考第2点,表单的action中带了请求参数的话,post会提交action中的请求参数,get不会提交action中的请求参数,所以如果是get提交表单的话,服务器端自然是获取到的是表单中的控件中的值)

testForm.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>测试表单的action的get和post方式提交数据的不同,以及测试多个请求参数同名,服务器到底获取的是哪个请求参数的值</title>
<link rel="stylesheet" type="text/css"
	href="${pageContext.request.contextPath}/body.css">
<link rel="stylesheet" type="text/css"
	href="${pageContext.request.contextPath}/mark.css">
<link rel="stylesheet" type="text/css"
	href="${pageContext.request.contextPath}/input2.css">
</head>
<body οnlοad="showFormInfo()">
	<center>
		<h2>
			<font color="red">测试表单的action的get和post方式提交数据的不同,以及测试多个请求参数同名,服务器到底获取的是哪个请求参数的值</font>
		</h2>
		<div style="height: 90px;" class="testDiv3" id="showFormInfo"></div><br>
		<form id="testForm" action="${pageContext.request.contextPath}/TestForm?onlineName=jerry&workCity=beijing&money=19999&money=36888" method="post">
			用户名:<input type="text" name="userName" value="令狐冲">
			<br> 年龄:<input type="text" name="age" value="23">
			<br> 工作城市:<input type="text" name="workCity" value="深圳">
			<br> 老家城市:<input type="text" name="hometown" value="江西省赣州市于都县">
			<br> 薪水:<input type="text" name="money" value="28500">
			<br>
			员工编号2:<input type="text" name="employeeNumber" value="6688"><br>
			员工编号:<input type="text" name="employeeNumber" value="9527"><br>
			<br> <input type="submit" value="submit按钮提交到服务器端"> <input id="postToServerButton"
				type="button" οnclick="postToServer()"> <input id="getToServerButton" type="button" οnclick="getToServer()"><br><br> <input type="reset"
				value="(重置按钮)本质不是清空控件中的值,而是还原控件中的值">
		</form>
	</center>
</body>
<script type="text/javascript">
	
	//显示表单的信息
	function showFormInfo() {
		var formNode = document.getElementById("testForm");
		var message1 = "表单的action=";
		var message2 = "表单的method提交方式=";
		document.getElementById("showFormInfo").innerHTML = message1
				+ formNode.action + "<br>" + message2 + formNode.method;
		var postButton = document.getElementById("postToServerButton");
		postButton.value = "普通按钮" + "post" + "提交至服务器" + formNode.action;
		var getButton = document.getElementById("getToServerButton");
		getButton.value = "普通按钮" + "get" + "提交至服务器" + formNode.action;
	}
	
	/*
		表单post方式提交到服务器端
	*/
	function postToServer(){
		var formNode = document.getElementById("testForm");
		formNode.method = "post";
		formNode.submit();
	}
	
	/*
		表单get方式提交到服务器端
	*/
	function getToServer(){
		var formNode = document.getElementById("testForm");
		formNode.method = "get";
		formNode.submit();
	}
	
</script>
</html>

TestForm.java

package com.jiongmeng.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
 * 测试表单的action的get和post方式提交数据的不同,以及测试多个请求参
 * 数同名,服务器到底获取的是哪个请求参数的值
 * 
 */
@WebServlet("/TestForm")
public class TestForm extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//用户名
		String userName = request.getParameter("userName");
		//网名
		String onlineName = request.getParameter("onlineName");
		//年龄
		String age = request.getParameter("age");
		//工作城市
		String workCity = request.getParameter("workCity");
		//老家城市
		String hometown = request.getParameter("hometown");
		//薪水
		String money = request.getParameter("money");
		//员工编号
		String employeeNumber = request.getParameter("employeeNumber");
		System.out.println("用户名=" + userName + "网名=" + onlineName + "年龄=" + age + "工作城市=" + workCity + "家乡=" + hometown + "薪水=" + money + "员工编号=" + employeeNumber);
		request.getRequestDispatcher("/jsp/form/showFormData.jsp").forward(request, response);
	
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//解决中文乱码的问题(我们这个项目中的web.xml配置了中文乱码的过滤器处理中文乱码的问题)
		//2个注意 (1.只对post有效,所以该行代码放在doGet方法中没有任何意义 2.必须在request.getParameter()前设置,否则还是会乱码,所以为了保险起见,以后就把该行代码放在第一行)
		//request.setCharacterEncoding("utf-8");
		System.out.println("*******************我是TestForm类中的doPost方法*******************");
		doGet(request, response);
	}

}


showFormData.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>测试表单的action的get和post方式提交数据的不同,以及测试多个请求参数同名,服务器到底获取的是哪个请求参数的值</title>
<link rel="stylesheet" type="text/css"
	href="${pageContext.request.contextPath}/body.css">
<link rel="stylesheet" type="text/css"
	href="${pageContext.request.contextPath}/mark.css">
<link rel="stylesheet" type="text/css"
	href="${pageContext.request.contextPath}/input2.css">
</head>
<body>
	<center>
		<h2>
			<font color="red">测试表单的action的get和post方式提交数据的不同,以及测试多个请求参数同名,服务器到底获取的是哪个请求参数的值</font>
		</h2>
		<h2>显示从testForm.jsp页面中的表单中提交过来的数据</h2>
		用户名:<font color="red">${param.userName}</font><br>
		网名:<font color="red">${param.onlineName}</font><br>
		年龄:<font color="red">${param.age}</font><br>
		工作城市:<font color="red">${param.workCity}</font><br>
		老家城市:<font color="red">${param.hometown}</font><br>
		薪水:<font color="red">${param.money}</font><br>
		员工编号:<font color="red">${param.employeeNumber}</font><br>
		<br>
		<br>
		<br>
		<div class="testDiv2" style="width: 100%;">
		<h3>
		<font color="blue">
		表单get提交和post提交,一个很大的不同点大家都应该知道,post提交,浏览器地址栏中不会明文显示,而get提交,浏览器地址栏中会明文显示,这不
		是我们今天讨论的重点!
		</font>
		</h3>
		<h3><font color="red">今天讨论的重点如下:</font></h3>
		<font color="#A52A2A">
		1.表单中如果有2个控件的name相同,服务器端获取请求参数的时候,获取到的是前面的那个请求参数(不信的话,可
		以用get方式提交表单,在浏览器地址栏看下这2个名字相同的请求参数哪个在前,服务器端拿到的就是前面的那个请求参数)<br>
		</font>
		2.表单的action中带了请求参数的话,post会提交action中的请求参数,get不会提交action中的请求参数<br>
		<font color="#000000">
		3.当表单的action中带的请求参数名称和表单中的控件的name属性的值一样时,如果是post提交表单的话,服
		务器端获取到的是action中带的请求参数,如果是get提交表单的话,那么服务器端获取到的是表单中的控件(原因参考第2点,表
		单的action中带了请求参数的话,post会提交action中的请求参数,get不会提交action中的请求参数,所以如果是get提
		交表单的话,服务器端自然是获取到的是表单中的控件中的值)<br>
		</font>
		</div>
	</center>
</body>
</html>

在Web应用,当你通过GET或POST方式提交表单数据到Servlet时,通常涉及到HTML表单的构建以及服务器端(如Java Servlet)的数据处理。以下是简要步骤: **1. HTML表单提交:** 在HTML页面上创建一个表单,使用`<form>`标签,设置method属性为"GET"或"POST",然后添加输入字段如`<input type="text" name="username">`和`<input type="password" name="password">`,这两个字段分别对应用户输入的用户名和密码。 **GET方式示例:** ```html <form action="/servlet/Login" method="get"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit" value="登录"> </form> ``` 在GET方法参数会附加在URL后面,以?分割查询字符串。 **POST方式示例:** ```html <form action="/servlet/Login" method="post"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit" value="登录"> </form> ``` 在POST方法参数不会显示在URL,而是包含在请求。 **Servlet获取参数:** 在Servlet (`LoginServlet.java`) ,你可以使用`HttpServletRequest`对象来获取这些参数。例如,对于GET方法: ```java String username = request.getParameter("username"); String password = request.getParameter("password"); ``` 而对于POST方法,由于数据请求,你需要读取请求体: ```java // 需要添加MultipartConfigServletContainerInitializer或实现javax.servlet.Servlet3RequestWrapper request.setCharacterEncoding("UTF-8"); StringBuffer inputData = new StringBuffer(); InputStream is = request.getInputStream(); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { inputData.append(new String(buffer, 0, length)); } String postData = inputData.toString(); ``` 最后解析`postData`获取用户名和密码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值