Java 对于post和get操作,getParameter的行为是什么?

Java 对于post和get操作,getParameter的行为是什么?,java,servlets,http-post,http-get,request.querystring,Java,Servlets,Http Post,Http Get,Request.querystring,我有一个带有URL查询字符串的Javaservlet,其指令如下 http://hostname/servet?param1=value1&param2=value2 public void doPost(HttpServletRequest req, HttpServletResponse res) { try { doGet(req, res); } catch (Exception e) { e.pr

我有一个带有URL查询字符串的Javaservlet,其指令如下

http://hostname/servet?param1=value1&param2=value2
public void doPost(HttpServletRequest req, HttpServletResponse res) {
        try {
            doGet(req, res);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

public void doGet(HttpServletRequest req, HttpServletResponse res) {
        try {
            String sParam1 = req.getParameter("param1")
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
我也像这样构造doPost/doGet

http://hostname/servet?param1=value1&param2=value2
public void doPost(HttpServletRequest req, HttpServletResponse res) {
        try {
            doGet(req, res);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

public void doGet(HttpServletRequest req, HttpServletResponse res) {
        try {
            String sParam1 = req.getParameter("param1")
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
我可以通过getParameter()访问每个queryString参数以执行GET操作。但是,当我尝试通过getParameter()为POST操作访问同一查询字符串时,返回的值为NULL


因此,我想确认POST和GET操作的getParameter的这种行为。即getParameter不为POST操作返回queryString参数?在POST操作的情况下,我是否需要手动解析查询字符串来处理它们?

对于GET方法,参数作为URL(查询字符串)的一部分发送,对于POST方法,参数作为正文的一部分发送,这就是为什么在POST情况下无法获取参数的原因,因为它们是在正文中而不是在URL中搜索的


在POST操作的情况下,是否需要手动解析查询字符串来处理它们


是的,如果您发送的是查询字符串,但使用的是方法POST,则必须自己解析查询字符串,除非您遵守标准并在正文而不是URL中发送参数。

对于GET方法,参数作为URL(查询字符串)的一部分发送,因为POST方法参数是作为正文的一部分发送的,这就是为什么在POST情况下您无法获取参数的原因,因为它们是在正文中而不是在URL中搜索的


在POST操作的情况下,是否需要手动解析查询字符串来处理它们


是的,如果您正在发送查询字符串,但使用方法POST,则必须自己解析查询字符串,除非您遵守标准,并在正文而不是URL中发送参数。

我可以看出它是相关的,但我正在寻找与管理servlet参数相关的对这个问题的具体回答。链接很有帮助,“我是否需要在POST操作中手动解析查询字符串来处理它们”,在POST中,它们不会附加到URL,因此无法解析。啊。。所以它被忽略了?servlet容器的旧实现是否返回了querystring#这个问题被标记为重复,但我不同意。这里的相关问题没有明确回答我关于getParameter的doGet和doPost行为以及是否仍然可以从POST事务访问querystring的问题。我可以看出它是相关的,但是我正在寻找一个关于管理servlet参数的具体回答。链接很有帮助,“我是否需要在POST操作中手动解析查询字符串来处理它们”,在POST中,它们不会附加到URL,因此无法解析。啊。。所以它被忽略了?servlet容器的旧实现是否返回了querystring#这个问题被标记为重复,但我不同意。这里的相关问题没有明确回答我关于getParameter的doGet和doPost行为以及是否仍然可以从POST事务访问querystring的问题。已请求重新打开。我已更新了我的问题,请随时查看您的答案。getParameter是否为post操作检索过querystring值?我正在处理一些非常旧的代码,最近它停止了工作。没有指定如果使用getQueryString()并且没有使用GET方法会发生什么情况,我猜您会得到一个空值,但是请尝试一下,也许我错了。我问有关使用getParameter的POST行为的原因是我正在使用IBM JVM,而较旧的版本实际上是通过getParameter从帖子中获取Querystring参数,最近的版本(ie 1.6)现在强制执行与Oracle(nee Sun)JVM一致的规则。也许IBM的JVM是一个bug,或者只是不符合要求。@giulio:我猜它可能是不符合要求的。这些实现者中的每一个都在规范之上添加了自己的特性。我已经更新了我的问题,请随意查看您的答案。getParameter是否为post操作检索过querystring值?我正在处理一些非常旧的代码,最近它停止了工作。没有指定如果使用getQueryString()并且没有使用GET方法会发生什么情况,我猜您会得到一个空值,但是请尝试一下,也许我错了。我问有关使用getParameter的POST行为的原因是我正在使用IBM JVM,而较旧的版本实际上是通过getParameter从帖子中获取Querystring参数,最近的版本(ie 1.6)现在强制执行与Oracle(nee Sun)JVM一致的规则。也许IBM的JVM是一个bug,或者只是不符合要求。@giulio:我猜它可能是不符合要求的。这些实现者中的每一个都在规范之上添加了自己的特性。