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>
如有不懂的,欢迎留言讨论。