springmvc 处理http get/post请求中文乱码的问题
2016-10-18 00:00
756 查看
web.xml中的编码设置
<filter>
<filter-name>CharacterEncoding</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>CharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但这个设置是针对POST请求的,tomacat对GET和POST请求处理方式是不同的,要处理针对GET请求的编码问题,则需要改tomcat的server.xml配置文件,如下:
改为:
最关键的点在这里:如果你是更改的tomcat安装目录的server.xml配置文件,那么在用eclipse运行项目时会发现配置没起作用,其实是因为eclipse在运行项目时是用的eclipse中配置的tomcat,那么问题就好解决了,打开eclipse中的tomcat配置文件,如下,修改即可。
注:配置useBodyEncodingForURI="true"后,可以解决普通get请求的中文乱码问题,但是对于通过ajax发起的get请求中文依然会乱码,请把useBodyEncodingForURI="true"改为URIEncoding="UTF-8"即可。
这些配置好了之后,你可能发现入库后表里的中文字段还是乱码(以mysql为例):
1、首先保证表本身的编码格式为UTF-8
如:CREATE TABLE `osf_photos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(45) NOT NULL,
`album_id` int(11) NOT NULL,
`ts` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`desc` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
2、spring在配置数据库连接时,对jdbc.url的尾部添加useUnicode=true&characterEncoding=utf-8
如:jdbc.url=jdbc:mysql://localhost:3306/osf?useUnicode=true&characterEncoding=utf-8
<filter>
<filter-name>CharacterEncoding</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>CharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但这个设置是针对POST请求的,tomacat对GET和POST请求处理方式是不同的,要处理针对GET请求的编码问题,则需要改tomcat的server.xml配置文件,如下:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
改为:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>
最关键的点在这里:如果你是更改的tomcat安装目录的server.xml配置文件,那么在用eclipse运行项目时会发现配置没起作用,其实是因为eclipse在运行项目时是用的eclipse中配置的tomcat,那么问题就好解决了,打开eclipse中的tomcat配置文件,如下,修改即可。
注:配置useBodyEncodingForURI="true"后,可以解决普通get请求的中文乱码问题,但是对于通过ajax发起的get请求中文依然会乱码,请把useBodyEncodingForURI="true"改为URIEncoding="UTF-8"即可。
这些配置好了之后,你可能发现入库后表里的中文字段还是乱码(以mysql为例):
1、首先保证表本身的编码格式为UTF-8
如:CREATE TABLE `osf_photos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(45) NOT NULL,
`album_id` int(11) NOT NULL,
`ts` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`desc` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
2、spring在配置数据库连接时,对jdbc.url的尾部添加useUnicode=true&characterEncoding=utf-8
如:jdbc.url=jdbc:mysql://localhost:3306/osf?useUnicode=true&characterEncoding=utf-8
相关文章推荐
- 如何解决POST请求中文乱码问题,GET的又如何处理呢?
- http 的post与get方法 以及处理中文乱码问题
- 总结:SpringMVC 中 GET 和 POST 方式请求中的中文乱码问题
- GET、POST请求处理中文问题(用HttpURLConnection模拟发送请求)
- SpringMVC-Post/Get请求中文乱码问题
- 解决问题:在使用springmvc的web.xml配置乱码拦截器之后接收的get或者post请求中文还是乱码
- HttpClient get和post请求的示例代码以及防乱码处理
- http协议4---GET方式和POST方式获取表单数据举例3(统一方式获取,解决中文乱码问题)
- Spring MVC 3 表单中文提交post请求和get请求乱码问题的解决方法
- Http Post请求提交json格式数据工具类,解决请求参数中文乱码问题
- Tomcat在处理GET和POST请求时产生的乱码问题
- SpringMVC 解决GET请求时中文乱码的问题
- http通信get,post 中文乱码问题原因分析
- Struts2中解决POST请求和GET请求中的中文乱码问题
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- eclipse httpGet 请求返回中文乱码的问题
- SpringMVC: 处理PUT和DELETE请求时报错:HTTP Status 405 - JSPs only permit GET POST or HEAD.
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- HTTP POST请求中文乱码问题解决
- post、get处理中文乱码问题