使用struts2+spring+tomcat+mysql数据库开发中文乱码问题解决方案

时间:2022-01-24 07:12:02

第一次使用mysql结合struts2和spring开发,接二连三碰到中文乱码异常问题。

理想下整个过程全部使用utf-8,中间不用转换编码。

首先,mysql数据库字符集全部设成utf-8,没有问题。

 

然后,struts.xml配置文件中加入

[xhtml] view plaincopy
  1. <constant name="struts.i18n.encoding" value="UTF-8"></constant>  

 

jsp页面加入

[xhtml] view plaincopy
  1. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">  

 

spring数据源配置(注意url)

[xhtml] view plaincopy
  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
  2.        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>  
  3.        <property name="url" value="jdbc:mysql://localhost:3306/bysj?useUnicode=true&characterEncoding=utf-8"/>  
  4.        <property name="username" value="root"/>  
  5.        <property name="password" value="123"/>  
  6.     </bean>  

一开始我url后面没有加编码,导致出现了一个诡异的问题:使用spring的jdbctemplate执行不带中文的sql语句没有问题,执行带中文的sql语句查不到数据,而将这条sql语句直接在数据库中执行却也完全没问题。

 

另外保险起见在web.xml中再加个经典的字符编码过滤器

[xhtml] view plaincopy
  1. <filter>     
  2.         <filter-name>encodingFilter</filter-name>     
  3.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter  
  4. </filter-class>     
  5.         <init-param>     
  6.            <param-name>encoding</param-name>     
  7.             <param-value>UTF-8</param-value>     
  8.         </init-param>     
  9.         <init-param>     
  10.             <param-name>forceEncoding</param-name>     
  11.             <param-value>true</param-value>     
  12.         </init-param>     
  13.     </filter>     
  14.     <filter-mapping>     
  15.         <filter-name>encodingFilter</filter-name>     
  16.         <url-pattern>/*</url-pattern>     
  17.     </filter-mapping>  

 

最后tomcat中server.xml也要配置(URIEncoding="UTF-8"是添加上去的)。

[xhtml] view plaincopy
  1. <Connector port="8080" protocol="HTTP/1.1"   
  2.                connectionTimeout="20000"   
  3.                redirectPort="8443" URIEncoding="UTF-8"/>  

搞定!