我有一个奇怪的问题: 当我们通过POST提交html表单时,我们所有的参数都会转到请求正文,如果它是GET提交:params转到URL中的queryString。
但我们无法停止,例如我们可以发送带有params的POST和URL中的queryString。这是问题,tomcat解析请求和make org.apache.coyote.Request对象 - 来自queryString和body的所有参数都转到ParameterMap,我无法检测参数的来源。我可以从中获取queryString并解析params,但我无法检测到这个参数是否在体内。
示例:
1)
<form method="POST" action="someUrl/?a=1&a=2">
<input type="hidden" name="a" value="1"/>
<input type="hidden" name="a" value="2"/>
...
</form>
参数图将有两个值1,2,没有任何来自它们的信息。
2)
<form method="POST" action="someUrl/?a=1&a=2">
...
</form>
参数图也将有两个值1,2,它们在身体中没有任何信息。
我应该重写tomcat的请求解析逻辑,包装请求等吗?如果应该 - 我想我需要一本手册。任何想法,猜测。谢谢。
答案 0 :(得分:1)
Tomcat期望参数可以来自查询字符串或请求正文,因此它会将其合并为您而不必在两者中进行搜索。
但是如果你真的想允许非标准使用参数,你可以使用request.getQueryString()
获取查询字符串(并解析它以查找请求字符串参数)。
您可以使用request.getReader()
单独阅读请求正文,然后解析它以查找正文参数。
使用ParameterMap是标准用途的帮助,但没有任何东西强迫你实际使用它。