servlet如何获取post请求的参数

通常我们利用request.getParameter(参数名称)来获取url上面或者ajax.data提交上来的参数,但是例如用httpClient中的httpPost.setEntry()的方法提交的参数是没有参数名称的, 使用request.getParameter(参数名称)便无法获取参数值,我们可以用request.getInputStream()(io流)方法来获取body中的内容,获取的是一个json串,再使用JSONObject.fromObject(json串);即可解析到里面各个参数的值。

   假设我们获取的内容既有url提交的参数,也有httpClient中的httpPost.setEntry()的方法提交的参数,这个时候该怎么获取 参数的值呢,

   正常思路应该是:先使用request.getParameter(参数名称)获取url上面的参数,

   再使用request.getInputStream()(io流)获取body里面的无参数名称的内容

   此时会发现使用io流获取的参数内容是null

   原因是:servlet规范:同时满足下列条件,则请求体中的数据将被填充到Parameter集合中

   1:是一个http/https请求

   2:请求方法是post

   3:请求类型(content-Type)是application/x-www-form-urlencoded

   4: Servlet调用了getParameter系列方法

   如果上述条件没有同时满足,则相关的表单数据不会被设置进request的parameter集合中,

   相关的数据可以通过request.getInputStream()来访问。反之,如果上述条件均满足,

   相关的表单数据将不能再通过request.getInputStream()来读取。

   根据这个规范的说明,当我们在调用request.getParameter(参数名称)的方法时,

   通过httpClient中的httpPost.setEntry()提交的数据(请求体)被填充到了parameter集合中了,

   所以后面的通过request.getInputStream获取数据流时就为空。

   最终这个问题的解决方案是把request.getParameter(参数名称);

   放到request.getInputStream之后,这样就回避了servlet的规范,可以正常获取想要的参数值了。

评论 4 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

menglixiazhiweizhi

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值