<< Linux启动过程综述 | 首页 | Java网络属性-Java Networking Properties >>

用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&amp;characterEncoding=UTF-8</property>

<property name="hibernate.connection.username">root</property>

修改server.xml

打开tomcatserver.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
标签 :



发表评论 发送引用通报