关于处理JSP和javabean之间的中文问题

来源:互联网 发布:望远镜放大倍数 知乎 编辑:程序博客网 时间:2024/05/19 23:15

在很多的时候,我们都会碰到同一个问题,在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)函数。
 

原创粉丝点击