这个问题可害苦我了,我用的是mysql的数据库,将数据保存到数据库表时,发现凡是中文的地方都变成了?,我怀疑是mysql的编码问题,将程序编码和数据库表的编码更改了N遍,还是乱码,实在没有办法了,我调试一个程序,原来在将数据保存到数据库之间,已经出现了乱码,难道struts2也会出现乱码,在网上百度了一下,确实这样,解决方法如下:
在struts.xml文件中一个常量:
- <struts>
- <constant name="struts.i18n.encoding" value="GBK"/>
- <include file="struts-default.xml"/>
- </struts>
重新启动Tomcat,测试,居然还是乱码,气煞我也,又折腾了N久,这个问题终于被我给揪出了,原来在web.xml文件中必须添加一个filter
- <filter>
- <filter-name>struts-cleanup</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.ActionContextCleanUp
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts-cleanup</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
注意了:struts2中web.xml配置是有顺序的。
在web.xml中EncodingFilter的位置应该在Struts2的FilterDispatcher之前,因为要先调整字符集,然后进入Action。
按照Struts2的API,filter的顺序是 struts-cleanup filter SiteMesh filter FilterDispatcher。