分享
 
 
 

网络应用程序支持中文的简单试验

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

这几天有些空闲,就对网络应用(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的方式对请求的数据进行编码设定。经此处理后,其他相关源代码中对参数的获取己其他处理等,不需要作任何非凡的处理。

其简单源代码如下:

import java.io.IOException;

import javax.servlet.*;

/**

* a filter to set the coming request encoding to a desired charset.

*/

public class EncodingFilter implements Filter {

private static String desired_charset = "UTF-8";

// gets defined encoding from web.XML

public void init(FilterConfig conf) throws ServletException {

desired_charset = conf.getInitParameter("charset");

}

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)

throws IOException, ServletException {

req.setCharacterEncoding(desired_charset);// sets request encoding.

chain.doFilter(req, res);

}

public void destroy() {}

}

//----------------------------------------------------------------

//配置文件 "web.xml", showing the declaration of the above filter:

<?xml version="1.0" encoding="ISO-8859-1"?

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"

version="2.4"

<filter

<filter-nameCharacter Encoding Filter</filter-name

<filter-classjohn.control.EncodingFilter</filter-class

<init-param

<param-namecharset</param-name

<param-valueUTF-8</param-value

</init-param

</filter

<filter-mapping

<filter-nameCharacter Encoding Filter</filter-name

<url-pattern/*</url-pattern

</filter-mapping

......

</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)。

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有