服务器解析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。
相关文章推荐
- UNIX/Linux下C语言的学习路线
- 前后端交互乱码问题处理
- 序列化
- git 遇到fatal:multiple stage entries for merged file处理办法
- webstorm 打开多个项目,自动保存
- 委托和数据源
- log4cpp 在cef 项目中的应用
- Duanxx的C++学习 : 数字转换String
- WERTYU题目
- [LeetCode] Search Insert Position
- git命令使用
- Linux 文件系统
- Linux 文件系统
- Linux 文件系统
- Linux 文件系统
- swift2 operators
- vim多行增加缩进
- HTML4和HTML5之间10主要差异
- 使用shell分页读取600万+的MySQL数据脚本
- win8 win10 安装msi 提示2502、2503的错误代码