ITKeyword,专注技术干货聚合推荐

注册 | 登录

Struts + Spring + Hibernate + Mysql中文问题解决

shangpusp 分享于 2009-04-06

推荐:JSTL+Spring+Hibernate中文乱码问题解决

web.xml中加入: <filter>  <filter-name>SetCharacterEncoding</filter-name>  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filte

2020腾讯云共同战“疫”,助力复工(优惠前所未有!4核8G,5M带宽 1684元/3年),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1053

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

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了,就这么简单,不过有一点要注意,在配置 fi

推荐:MyEclipse 7.0M1

SSH 整合开发问题解决:Spring2.5+hibernate3.1+Struts1.3 +Tomcat6.0

1

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource

lter 时候,我们一定要把它写在 <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/124300.html

推荐:struts+spring+hibernate整合出现的问题解决方法

java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml] 意思大致是找不到applicationContext.xml文件,

Struts + Spring + Hibernate + Mysql中文问题解决 本文摘自于《诗意的活着》的博客 如果你在开发java web项目中遇到了让人麻烦的中文乱码问题,并且在搜索引擎中找到了这篇文章,希望你用一

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。