在检查查询参数和POST请求的一些基础知识时,我发现了一个令人困惑的事情。 下面是index.jsp
中的代码部分<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Index Page</title>
</head>
<body>
<form name = "testForm" action="index.jsp?username=uname1" method = "POST">
Username : <input type="text" name="username" value=""/>
<input type="submit" value="Submit">
</form>
<%
String username = request.getParameter("username");
out.println("Username = " + username);
%>
</body>
</html>
运行此代码时,当我在textbox username中输入值为'uname2'并单击Submit按钮时,输出显示为'uname1'。
之后我将'testForm'形式的方法更改为'GET',然后在服务器上重新运行该文件。 当我输入用户名'uname2'并单击提交按钮时,我输出为'uname2'
我无法理解这种行为。谁能帮助我理解为什么会这样?
答案 0 :(得分:0)
因为可以使用GET,POST或两者的组合提交具有相同名称的多个参数。 它们的应用顺序完全是任意的。
查看Servlet API文档,您将看到以下内容:
getParameterValues
java.lang.String [] getParameterValues(java.lang.String name)
返回包含给定所有值的String对象数组 请求参数,如果参数不存在,则返回null。如果 参数具有单个值,该数组的长度为1.
参数:name - 包含参数名称的String 请求值返回:包含的String对象数组 参数的值参见:getParameter(java.lang.String)
方法getParameterValue(String name)是为方便起见而提供的:
的getParameter
java.lang.String getParameter(java.lang.String name)
返回值 请求参数作为String,如果参数不是,则返回null 存在。请求参数是随请求一起发送的额外信息。 对于HTTP servlet,参数包含在查询字符串或中 发布表格数据。 您应该在确定时使用此方法 参数只有一个值。如果参数可能有更多 如果不是一个值,请使用getParameterValues(java.lang.String)。
如果将此方法与多值参数一起使用,则为该值 返回等于返回的数组中的第一个值 getParameterValues。强>
http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html
答案 1 :(得分:-1)
因为在这种情况下getParameter()是从你的GET中获取它,而不是你的POST。
请参阅,您的操作是明确指定用户名为uname1,然后您的POST说uname2,我不确定java如何决定接受哪个参数,从头到尾,但你可以只是删除帖子表单的查询尝试参数,它应该可以正常工作。
答案 2 :(得分:-1)
默认情况下,http使用GET方法,在这里你明确提到操作中的用户名并尝试使用POST发送它们。我认为http是通过GET方法发送数据而不是POST。