从一个 bug 说起 request.getQueryString() 和 request.getParameter()的区别
最近有一个同事,遇到了一个奇怪的问题。request.getParameter() 获取不到值,request.getQueryString() 可以获取到值。
request.getParameter() 获取到乱码,request.getQueryString() 不乱码。request.getQueryString() 乱码,request.getParameter() 不乱码。
总之,这个问题并不是所有的接口都这样,而是时而好时而坏!
想要解决这个问题,你需要彻底的从源码看起。request.getQueryString() 不会解码属性的名字和值,然后可以使用 URLDecoder.decode() 可得到正确内容。request.getParameter() 方法在获取参数时,已默认使用了 URL 解码,如果你要处理乱码,可以使用 new String(str.getBytes(“iso-8859-1″),”UTF-8”) 的形式进行转码。
有时候,http 请求中的 + 号被替换为空格,即 xttblog=xtt+blog,那么你在后台通过 request.getParameter() 获取的值可能就是 xttblog=xtt blog,而 request.getQueryString() 却可以得到正确的结果。这就是值中的加号,被 url 解码了。这个问题早在 2001年,就有人指出来了,并给 JDK 上报了 BUG。所以在使用 get 的时候,一定要注意转码。

: » 从一个 bug 说起 request.getQueryString() 和 request.getParameter()的区别
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/java/252165.html