您的位置:首页 > 其它

服务器解析get/post请求参数编码处理

2015-07-15 13:00 169 查看

  服务器解析get/post请求编码

1. get请求方式

当客户端通过get请求发送数据给服务器时,由于tomcat的默认编码是ISO8859-1,即客户端的JSP页面的charset无论是UTF-8还是GBK,服务器都都会将数据重新编码为ISO8859-1格式,所以这就需要我们在使用request.getParameter()获取数据后再转编译成utf-8。

String userName=request.getParameter(“userName”);

//这时候打印出来的userName会乱码

userName= newString(userName.getBytes(“iso-8859-1”), “utf-8”);

//这时候打印出来的userName会是页面输入的值

2. post请求方式

  当客户端通过post请求(enctype="application/x-www-form-urlencoded")发送数据给服务器时,可以在使用request.getParameter()获取请求参数之前先通过request.setCharacterEncoding()来指定编码,然后再使用reuqest.getParameter()方法来获取请求参数。

也就是说,如果是post请求,可以指定服务器编码!但如果没有指定编码,那么还是默认的ISO-8859-1编码。

request.setCharacterEncoding(“utf-8”);

String name =request.getParameter(“name”);

//打印出来的userName会是页面输入的值

但是每个接口中都要加request.setCharacterEncoding(“utf-8”),这比较麻烦,且代码冗余。有一个更好的解决办法:在web.xml中配置filter,具体来说是org.springframework.web.filter.CharacterEncodingFilter(在spring-web-xxx.RELEASE.jar包中)。见如下xml配置:

<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上面那两个初始化参数是CharacterEncodingFilter类的两个属性,名字不用死记。

如果在web.xml中配置了此Filter,则request.getCharacterEncoding()得到的值是utf-8,否则得到的值是null(为什么不是ISO8859-1呢?待解释),在request.setCharacterEncoding(“utf-8”)之后,request.getCharacterEncoding()才能得到utf-8。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: