Tomcat版本或配置引起的乱码,js乱码及output乱码终极解决方案及Resource interpreted as Stylesheet but transferred with MIME ty


前言

今天将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");

总结

以上就是今天要讲的内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值