700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > SpringMVC中文乱码问题:用CharacterEncodingFilter设置get/post请求字符集;web.xml

SpringMVC中文乱码问题:用CharacterEncodingFilter设置get/post请求字符集;web.xml

时间:2024-01-25 09:32:24

相关推荐

SpringMVC中文乱码问题:用CharacterEncodingFilter设置get/post请求字符集;web.xml

文章目录

问题:1. tomcat 8.0以前的版本get,post都有中午乱码问题2. tomcat 8.0版本以后get没有中午乱码问题,post有3. 在SpringMVC中怎么解决post请求中文乱码问题?4. CharacterEncodingFilter的`工作原理`大概是怎么样的?web.xml中用init-param设置的参数是怎么传到CharacterEncodingFilter过滤器的属性的?`翻翻源码?` 前置知识:1.编码解码2.浏览器对发起的请求的编码方式 分析:1. tomcat 8.0以前的版本get解决中午乱码问题的解决2. tomcat 8.0版本以后的不需要进行上面这部分的设置了3. SpringMVC中post的解码字符集为UTF-84. CharacterEncodingFilter的工作原理大概是怎么样的?web.xml中用init-param设置的参数是怎么传到CharacterEncodingFilter过滤器的属性的?

今天在学习SpringMVC时遇到中文乱码的问题,这里记录一下给有需要的人

本文地址:/weixin_54430656/article/details/122392223

问题:

1. tomcat 8.0以前的版本get,post都有中午乱码问题

如果你用get或者post请求将表单提交到tomcat8.0以前的版本的服务器时,你会发现get和post都有中文乱码问题

2. tomcat 8.0版本以后get没有中午乱码问题,post有

而如果你用Tomcat8.0以后版本的服务器,你会发现get的中文乱码问题解决了,而post请求的中文乱码问题还在,所以为什么get请求好了,而post没有?

3. 在SpringMVC中怎么解决post请求中文乱码问题?

4. CharacterEncodingFilter的工作原理大概是怎么样的?web.xml中用init-param设置的参数是怎么传到CharacterEncodingFilter过滤器的属性的?翻翻源码?

在SpringMVC中对post设置字符集需要在web.xml通过init-param标签对CharacterEncodingFilter过滤器设置其属性,那为什么用init-param标签设置的属性能最终传递到CharacterEncodingFilter这个类?

前置知识:

1.编码解码

对于一段01二进制串,最初使用什么字符集编码的,就需要用对应的字符集解码,就像密文用什么密钥加密,就得用什么密钥解密一样(好像在说废话)

2.浏览器对发起的请求的编码方式

对于我们用浏览器发情的get/post请求等,浏览器都会用UTF-8进行编码,然后在发送到服务端,可以打开F12,看一下

分析:

1. tomcat 8.0以前的版本get解决中午乱码问题的解决

需要到tomcat安装目录的tomcat/config目录下的service.xml文件配置对URI的解码方式,找到对应标签,写上对应画红圈部分,但是这只能解决get请求,post请求的解决看下文

URIEncoding="UTF-8"

为什么需要在这里设置这个URIEncoding,因为他默认是用 ISO-8859-1 进行解码的,tomcat官方的说明文档有相关的说明

我们可以打开tomcat的官网:

然后点击8.5版本的文档看一下,然后在修改一下浏览器上面的地址栏,把版本改到7.0,以此来跳转到7.0版本的说明文档(暂时没有找到直接进入7.0版本的入口)

/tomcat-8.5-doc/index.html

/tomcat-7.0-doc/index.html

然后按快捷键CTRL+F查找server.xml

/tomcat-7.0-doc/config/index.html

进入该页面后点击侧边的HTTP,

/tomcat-7.0-doc/config/http.html

进入该页面后继续查找URIEncoding,我们就可以查到这一行

可以看到,它已经明确指出,默认会对URI进行 ISO-8859-1解码,而我们浏览器传上来的时是用UTF-8编码的,这自然就有乱码问题了,所以需要在service.xml文件设置URIEncoding

2. tomcat 8.0版本以后的不需要进行上面这部分的设置了

tomcat 8.0版本以后的不需要进行上面这部分的设置了,因为tomcat把“UTF-8”设置为默认的了,除了手动敲个代码写个Test验证一下以外,tomcat官方的说明文档可以证实这一点,按照刚刚上面提到的查找路径,我们可以看到在tomcat 8.0版本关于URIEncoding的说明是下面这样子的

/tomcat-8.0-doc/config/http.html

所以这也就说明了为什么tomcat 8.0版本以后get请求不用再对中文进行特别设置了

不过这里只是说URI会使用UTF-8,但是其实他在对POST请求中body部分进行解析的时候用的还是 ISO-8859-1,所以POST还是会出现中文乱码的,还需要我们做一些特别的处理,下面看看SpringMVC是怎么解决的

3. SpringMVC中post的解码字符集为UTF-8

1.首先是在web.xml文件中设置CharacterEncodingFilter过滤器及其拦截路径

2.然后设置CharacterEncodingFilterencoding属性为UTF-8

<!--配置springMVC的编码过滤器--><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>forceResponseEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

4. CharacterEncodingFilter的工作原理大概是怎么样的?web.xml中用init-param设置的参数是怎么传到CharacterEncodingFilter过滤器的属性的?

(待写,干饭先)

SpringMVC中文乱码问题:用CharacterEncodingFilter设置get/post请求字符集;web.xml设置init-param是怎么传到该过滤器属性的源码解释;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。