JR 精品文章 - 网络应用程序支持中文的简单试验
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » JSP/Servlet/JSF 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
网络应用程序支持中文的简单试验
variable 原创   更新:2005-09-05 14:11:24  版本: 1.0   

                   
这几天有些空闲,就对网络应用(Web Application)支持中文进行了一次简单的
试验,现在总结一下。由于是第一次接触,错误难免,望指正帮助。

试验方法是在数据库中建立一个表格,如student表,然后建立一个网络应用程序,
对该表中的数据进行查询与编辑。结构是 Jsp--JavaBean--Controller--DAO,
只用servlet(Jsp2.0?)技术。

开发环境是Linux(平台缺省编码是UTF?8); 网络服务器TOMCAT5.0.28; 
数据库是PostgreSQL/MySQL。

整个试验的思路是,从客户端(browser)到我的应用程序,再到数据库存取,如果
所有过程均采用UTF?8编码的话,数据应保持完整性,即不应出现乱码问题。

首先确定数据库支持UTF?8编码。利用数据库交互程序,往建好的表中直接写入中文
数据,发现一切正常(你甚至不需要规定数据库编码为UNICODE, 可能是因为我的操
作系统的缺省编码是UNICODE的原故)。

这样看来,出现乱码的主要原因,可能在于应用程序的编写以及客户与服务器数据传
输的过程。试验证明,对于从数据库中提取数据时,关键是在有关Jsp源文件头部声
明应用程序的编码:<%@ page pageEncoding="UTF-8" %>。因Tomcat5在将Jsp
编译时,其使用的缺省编码并非UNICODE, 因此就有可能造成数据丢失或错误。

同样,在处理来自客户端的数据输入时,在拿参数之前,也要相应设好数据编码,以
避免Tomcat用其缺省的编码来对数据流进行解释。试验中采用本站网友提出的办法,
即用Filter的方式对请求的数据进行编码设定。经此处理后,其他相关源代码中对参
数的获取己其他处理等,不需要作任何特别的处理。

其简单源代码如下:
  1. import java.io.IOException;
  2. import javax.servlet.*;
  3. /**
  4.  * a filter to set the coming request encoding to a desired charset.
  5.  */
  6. public class EncodingFilter implements Filter {
  7.   private static String desired_charset = "UTF-8";
  8.   
  9.   // gets defined encoding from web.xml
  10.   public void init(FilterConfig conf) throws ServletException {
  11.     desired_charset = conf.getInitParameter("charset");
  12.   }
  13.   public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
  14.             throws IOExceptionServletException {
  15.     req.setCharacterEncoding(desired_charset);    // sets request encoding.
  16.     chain.doFilter(req, res);
  17.   }
  18.   public void destroy() {}
  19. }
  20. //----------------------------------------------------------------
  21. //配置文件 "web.xml", showing the declaration of the above filter:
  22. <?xml version="1.0" encoding="ISO-8859-1"?>
  23. <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  24.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  25.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
  26.     version="2.4">
  27.   <filter>
  28.     <filter-name>Character Encoding Filter</filter-name>
  29.     <filter-class>john.control.EncodingFilter</filter-class>
  30.     <init-param>
  31.       <param-name>charset</param-name>
  32.       <param-value>UTF-8</param-value>
  33.     </init-param>
  34.   </filter>
  35.   
  36.   <filter-mapping>
  37.     <filter-name>Character Encoding Filter</filter-name>
  38.     <url-pattern>/*</url-pattern>
  39.   </filter-mapping>
  40.     ......
  41. </web-app>

总结如下:

1:网络应用程序支持中文的主要问题在于有些服务器(servlet container)的缺省
编码不是UNICODE。
2:解决的办法是通过对服务器的配置或在应用程序源代码中,指定希望采用的编码。
3:在应用程序源代码中指定编码,主要在Jsp源文件中包括 
<%@ page pageEncoding="UTF-8" %>;而处理客户端所传数据时,可利用Filter来设
定所需的编码。
4:通过统一从客户端到数据库的编码为UNICODE,如UTF?8,同一个网络应用程序
可以支持多种语言。
5:改用MySQL数据库系统后,应用程序仍然工作良好。

存在问题:

由于好奇,将此网络应用程序部署到WindowsXP下进行调试,数据库与服务器均不变
(当然是Windows版本)。程序运行良好。但由于此WindowsXP的缺省编"CP1521”
(-:something like that),而并非UTF?8, 因此,通过数据库交互程序直接对数据
库进行查询,Console输出乱码(PostreSql)。


最后,告诉大家今年听到的一句话:“生活会让你失去自信的”。

-- by variable, 2005年9月5日[han]

版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     12       3
作者其它文章: 作者全部文章

这个文章共有 0 条评论
主题: 网络应用程序支持中文的简单试验 上一篇文章
返回文章列表 返回〔JSP/Servlet/JSF〕
下一篇文章 主题: 几个简单的正则表达式.


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号