java url 参数 编码格式_Java Web应用请求参数编码

我们知道,当拼写要跳转的url中含有中文时,一般地需要转码处理,才能到服务器端正确的接收并处理,这是客户端与服务器端通讯时对数据格式的规约。

一般地,使用encodeURIComponent或者encodeURI来处理中文参数(这两者的区别,以及和escape的区别后面再说),编码后,在客户端,成为ISO-8859-1数据格式,一般表现在URL上为%XX这种形式的。

var url = "hello.do?person=" + encodeURIComponent("小明");

window.location.href= url;

“小明”经过encodeURIComponent后变成"%E5%B0%8F%E6%98%8E"。

>> encodeURIComponent("小明")

"%E5%B0%8F%E6%98%8E"

>> encodeURIComponent("中国")

"%E4%B8%AD%E5%9B%BD"

>> encodeURIComponent("abc/def")

"abc%2Fdef"

>> encodeURIComponent("abc/def+-*/345!@#$%^&*(){}[]\|;':,./<>?\"")

"abc%2Fdef%2B-*%2F345!%40%23%24%25%5E%26*()%7B%7D%5B%5D%7C%3B'%3A%2C.%2F%3C%3E%3F%22"

到服务器后,服务器端接收请求参数,然后进行相应处理。

不同的中间件,对于HTTP请求参数的处理不同,一般负责接收参数值,并传递给应用服务器(在应用程序请求参数值时)。

为了处理不同情形以及内部处理的方便,最开始接收与最终传递到应用服务器之间,中间件可能做了一些处理,比如编码成特定格式等。

在Java中,通常用getParameter获取客户端传递的参数(ajax与跳转的区别,以及与getAttribute的区别,getAttribute是服务器与服务器内部之间的数据传递),通常的形式为:

String person = request.getParameter("persion");

那么,这样获取,编码因素都考虑进去了么,实际上,如果没有指定使用中间件的HTTP请求编码格式,会采用相应中间件的默认HTTP请求编码格式。对GET方式和POST方式的请求,设置HTTP请求编码格式的方式是不一样的。

按我个人理解,中间件HTTP默认请求编码,指的是它默认以什么编码方式识别从客户端传递来的数据。

对于POST方式,一般地,在获取所有请求参数之前,调用request.setCharacterEncoding("ISO-8859-1")即可指定post内容编码格式,然后再根据后面需要,转换成需要的编码格式的串。

request.setCharacterEncoding("ISO-8859-1");

String person= request.getParameter("person");

person= new String(person.getBytes("ISO-8859-1"), "UTF-8");

对于GET方式,

tomcat默认接收HTTP请求参数编码格式就是ISO-8859-1,当然也可以在配置文件中修改成其他,位置为:server.xml文件中,相应的端口的Connector的属性:URIEncoding=UTF-8(一般不这样修改,如果本来就是需要接收为ISO-8859-1,在代码中统一处理编码)

maxThreads="150" minSpareThreads="25" maxSpareThreads="75" URIEncoding=UTF-8

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" />

jetty默认接收HTTP请求参数编码格式是UTF8,一般在JVM启动参数中配置,形如:

-Dorg.mortbay.util.URI.charset=iso8859-1

GET方式下实际请求参数,代码如下:

String person = request.getParameter("person");

person= new String(person.getBytes("ISO-8859-1"), "UTF-8");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值