Struts + Spring + Hibernate + Mysql中文问题解决
2008-09-14 00:36
609 查看
Struts + Spring + Hibernate + Mysql中文问题解决
本文摘自于《诗意的活着》的博客
如果你在开发java web项目中遇到了让人麻烦的中文乱码问题,并且在搜索引擎中找到了这篇文章,希望你用一点时间读一下它,我相信它对你解决碰到的乱码问题会有帮助。
这几天在做一个小的 Struts + Spring + Hibernate + Mysql 的练习,以前也听朋友们说过这个框架里的中文乱码挺棘手,开始也没当回事,毕竟在处理这个问题上还算老道,在做的当中确实碰到了一些问题,所以我把这个小经验写下来,以方便更多的开发人员,下面我们开始。
首先说struts中的.properties文件的中文显示问题:
struts 在调用 .properties 文件时,首先会取得当前系统的本地语言,用HttpServletRequest.getLocale() 取得相应的 java.util.Locale 对象,然后用 java.util.Locale.getLanguage() 取得当前语言,由此来判断到底该用哪个具体的 .properties 文件,中文当然是 _zh.properties 了。
我们在定义自己的中文 properties 文件时,在 key 后面填写对应的中文,保存文件(这里我们保存成 temp.properties ),我们要做的是对它做编码的转换,可以直接用JDK提供的native2ascii工具,命令格式如下:
native2ascii -encoding charsetname resource-file target-file
这个是这里的样例:
native2ascii -encoding GBK D:/workspace/eclipse/myapp/WEB-INF/classes/temp.properties D:/workspace/eclipse/myapp/WEB-INF/classes/MyMessageResources_zh.properties
各位在写得时候要根据自己的实际情况来定义。
[小笋在处理这个问题时是用了一个插件,能自动将 *.properties ]中的中文转成 UTF-8 的编码。插件会在文章末尾附上。]
在做完这次转换,我们就得到了想要的 .properties 文件,这个时候如果是用 eclipse 开发就要注意了,我们用 eclipse 编写的 .properties 文件,默认编码是 ISO-8859-1 ,所以即便我们用 native2ascii 转换后,文件中的中文还是??? ,在这里,我们需要对 eclipse 做一些小小的配置。 在 window - property - General - Content type - text - java properties file ,在这里我们可以配置 property 文件的默认编码,将编码设置成 GBK [小笋设置的是UTF-8],然后我们再用 native2ascii 对刚才我们用 eclipse 编写的 property 文件做一次转换,你可以看到不一样的效果。
做完以上操作,我们的property文件就没问题了,放心的使用吧。
OK,上面我们介绍完了 property 文件的编码设置问题,现在我们来看看 Struts 中 request 传递 Form 数据的字符集问题。
相信大家对这个已经很熟悉了,不过作为 Struts Spring Hibernate Mysql 中的一部分,在这里我还是要介绍一下,这样才显得完整。
其实也就是一个filter,再没有什么特别的了,我们可以直接使用tomcat给我们提供的现成的filter,位置在 Tomcat_Home/webapps/servlet-examples/WEB-INF/classes/filters,在这里我们可以找一个 SetCharacterEncoding.java 的文件,对了,就是它,copy 到你的项目中,然后在 web.xml 中做一下配置:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.ifite.schoolreporter.dong.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
当然了,要把 encoding 的 value 改一下嘛,要不然我们做这个filter干什么啊,至于改成什么,解决中文,肯定是 GBK 咯,呵呵,OK了,就这么简单,不过有一点要注意,在配置 filter 时候,我们一定要把它写在 <servlet></servlet> 的前面,要不然在启动 filter 的时候会报错,filter 也将不工作。
[小笋安装 Tomcat 时没有安装这个示例程序,所以临时在网上找了一个,修改一下编码设置就能用了,内容如下:]
package com.lp521.filter;
import java.io.*;
import javax.servlet.*;
public class SetCharacterEncodingFilter implements Filter{
public void destroy(){
}
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException,ServletException{
request.setCharacterEncoding("GB2312");
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException{
}
}
好了,到这里 request 传递 form 数据的字符问题也解决了,剩什么了?
数据入库
好,那么在这个框架中,我们要在两个地方对数据库做配置,hibernate 中的配置我就不说了,因为没什么特别的,参考它官方提供的写法就搞定了,这里介绍 spring 里的 applicationContext.xml 中的配置写法。
这是我自己项目中实际的写法:
<bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/schoolreporter</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
我这样的配置,进入mysql中的中文字符已经是 OK 的,如果这样写不行的话,可以试一下把上面的 url 的值写成这样:
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/schoolreporter?username=root&password=root&useUnicode=true&characterEncoding=gbk </value>
</property>
然后,要把下面的 username 项和 password 去掉,具体为什么,我想兄弟们不因该问了吧,应为在 url 中就已经都设置了呗,当然大家现在可能已经注意到了,以前语句中的“&”,在这里被写成了“&”,对了!!!就是这样,至于这个原因,请自行 google;(备注:第二个写法小东我没有测试,不过按照理论是可以通过的,如果在 spring 加载时报错,小东只能说声对不起,请参照第一种设置,那个是通过测试的)
好了,基本上做完了上面的工作后 Struts Spring Hibernate Mysql 的中文问题已经全部搞定。
当然了,这里还要介绍一下我的环境:JDK1.5;Tomcat5.5;mysql4.1;mysql-jconnector-3.1.7。
开发工具及组件环境:eclipse3.1;struts1.2.7;spring1.2.2;hibernate3.0。
还有一点要注意的是,在 mysql 中,我们要存多字节数据,为了保险,应该保证所有层面的字符集都是 GBK,尤其保证 client , database , table , coulmn,其实索性全部设置成 GBK 来的更好,具体设置方法这里就不再介绍了,请自行查阅 mysql 提供的使用手册。
OK,上面的介绍我个人认为已经是比较详细的了,在写这篇文章的时,参考了网上很多文章,配合了一下自己的测试,通过后记录下来,以便方便更多的开发者。
文章出处:http://www.diybl.com/course/3_program/java/javajs/2008610/124436.html
本文摘自于《诗意的活着》的博客
如果你在开发java web项目中遇到了让人麻烦的中文乱码问题,并且在搜索引擎中找到了这篇文章,希望你用一点时间读一下它,我相信它对你解决碰到的乱码问题会有帮助。
这几天在做一个小的 Struts + Spring + Hibernate + Mysql 的练习,以前也听朋友们说过这个框架里的中文乱码挺棘手,开始也没当回事,毕竟在处理这个问题上还算老道,在做的当中确实碰到了一些问题,所以我把这个小经验写下来,以方便更多的开发人员,下面我们开始。
首先说struts中的.properties文件的中文显示问题:
struts 在调用 .properties 文件时,首先会取得当前系统的本地语言,用HttpServletRequest.getLocale() 取得相应的 java.util.Locale 对象,然后用 java.util.Locale.getLanguage() 取得当前语言,由此来判断到底该用哪个具体的 .properties 文件,中文当然是 _zh.properties 了。
我们在定义自己的中文 properties 文件时,在 key 后面填写对应的中文,保存文件(这里我们保存成 temp.properties ),我们要做的是对它做编码的转换,可以直接用JDK提供的native2ascii工具,命令格式如下:
native2ascii -encoding charsetname resource-file target-file
这个是这里的样例:
native2ascii -encoding GBK D:/workspace/eclipse/myapp/WEB-INF/classes/temp.properties D:/workspace/eclipse/myapp/WEB-INF/classes/MyMessageResources_zh.properties
各位在写得时候要根据自己的实际情况来定义。
[小笋在处理这个问题时是用了一个插件,能自动将 *.properties ]中的中文转成 UTF-8 的编码。插件会在文章末尾附上。]
在做完这次转换,我们就得到了想要的 .properties 文件,这个时候如果是用 eclipse 开发就要注意了,我们用 eclipse 编写的 .properties 文件,默认编码是 ISO-8859-1 ,所以即便我们用 native2ascii 转换后,文件中的中文还是??? ,在这里,我们需要对 eclipse 做一些小小的配置。 在 window - property - General - Content type - text - java properties file ,在这里我们可以配置 property 文件的默认编码,将编码设置成 GBK [小笋设置的是UTF-8],然后我们再用 native2ascii 对刚才我们用 eclipse 编写的 property 文件做一次转换,你可以看到不一样的效果。
做完以上操作,我们的property文件就没问题了,放心的使用吧。
OK,上面我们介绍完了 property 文件的编码设置问题,现在我们来看看 Struts 中 request 传递 Form 数据的字符集问题。
相信大家对这个已经很熟悉了,不过作为 Struts Spring Hibernate Mysql 中的一部分,在这里我还是要介绍一下,这样才显得完整。
其实也就是一个filter,再没有什么特别的了,我们可以直接使用tomcat给我们提供的现成的filter,位置在 Tomcat_Home/webapps/servlet-examples/WEB-INF/classes/filters,在这里我们可以找一个 SetCharacterEncoding.java 的文件,对了,就是它,copy 到你的项目中,然后在 web.xml 中做一下配置:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.ifite.schoolreporter.dong.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
当然了,要把 encoding 的 value 改一下嘛,要不然我们做这个filter干什么啊,至于改成什么,解决中文,肯定是 GBK 咯,呵呵,OK了,就这么简单,不过有一点要注意,在配置 filter 时候,我们一定要把它写在 <servlet></servlet> 的前面,要不然在启动 filter 的时候会报错,filter 也将不工作。
[小笋安装 Tomcat 时没有安装这个示例程序,所以临时在网上找了一个,修改一下编码设置就能用了,内容如下:]
package com.lp521.filter;
import java.io.*;
import javax.servlet.*;
public class SetCharacterEncodingFilter implements Filter{
public void destroy(){
}
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException,ServletException{
request.setCharacterEncoding("GB2312");
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException{
}
}
好了,到这里 request 传递 form 数据的字符问题也解决了,剩什么了?
数据入库
好,那么在这个框架中,我们要在两个地方对数据库做配置,hibernate 中的配置我就不说了,因为没什么特别的,参考它官方提供的写法就搞定了,这里介绍 spring 里的 applicationContext.xml 中的配置写法。
这是我自己项目中实际的写法:
<bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/schoolreporter</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
我这样的配置,进入mysql中的中文字符已经是 OK 的,如果这样写不行的话,可以试一下把上面的 url 的值写成这样:
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/schoolreporter?username=root&password=root&useUnicode=true&characterEncoding=gbk </value>
</property>
然后,要把下面的 username 项和 password 去掉,具体为什么,我想兄弟们不因该问了吧,应为在 url 中就已经都设置了呗,当然大家现在可能已经注意到了,以前语句中的“&”,在这里被写成了“&”,对了!!!就是这样,至于这个原因,请自行 google;(备注:第二个写法小东我没有测试,不过按照理论是可以通过的,如果在 spring 加载时报错,小东只能说声对不起,请参照第一种设置,那个是通过测试的)
好了,基本上做完了上面的工作后 Struts Spring Hibernate Mysql 的中文问题已经全部搞定。
当然了,这里还要介绍一下我的环境:JDK1.5;Tomcat5.5;mysql4.1;mysql-jconnector-3.1.7。
开发工具及组件环境:eclipse3.1;struts1.2.7;spring1.2.2;hibernate3.0。
还有一点要注意的是,在 mysql 中,我们要存多字节数据,为了保险,应该保证所有层面的字符集都是 GBK,尤其保证 client , database , table , coulmn,其实索性全部设置成 GBK 来的更好,具体设置方法这里就不再介绍了,请自行查阅 mysql 提供的使用手册。
OK,上面的介绍我个人认为已经是比较详细的了,在写这篇文章的时,参考了网上很多文章,配合了一下自己的测试,通过后记录下来,以便方便更多的开发者。
文章出处:http://www.diybl.com/course/3_program/java/javajs/2008610/124436.html
相关文章推荐
- Struts + Spring + Hibernate + Mysql中文乱码问题解决
- Struts + Spring + Hibernate + Mysql中文乱码问题解决
- Struts + Spring + Hibernate + Mysql中文问题解决
- 解决Struts + Hibernate + MySql中文乱码的问题
- struts、spring、hibernate中文乱码问题解决
- Hibernate向mysql中保存中文字符出现乱码问题的解决
- 解决hibernate向mysql插入中文乱码问题
- [-好贴转载-] Jsp/struts/tapestry/hibernate等中文乱码问题解决
- struts1.3 spring2.5 hibernate3.2问题解决过程
- 使用Hibernate和Mysql中文乱码问题解决
- Spring+Hibernate应用中怎样解决中文乱码问题
- Spring+Hibernate+Struts之懒加载问题的解决
- 解决springmvc+mybatis+mysql中文乱码问题
- struts+spring+hibernate整合问题解决方法
- Mac下的mysql+hibernate配置下中文问题的解决
- hibernate+struts+mysql有关utf8乱码问题的解决。
- 解决Hibernate向MySQL插入中文出现乱码的问题
- MyEclipse开发Struts+Spring+Hibernate中文化问题解决
- struts,hibernate,spring配置时问题汇总及解决办法
- 采用C3P0连接池解决spring+hibernate+mysql 访问空闲8小时后自动断开连接的问题