前景:
又是一个伤心,将Spring3 Mvc+Hibernate4集成起来搞搞,没想到在Controller这层给拖了1天多,其中Spring MVC乱码问题,表单乱码问题,全都搜索了N次,看了N次,试了N次,竟然都没效果,花的时间就在这些查找跟看跟偿试中度过,最后这问题终于在不小心的偿试下给解决了,在此记录下给那些遇到困难的程序员少花点时间,多点时间给自己娱乐放松下。
实验环境:Intellij Idea 12.1.13+Tomcat6.024+spring3.2 mvc+hibernate4 +maven3+win8系统 64位英文版
项目编码统一使用UTF-8
问题描述:在Controller中直接使用System.out.println("中文"),输出来的竟然是 "??" ,然而这问题,在main函数中直接打印输出不会有问题,反而在Tomcat集成测试时才会出现。如下面的代码:
@RequestMapping("test") public String test(){ System.out.println("中文"); return "index"; }
问题分析:
1.中间都没参与Form表单的收集数据这些,所以问题也不会发生在这里;
2.Spring 过滤器也不会出现这问题,因为我在web.xml已经给配置了下面这段:
<filter> <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3. 既然都不是上述的原因,有可能是系统编码或者是Tomcat编码问题;
解决问题:
经过上述分析原因,可能出现问题的原因就是英文系统的编码或者是Tomcat启动JVM编码问题;下面给出小弟的解决方案:
将Tomcat内置在Intellij Idea 12.1.13编程工具中,具体如何将Tomcat内置进Intellij Idea 12.1.13中,请百度或者Google查找方法,在此就不一一介绍,在里面启动与发布及停止运行;
在上述的过程后就对Tomcat加以配置,如下图:
然后将项目打包,最后启动项目,结果成功输出中文。。。。