用UTF-8开发面向国际化Java/J2EE应用并解决中文问题
我的前一篇Mysql Hibernate Struts Tomcat中文问题解决方法讲了用GBK编码来开发中文Java/J2EE Web应用解决中文问题,这一篇将用UTF-8编码的方式开发面向国际化的Java/J2EE Web应用解决包括中文的各种语言问题。思想是在涉及到字符/文件编码的地方全部都使用UTF-8编码。
大致的环境如:struts+tiles+hibernate+mysql4.0.17+tomcat5.0.19+mysql-connector-java-3.1-bin.jar
JSP的字符集
所有的JSP第一行加入:
<%@ page contentType="text/html;charset=UTF-8" %>
在Web应用加入Filter
a)在web.xml里加入如何配置
<filter>
<filter-name>filter</filter-name>
<filter-class>com.common.web.RequestFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
b)在RequestFilter里如下编码
public void doFilter( ServletRequest request, ServletResponse response,
FilterChain chain )
throws IOException, ServletException {
if ( encoding != null ) {
request.setCharacterEncoding( encoding ) ;
} else {
request.setCharacterEncoding( "UTF-8" ) ;
}
chain.doFilter( request, response ) ;
}
Hibernate的数据库连接配置
Hibernate:hibernate.cfg.xml
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=UTF-8</property>
<property name="hibernate.connection.username">root</property>
修改server.xml
打开tomcat的server.xml文件,找到区块,加入如下一行:
URIEncoding=”GBK”
完整的应如下:
<Connector
port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups= "false" redirectPort="8443" acceptCount="100"
debug= "0" connectionTimeout="20000"
disableUploadTimeout= "true"
URIEncoding= "UTF-8"
/>
源程序文件编码都采用UTF-8编码
采用ant build系统的时候要修改:
编译 注意 encoding="utf-8" 参数
<target name="build" >
<mkdir dir="${build.dir}" />
<javac encoding="utf-8" destdir="${build.dir}" target="1.3" debug="true" deprecation="false" optimize="false" failonerror="true">
<src path="${src.dir}" />
<classpath refid="master-classpath" />
</javac>
</target>
生成javadoc 注意 charset="utf-8" encoding="utf-8"
<target name="doc">
<mkdir dir="doc" />
<javadoc charset="utf-8" encoding="utf-8" packagenames="${packages}" sourcepath="src" destdir="doc" author="true" version="true" use="true" splitindex="true" >
<classpath refid="master-classpath" />
</javadoc>
</target>
这里 的encoding 就是指的你 java 文件的编码格式 javac 和javadoc 都有这个参数
charset 指的是 生成 doc 后的编码方式 javadoc 的参数
修改build.xml
<copy todir="${build.dir}/web/classes" encoding="UTF-8">
<fileset dir="src/web">
<include name="**/*.properties"/>
<include name="**/*.xml"/>
</fileset>
</copy>
资源文件本身采用utf-8编码,部署的时候采用native2ascii做encoding="utf-8"转换
build.xml里应该:
<native2ascii encoding="utf-8" dest="${web.dir}/WEB-INF/classes" src="${src.dir}" includes="**/*.properties" />
工程内所有的 .java .jsp .xml .properties 都默认的是系统环境的编码,中文系统通常是GBK,应该修改为utf-8