gpt4 book ai didi

android - HttpServletRequest 从我的 httppost 中没有得到任何参数

转载 作者:行者123 更新时间:2023-11-28 22:14:40 24 4
gpt4 key购买 nike

我有一个好奇的问题。我在 Android 中有一个 HttpPost 请求,看起来像这样:

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(getString(R.string.url));

//This code does not work
HttpParams params = new BasicHttpParams();
params.setParameter("type", "20");
post.setParams(params);

try {
HttpResponse response = client.execute(post);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

在我的服务器端,我有一个 servlet 用于监听请求并解析参数:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Enumeration en = request.getParameterNames();
while (en.hasMoreElements()){
System.out.println(en.nextElement());
}
}

当我执行这段代码时,servlet 根本看不到任何参数。但是如果我用这段代码替换整个“参数” block :

//This code works
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5);
nameValuePairs.add(new BasicNameValuePair("type", "20"));

try {
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

我的 servlet 可以解析参数。这不是问题,我只是要使用实体,但我的问题是,为什么我的 servlet 不能从第一个代码块中获取参数? setParams 有什么问题?如果我将它们设为实体,为什么 servlet 可以看到参数?

最佳答案

在 HTML 中,当我们有类似“http://host/path?user=uname&passwd=pass”的内容时,我们将问号后面的部分 (user=uname&passwd=pass) 称为“表单数据”。“表单数据” "可以附加到 URL 末尾的问号后(如上),用于 GET 请求,或在单独的行上发送到服务器,用于 POST 请求。“表单数据”被拆分为参数。使用 GET 时参数之间用 & 分隔。

在我们的例子中,HttpPost 和 HttpGet 类扩展了实现 setParams 方法的 AbstractHttpMessage。此方法与 GET 和 POST 相同,但只对 GET 起作用!在 GET 的情况下,参数放在 URL 中。在 POST 的情况下,您需要将参数的实体设置为“单独的行”。

在服务器端使用 servlet 时,getParameters 足够聪明,可以找到 GET 和 POST 的参数。

这就是为什么在服务器端我们不需要更改获取参数的代码!

希望我有所帮助!

关于android - HttpServletRequest 从我的 httppost 中没有得到任何参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6732893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com