spring中页面中文乱码
这两天写完的一个项目在本地测试完之后准备发布到服务器上去,发布到服务器之后我发现页面上所有的静态文字都乱码了,可我在本地上测试的时候都是可以的于是我就在网上找的方法,找了前几个方法还是不可以最后在web.xml重新配置的一个Filter才可以。
刚开始发布的时候出现乱码,我以为是服务器的tomcat配置有问题因为我本地是可以正常使用的所以我就在网上搜是否需要修改tomcat 的配置,然后我就去改 tomcat下的config下的service.xml 文件要添加一个字符集 这是原本的配置
// An highlighted block
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" />
然后在后面添加一个URIEncoding=“utf-8” 添加完之后这样的
// An highlighted block
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8"/>
然后我加完之后并没有什么用然后我去搜感觉还是tomcat配置的有些问题我就又去搜还需要改什么地方,我然后就又找到一个说是需要改然后就搜到说还要改tomcat下的bin下的 catalina.bat文件,也说要添加一个字符集,我就去改了,这是原本的配置
// An highlighted block
set "JAVA_OPTS=%JAVA_OPTS%"
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
然后给这两个属性后面都加上UTF-8 的字符集
// An highlighted block
set "JAVA_OPTS=%JAVA_OPTS%" -Dfile.encoding=UTF8
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%" -Dfile.encoding=UTF8
加完之后也是不可以,我就很烦。然后就在想是不是idea 打包的时候出现了问题,因为在本地测试本来可以的然后打包之后放到服务器之后不可以了我就有去找是不是idea要配置什么字符集打开idea 之后 在File导航中选择settings
然后在搜索页搜索File Encodings或者选择Editor下的File Encodings进入图下页面
将图片所指向的位置的字符集改为UTF-8,分别是全局的字符集(Global Encoding),项目的字符集(Project Encoding),中间部分的子项目的字符集和顶部的文件默认属性的字符集都设置为 UTF-8 之后再去打包。
然而我试了之后还是不管用我都快绝望了,可能也是我太垃圾了我冷静之后我想是不是我项目中的问题,我就找到到的web.xml中设置的文件字符集的地方,原本是配置spring的CharacterEncodingFilter的后台我给改成自己写的了
原本的
<filter>
<filter-name>EncodingFilter</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-class的内容改成自己写的类
改过之后的
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.test.config.EncodingFilter</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>
在项目中添加一个EncodingFilter类如下(我把这个文件放到的GitHub上可以下载)
import javax.servlet.http.HttpServlet;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
public class EncodingFilter extends HttpServlet implements Filter{
private FilterConfig config = null;
private String targetEncoding = "GBK";
public void init(FilterConfig filterConfig){
this.config = filterConfig;
this.targetEncoding = config.getInitParameter("encoding");
}
public void destroy(){
config = null;
targetEncoding = null;
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain){
ServletRequest request = (ServletRequest) servletRequest;
try{
request.setCharacterEncoding(targetEncoding);
filterChain.doFilter(servletRequest, servletResponse);
} catch (Exception ex){
ex.printStackTrace();
}
}
}
然后再次发布页面就不乱码了,这个是这个EncodingFilter 文件的下载地址
https://github.com/shaotengyi/filter
第一次写博客,之后还是会记录一些我遇到的一些小问题,或者整理一些面试题之类的,小知识小项目什么的。如果有疑问可以在下面评论我会经常看的