在tomcat+mysql开发中,中文乱码问题是一个比较常见的问题,在查询网络相关资料后,我把我的实践经验总结于本文。本文主要解决页面乱码和数据库乱码2个问题。
1、页面乱码。
1) 编写一个过滤器。
public class SetCharacterEncodingFilter implements Filter {
// 。。。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
RequestWrapper wrappedRequest = new RequestWrapper((HttpServletRequest) request);
ResponseWrapper wrappedResponse = new ResponseWrapper((HttpServletResponse) response);
wrappedRequest.setCharacterEncoding("GBK");
doBeforeProcessing(wrappedRequest, wrappedResponse);
chain.doFilter(wrappedRequest, wrappedResponse);
//add your code
}
2)配置web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、数据库乱码。
方法1:我使用MySQL Tools for 5.0客户端管理工具,在建表的时候,选择Table Option标签设置其中的Character Set属性为gb2312即可。
方法2:利用数据源连接数据库,在context.xml中设置资源:
<Resource name="jdbc/testDB"
auth="Container"
type="javax.sql.DataSource" />
<ResourceParams name="jdbc/testDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value>yourpw</value>
</parameter>
<!-- Class name for mm.mysql JDBC driver -->
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value><![CDATA[jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&characterEncoding=GBK]]></value>
</parameter>
</ResourceParams>