2014-04-14 25 views
0

我有以下形式的HTML页面为什么url在GET请求中没有按预期构建?

<form name="input" action="sayHello1.jsp?param1=test1" method="get"> 
Username: <input type="text" name="user"> 
<input type="submit" value="Submit"> 
</form> 

我在文本框中输入值“测试”并提交。

我希望看到在浏览器提交的URL为

http://localhost:8080/helloWorld/sayHello1.jsp?param1=test1&user=test 

,但我看到的网址为

http://localhost:8080/helloWorld/sayHello1.jsp?user=test 

为何如此?

+0

您使用哪种浏览器?这与Java无关。 –

+0

我正在使用chrome – emilly

+2

无论如何我都会使用隐藏值,但这并不能回答问题。 –

回答

1

窗体的实现似乎是重写查询字符串(不合并它)。要获得所需的行为,请在表单中添加<input type="hidden" name="param1" value="test1">,并且不要尝试向操作网址添加值。

根据this answer,我们应该期待这种行为。

因此,您的浏览器将垃圾清除您的URI中现有的“?...”部分,并根据您的表单将其替换为新的部分。

+0

但是这仅适用于Get请求不适用于POST。对? – emilly

+0

对。我认为Sotirios的回答(以及说明和答案中的答案)在这一点上是明确的。 – PaulProgrammer

2

HTML specification状态

当窗体元件形式从一个元素提交 (通常为按钮)提交,任选与脚本提交标志置位,该 用户代理必须运行以下步骤:

[...]

  • 让查询是重使用 application/x-www-form-urlencoded编码算法编码表单数据集,解释为 US-ASCII字符串。

  • 设目的地是一个新的URL,它是等于所不同的是 其部件的动作是由查询替换(添加U + 003F QUESTION MARK字符(?)如果合适的话)。

基本上,它取代了现有的查询串与来自形式参数产生一个新的。

您的浏览器与规格相关。

+0

+1。有趣的是,HTML 4规范说*如果方法是“get”并且动作是一个HTTP URI,那么用户代理将采取action的值,追加一个'?'然后附加表单数据集,使用“application/x-www-form-urlencoded”内容类型进行编码。*如果该操作已经包含查询字符串,那么显然会导致错误的URL,并且我猜测该行为在这种情况下是不确定的。 HTML5规范更清晰。 –

+0

但是有了post请求,我看到了正确的url,即“http:// localhost:8080/helloWorld/sayHello1.jsp?param1 = test1” – emilly

+1

@ user3222249如果你关注这个链接,GET和POST有不同的行为。对于POST,浏览器保持原样。 –

相关问题