現象描述
出現了以下的問題:
- 同樣的代碼在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下就成了問題。