现象描述
出现了以下的问题:
- 同样的代码在windows下运行,同样的tomcat,是没有任何问题的;
- 去掉我的filter过滤器,布局也是没有问题的;
- 谷歌浏览器中source一看,也都是加载了的;
- 谷歌浏览器中,preview一看,预览中代码显示不完整;
原因分析
一开始走错了方向,一直以为是ubuntu中哪里没设置好,折腾了半天,后来才发现,其实问题已经非常之明确了。在F12中打开调试器,在source下,看见jsp页面中有报错。
Resource interpreted as Stylesheet but transferred with MIME type text/html:
好吧,再回去看自己的代码,果然,在我的filter中有一句:
resp.setContentType("text/html;charset=UTF-8");
问题就出在这里了,在过滤器中,我把所有的东西在经过过滤器以后,都设置成了"text/html"格式,这显然是不对的。
解决方法
将下面这句代码
resp.setContentType("text/html;charset=UTF-8");
修改成:
if(uri.contains(".jsp")) {
resp.setContentType("text/html;charset=UTF-8");
}
意思就是,除了jsp页面要在响应中设置类型位"text/html"外,别的,比如css和js以及一些图片等别的格式,默认为原类型,不做修改。
总结
其实问题很简单,总结起来还是浏览器的控制台用的不够熟悉。多使用控制台的source等功能,解决问题将事半功倍。
另外,在ubuntu和windows中确实存在差别,在windows下这都不是问题,同样是谷歌浏览器,同样是eclipse和tomcat,但是在windows下,加载css和js等就会默认使用原格式,而不会转变成text/html等格式,但是在ubuntu下,就会转过去。因此,在windows下一直没发现这个bug,在ubuntu下就成了问题。