servlet获得参数的问题

请求参数的来源
  1. 请求 URL 的查询串, 如 /localhost/abc/test?abc=ddd&bbb=ccc, 在问号后面的字符串
  2. POST 请求时, 如果 Content-Type = "application/x-www-form-urlencoded", 则参数来自请求内容(格式同查询串)
  对于第一种情况, 请求参数可以在任何情况下使用 getParameter 系列方法读取, 采用 ISO-8859-1 编码
  对于第二种情况, 则有点复杂, 它涉及到 ServletRequest 以下几个方法
  getParameter 系列方法
  getCharacterEncoding
  getInputStream
  getReader
  getCharacterEncoding
  一般情况下, 请求 characterEncoding 来自于 Content-Type 的 charset 参数, 如果 charset 参数未设, 则为 null
  getInputStream 和 getReader (纠正手记1的错误)
  这两个方法用于读取请求内容, 并且不能同时使用, 如果使用其中一个后再试图使用另一个, 则抛出 IllegalStateException
  getReader方法返回 BufferedReader 对象, 该对象使用 getCharacterEncoding 对字符串进行编码, 如果为 null, 则使用 ISO-8859-1
  getParameter 系列方法
  当参数来自于请求内容时, 由于要读取请求内容而用到流, 所以
  1. 当使用 getParameter 系列方法之前使用了 getInputStream 和 getReader 方法, 则不能使用 getParameter 系列方法得到请求参数
  2. 当使用 getParameter 系列方法后再使用流, 则流应该已到了结尾, 此时可以得到请求参数
  3. 使用 getCharacterEncoding 对参数编码, 如果为 null, 则使用 ISO-8859-1
  4. 不直接使用 getInputStream 或 getReader 方法来得到流用以解析参数, 因为这会影响状态, 造成 getInputStream 或 getReader 方法抛出 IllegalStateException
[color=red]
当使用 getParameter 系列方法后再使用流时,可能会报EOF异常,这时可以把getParameter 系列方法放在流后面试试。[/color]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值