Servlet在doPost方法中获取GET和POST的参数

时间:2017-01-01 03:26:27

标签: java servlets

我的问题是,当我尝试使用POST访问request.getParameter("name")变量时,它运行正常。但在某些情况下,当POST请求到达我的应用程序时,我还需要从查询字符串中获取GET参数。

据我所知,使用getParameter,您只能访问当前请求的参数,但是,就像我说的那样,我也需要在{{{}}内获取GET个参数1}}方法。

有没有办法在不解析查询字符串的情况下获取doPost参数?

4 个答案:

答案 0 :(得分:2)

如果您在查询字符串和发布的表单数据中使用相同名称的参数,请使用getParameterValues()

实施例: -

String fromQuery = request.getParameterValues("name")[0];
String fromForm = request.getParameterValues("name")[1];

答案 1 :(得分:1)

getParameter()方法可以返回(如果可能)GET和POST参数,因为它在GETPOST之间透明地工作。您不需要做任何明确的工作来获取GET参数。您可以将getParameter用于查询参数和POST参数。

但你应该这样做吗? - 它被认为是一种糟糕的设计实践,特别是如果要发送敏感信息。

看一下这个答案:

答案 2 :(得分:1)

我认为你在这里有困惑。您可以使用相同的getParameter(..)检索所有请求参数(在GET或POST或其他中),具体取决于请求的类型。如果它是GET请求,您可以检索所有GET参数。

如果是POST请求,您可以检索所有POST参数。您可以使用getParameter(...)获取参数。你一次提出一个请求。如果在html或JSP文件中发出POST请求,则使用doPost方法接收所有参数。此时,GET请求中没有任何内容。然后,您发出GET请求,检索doGet方法中的所有参数。此时,POST中没有任何内容。请记住,HTTP请求是无状态的。

答案 3 :(得分:0)

要完成@Rei答案,请查看以下代码:

您的表格

<form action="?nom=nom1">
<input type="hidden" name="nom" value="nm2"/>

您的doPost

System.out.println(request.getParameter("nom"));
        
String s = "";
for(String ss : request.getParameterValues("nom")) {
    s += "|" + ss;
}
System.out.println(s);
System.out.println(request.getParameterMap().get("nom"));

将打印什么

nom1
|nom1|nm2
[Ljava.lang.String;@c7068db

ps:感谢Julien的代码和测试