当您在 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/