关于处理JSP和javabean之间的中文问题
2007-01-16 10:16
471 查看
在很多的时候,我们都会碰到同一个问题,在JSP页面显示好好的中文,传到后台的JavaBean里就变成乱码了,有的朋友喜欢写一个编码的转换方式,来实现编码的转换,其实有的时候这样会变得非常麻烦,并且会增加不必要的操作.
我们可是好好的想一想,为什么在JSP页面显示好好的中文一传到后台就会问题,其实有的时候,问题是出在TOMCAT的身上.
用get方法传递的时候,这个方法你加过滤器和在页面上指定编码都是不可用的,你如果在服务器的server.xml里如果没有配置这一项的时候,采用Get提交的时候,服务器就会默认的是服务器内部的ISO-8859-1的编码.
现在知道为什么会出问题了吧,那让我们做个小小的改动,就会解决让你头疼的中文处理问题:
打开tomcat的server.xml文件,找到区块,加入如下一行URIEncoding="GBK",具体的代码如下:
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>
下面是一个同事写的一个帖子,相当不错
在用采用tomcat+struts+mysql做网页应用程序,是目前非常流行的方式,但经常出现中文乱码的问题,让人十分头疼,以下是总结WEB应用程序的中文乱码解决方法
用post方式传递中文参数
在Jsp页面里加上如下声明:
<%@ page contentType="text/html;charset=utf-8" language="java" %>
表明该文件是用utf-8编码。另外该JSP也必须用utf-8编码编辑。在Eclipse里要修改编辑框的编码格式,Windows->preferences->workbench->Editors 然后修改Text file encoding即可。如果Jsp的页面已经写完了,却不知如何修改编码,可用window自带的文本编辑器打开该Jsp页面,然后另存同名文件,注意,在文件名的下面可以选择UTF-8编码方式的。
这个可以。其他的编辑器如UltraEdit都有UTF-8编码方式。
用get方式传递中文参数
应避免使用这种方式,如不可避免,则需要修改WEB服务器配置,下面以tomcat5.0.28为例:
修改tomcat的Conf目录下的server.xml
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="UTF-8"/>
黑体部分是另增的:表明URL用UTF-8编码。
WEB服务器的编码问题
由于tomcat服务器内核是采用iso-8859-1编码,如果是用utf-8传递过来的参数处理会出错,需要增加一个filter。这个代码在tomcat自带的例子有:
把这个类拷到你所在的类路径:
%tomcat_home/webapps/jsp-examples/WEB-INF/classes/filters/ SetCharacterEncodingFilter.class
在web.xml文件里增加如下代码段:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
代码中含有中文
应尽量避免在代码中出现中文,如不可避免。解决方法有两种:
1.在Utf-8编码方式下编写代码,如果是用Ant编绎的话,在Javac的参数里加上encoding=utf-8.
2.另一种解决方法是采用转义字符,把程序中出现的中文采用转义字符表示。JDK应自带一个这样的工具:native2ascii.exe
我一般采用第一种方法。
数据库端
在数据库建表的时候要指示采用utf-8,或且把数据库默认编码改为utf-8.然后数据库的连接字符串要指示用utf-8格式编码。
例:mysql:
hibernate.connection.url jdbc:mysql://192.168.16.24:3306/berheleyoa?useUnicode=true&characterEncoding=utf-8
(注意:如果这个字符串是写XML的文件的话,由于XML中&是特殊字符,所以应该用转义字符:jdbc:mysql://192.168.16.24:3306/berheleyoa?useUnicode=true&characterEncoding=utf-8 )
总结
采用以上方法解决了从数据端到前面显示的编码问题。注意在代码不再需要再处理编码问题。特别注意慎用:getBytes(String str,String Encode)函数。
我们可是好好的想一想,为什么在JSP页面显示好好的中文一传到后台就会问题,其实有的时候,问题是出在TOMCAT的身上.
用get方法传递的时候,这个方法你加过滤器和在页面上指定编码都是不可用的,你如果在服务器的server.xml里如果没有配置这一项的时候,采用Get提交的时候,服务器就会默认的是服务器内部的ISO-8859-1的编码.
现在知道为什么会出问题了吧,那让我们做个小小的改动,就会解决让你头疼的中文处理问题:
打开tomcat的server.xml文件,找到区块,加入如下一行URIEncoding="GBK",具体的代码如下:
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>
下面是一个同事写的一个帖子,相当不错
在用采用tomcat+struts+mysql做网页应用程序,是目前非常流行的方式,但经常出现中文乱码的问题,让人十分头疼,以下是总结WEB应用程序的中文乱码解决方法
用post方式传递中文参数
在Jsp页面里加上如下声明:
<%@ page contentType="text/html;charset=utf-8" language="java" %>
表明该文件是用utf-8编码。另外该JSP也必须用utf-8编码编辑。在Eclipse里要修改编辑框的编码格式,Windows->preferences->workbench->Editors 然后修改Text file encoding即可。如果Jsp的页面已经写完了,却不知如何修改编码,可用window自带的文本编辑器打开该Jsp页面,然后另存同名文件,注意,在文件名的下面可以选择UTF-8编码方式的。
这个可以。其他的编辑器如UltraEdit都有UTF-8编码方式。
用get方式传递中文参数
应避免使用这种方式,如不可避免,则需要修改WEB服务器配置,下面以tomcat5.0.28为例:
修改tomcat的Conf目录下的server.xml
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="UTF-8"/>
黑体部分是另增的:表明URL用UTF-8编码。
WEB服务器的编码问题
由于tomcat服务器内核是采用iso-8859-1编码,如果是用utf-8传递过来的参数处理会出错,需要增加一个filter。这个代码在tomcat自带的例子有:
把这个类拷到你所在的类路径:
%tomcat_home/webapps/jsp-examples/WEB-INF/classes/filters/ SetCharacterEncodingFilter.class
在web.xml文件里增加如下代码段:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
代码中含有中文
应尽量避免在代码中出现中文,如不可避免。解决方法有两种:
1.在Utf-8编码方式下编写代码,如果是用Ant编绎的话,在Javac的参数里加上encoding=utf-8.
2.另一种解决方法是采用转义字符,把程序中出现的中文采用转义字符表示。JDK应自带一个这样的工具:native2ascii.exe
我一般采用第一种方法。
数据库端
在数据库建表的时候要指示采用utf-8,或且把数据库默认编码改为utf-8.然后数据库的连接字符串要指示用utf-8格式编码。
例:mysql:
hibernate.connection.url jdbc:mysql://192.168.16.24:3306/berheleyoa?useUnicode=true&characterEncoding=utf-8
(注意:如果这个字符串是写XML的文件的话,由于XML中&是特殊字符,所以应该用转义字符:jdbc:mysql://192.168.16.24:3306/berheleyoa?useUnicode=true&characterEncoding=utf-8 )
总结
采用以上方法解决了从数据端到前面显示的编码问题。注意在代码不再需要再处理编码问题。特别注意慎用:getBytes(String str,String Encode)函数。
相关文章推荐
- jsp之间中文传值的问题,中文URL传值时的处理
- 关于jsp之间href传参(中文)乱码问题
- 处理jsp中文参数传递乱码问题
- jsp,struts处理中文乱码问题
- JAVABEAN、JSP中文问题
- 关于中文编码问题及Java中的处理
- [Flex]再谈Flex和Jsp之间中文参数的传递问题
- 利用Filter类处理jsp页面中的中文乱码问题
- 关于jsp与sql server 2000的中文乱码问题
- 关于jsp里url中的参数中文乱码问题
- jsp、servlet关于中文问题再谈
- 关于J2EE程序servlet中中文乱码问题,jsp页面编码格式的选择
- 关于html改为jsp乱码问题的处理
- 关于jsp include html文件导致中文乱码的问题
- 关于PHP函数pathinfo处理中文的问题
- 处理jsp中文乱码问题(过滤器处理)
- 关于处理JavaWeb中Servlet中返回jsp乱码问题
- 关于jsp与servlet之间传值的问题及getParameter和getAttribute的用法
- javabean解决jsp中中文乱码问题
- jsp、servlet关于中文问题再谈