您的位置:首页 > 理论基础 > 计算机网络

servlet如何获取post请求的参数

2018-03-22 14:45 274 查看
通常我们利用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的规范,可以正常获取想要的参数值了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐