Url字符串和POST请求中的相同请求参数

时间:2016-10-26 12:45:57

标签: html jsp httprequest

在检查查询参数和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'

我无法理解这种行为。谁能帮助我理解为什么会这样?

3 个答案:

答案 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。