jetty中文問題一直沒有Tomcat做的好,所以經常出現中文亂碼問題。
工作中用到了jetty-maven-plugin,用jetty和maven配合部署發布項目,但是在
瀏覽器中請求的時候總是出現中文亂碼,而把項目部署到Tomcat下面則一切正常。由於一直比較忙,加上線上環境用的是Tomcat,不影響工作,就沒有去解決它。今天看着那些奇形怪狀的亂碼實在是感覺不舒服,就抽出些時間查看了下相關方面的問題。
谷歌百度了一陣,發現了很多這方面的問題,但是跟我的問題都不一致。也試了更改Jetty版本等一些解決方案,都行不通。
於是調出chrome瀏覽器的開發者工具(在chrome中按F12鍵),詳細查看了下相關的Request和Response的相關參數,發現程序Response的內容也是沒問題的,就是在瀏覽器解析的過程中發生了亂碼。並且在比對了Jetty和Tomcat的參數時發現,
Tomcat的Response:
Content-Type:text/
html;charset=UTF-8
Jetty的Response:
Content-Type:text/html
看來這兒肯定有問題,再加上谷歌上找到的一些資料,我想到了用Response重新設置ContentType,相關代碼如下:
@RequestMapping(value= "getDealGeoSearchForMobile")
@ResponseBody
publicbyte[] getDealGeoSearch(HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
return“中文”;
}
再測試了下,亂碼終於不見了。一切正常。
另外,在web.xml中也要配置相關的EncodingFilter以用來使編碼變為UTF-8,配置如下:
<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-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如有不懂的,歡迎留言討論。