Tomcat版本或配置引起的乱码,js乱码及output乱码终极解决方案
前言
今天将Tomcat6版本的很古老的servlet项目迁移到Tomcat8下,遇到了2个问题,第一个问题是再IE浏览器下能正常访问,但是在谷歌或360急速模式下不能正常加载css文件,出现报错。第二个问题就是js乱码和java out.print 输出的乱码
提示:以下是本篇文章正文内容
一、不能正常加载css文件?
首先用F12调试后出现以下错误***Resource interpreted as Stylesheet but transferred with MIME type text/html***
发现这个错误之后就上网上搜解决方案,幸运的是我很快就找到了有效方案,原因是由于在过滤器中强制将所有请求的类型都赋值为text/html导致。
未修改前过滤器代码
可以看到这里已经被强制赋值了。
修改后过滤器代码
从请求中获取文件的类型然后把获取到的文件类型再行赋值
即把
response.setContentType("text/html; charset=utf-8");
修改为
String conType=request.getHeader("Accept")==null?"text/html":request.getHeader("Accept").toString();
response.setContentType(conType+"; charset=utf-8");
问题解决。参考的资料
二、JS乱码,这种乱码基本就是Tomcat配置引起的乱码,检查以下4个部分
1.tomcat目录conf下server.xml
<Connector URIEncoding="utf8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
2.tomcat目录bin/catalina.bat,增加一行
set “JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% -Dfile.encoding=UTF-8”
3.tomcat目录修改conf/web.xml,在标签中 增加fileEncoding,如下:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<!-- 增加内容 -->
<init-param>
<param-name>fileEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<!-- 增加内容 end -->
<load-on-startup>1</load-on-startup>
</servlet>
4.是js文件的编码
我的错误是第三步。
参考资料
2. out.print 输出的乱码
这个问题比较简单,在过滤器中检查以下,是否有这句
response.setCharacterEncoding(“utf-8”);
代码如下:
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
request.setCharacterEncoding(encoding);
response.setContentType("text/html; charset=utf-8");
String conType=request.getHeader("Accept")==null?"text/html":request.getHeader("Accept").toString();
response.setContentType(conType+"; charset=utf-8");
/**设置字符集*/
request.setCharacterEncoding(encoding);
//需要有这句,注意是response
response.setCharacterEncoding("utf-8");
总结
以上就是今天要讲的内容