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

标签 java servlets http-post http-get

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

除非事实证明,如果您没有在表单调用中放置“action”属性。 如果您为操作参数指定一个完全限定或部分限定的 url,一切都很好,如果您不这样做,浏览器将调用与上一个页面提交时相同的 url,如果那里恰好有查询字符串数据,您将获得该数据以及 POST 数据,并且无法区分它们。

或者有吗? 我正在查看请求对象,我看到了发布数据的来源,我只是想弄清楚 GET 数据的来源,所以我可以在发布调用中删除 GET 数据并删除发布数据如果可能,在解析之前调用 GET。

知道执行此操作的安全方法是什么吗?

让我猜猜:您从未尝试过不在表单标签中放置操作字段。 :-)

最佳答案

你是对的,我从来没有尝试过不在表单标签中放置一个 Action 字段 ;-) 而且我不会,因为正是你在说什么。 (此外,我认为它不是有效的 HTML)

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

name1=value1&name2=value2&...

虽然可能用分号代替了符号(从技术上讲,您可以在 HTTP/1.1 中做到这一点,但直到最近我才知道)

关于java - 如何从 java servlet 中的 POST 数据中分离出查询字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/459441/

相关文章:

Java无限计数信号量?

java - 以一种形式多次提交。在一份表格中提交超过 1 份。或 1 个 JSP 中的多个表单

session - 条件 tomcat 粘性 session (集群)

java - 如何从普通 Servlet 访问 Wicket WebSession

Clojure Immutant 2 服务器 Undertow;如何处理http POST?

forms - 如何获取属性的表单名称

java - 使用HttpServletResponse.setStatus后如何获取状态

java - 子类调用父类的方法

java - 为标记 LinearLayout (xmlns :tools ERROR)) 找到意外的命名空间前缀 "xmlns"

java - 使用字符串分隔符解析整数