如何从java servlet中的POST数据中分离出查询字符串参数

时间:2009-01-19 22:28:53

标签: java servlets http-post http-get

当您在servlet中获得doGet或doPost调用时,您可以使用getparameterxxx()在一个简单的位置获取查询字符串或帖子数据。
如果调用是GET,则从url / query字符串中获取数据 如果呼叫是POST,您将获得所有已解析的发布数据。

除非事实证明,如果您未在表单调用中添加“action”属性。 如果为action param指定一个完全限定或部分限定的url,一切都很好,如果你不这样做,浏览器将调用与上一页提交相同的url,如果恰好有查询字符串数据那里,你会得到它和POST数据,并且没有办法区分它们。

还是有吗? 我正在查看请求对象,我看到后期数据的来源,我只是想弄清楚GET数据的来源,所以我可以在post调用时擦除GET数据并删除post数据如果可能的话,在解析它之前进行GET调用。

知道安全的方法是什么?

并且猜测:你从未尝试过在表单标签中放置动作字段。 : - )

4 个答案:

答案 0 :(得分:3)

你是对的,我从来没有尝试过在表格标签中放置一个动作字段;-)但我不会,因为你正在谈论的是什么。 (另外,我认为这不是有效的HTML)

我不知道区分GET和POST参数的任何“干净”方法,但您可以使用getQueryString()的{​​{1}}方法访问原始查询字符串,并且您可以访问使用HttpServletRequest getInputStream()方法的原始POST数据。 (我在这里专门看一下Tomcat API文档,虽然我认为它们都是标准Servlet API的一部分)然后你可以根据需要分别解析POST数据和GET数据。它们(或通常应该)都以相同的方式格式化,即

ServletRequest

虽然可能用分号代替了分号(你可以在技术上用HTTP / 1.1做,但我直到最近才知道)

答案 1 :(得分:2)

在HTML中,操作为REQUIRED,因此我猜客户端的行为会有所不同。

答案 2 :(得分:1)

HttpServletRequest.getParameterxxx()方法不区分GET和POST参数。如果你真的需要区分它们,你需要使用getQueryString()为GET参数手动解析它们,并使用getInputStream()/ getReader()为POST数据。

答案 3 :(得分:0)

我会写一个ServletFilter并装饰请求对象以清理一些东西(使用上面提到的Hilton建议)。这是classic decorator pattern in an intercepting filter