日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

JSP和Servlet對(duì)中文的處理過程(7)_JSP教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:困擾JSP的一些問題與解決方法
如今每一個(gè)使用servlets的開發(fā)者都知道JSP,一種由Sun公司發(fā)明并花費(fèi)大量精力加以推行并建構(gòu)在servlet技術(shù)之上的web技術(shù)。JSP將servlet中的html代碼脫離了出來(lái),從而可以加速web應(yīng)用開發(fā)

如果不指定Compile-charset或Servlet-charset,其默認(rèn)值均為ISO8859-1。

當(dāng)Compile-charset=Servlet-charset時(shí),第2步和第4步能互逆,“抵消”,顯示結(jié)果均能正確。讀者可試著寫一下Compile-charset<>Servlet-charset時(shí)的情況,肯定是不正確的。

當(dāng)輸出對(duì)象是數(shù)據(jù)庫(kù)時(shí)

輸出到數(shù)據(jù)庫(kù)時(shí),原理與輸出到瀏覽器也是一樣的。本節(jié)只是Servlet為例,JSP的情況請(qǐng)讀者自行推導(dǎo)。

假設(shè)有一個(gè)Servlet,它能接收來(lái)自客戶端(IE,簡(jiǎn)體中文)的漢字字符串,然后把它寫入到內(nèi)碼為ISO8859-1的數(shù)據(jù)庫(kù)中,然后再?gòu)臄?shù)據(jù)庫(kù)中取出這個(gè)字符串,顯示到客戶端。

表9 輸出對(duì)象是數(shù)據(jù)庫(kù)時(shí)的變化過程(1)

序號(hào)
步驟說明
結(jié)果

1
在IE中輸入“中文”
D6 D0 CE C4
IE

2
IE把字符串轉(zhuǎn)變成UTF,并送入傳輸流中
E4 B8 AD E6 96 87

3
Servlet接收到輸入流,用readUTF讀取
4E 2D 65 87(unicode)
Servlet

4
編程者在Servlet中必須把字符串根據(jù)GB2312還原為字節(jié)流
D6 D0 CE C4

5
編程者根據(jù)數(shù)據(jù)庫(kù)內(nèi)碼ISO8859-1生成新的字符串
00 D6 00 D0 00 CE 00 C4

6
把新生成的字符串提交給JDBC
00 D6 00 D0 00 CE 00 C4

7
JDBC檢測(cè)到數(shù)據(jù)庫(kù)內(nèi)碼為ISO8859-1
00 D6 00 D0 00 CE 00 C4
JDBC

8
JDBC把接收到的字符串按照ISO8859-1生成字節(jié)流
D6 D0 CE C4

9
JDBC把字節(jié)流寫入數(shù)據(jù)庫(kù)中
D6 D0 CE C4

10
完成數(shù)據(jù)存儲(chǔ)工作
D6 D0 CE C4 數(shù)據(jù)庫(kù)

以下是從數(shù)據(jù)庫(kù)中取出數(shù)的過程

11
JDBC從數(shù)據(jù)庫(kù)中取出字節(jié)流
D6 D0 CE C4
JDBC

12
JDBC按照數(shù)據(jù)庫(kù)的字符集ISO8859-1生成字符串,并提交給Servlet
00 D6 00 D0 00 CE 00 C4 (Unicode)

13
Servlet獲得字符串
00 D6 00 D0 00 CE 00 C4 (Unicode)
Servlet

15
編程者必須根據(jù)數(shù)據(jù)庫(kù)的內(nèi)碼ISO8859-1還原成原始字節(jié)流
D6 D0 CE C4

16
編程者必須根據(jù)客戶端字符集GB2312生成新的字符串
4E 2D 65 87

(Unicode)

Servlet準(zhǔn)備把字符串輸出到客戶端

17
Servlet根據(jù)生成字節(jié)流
D6 D0 CE C4
Servlet

18
Servlet把字節(jié)流輸出到IE中,如果已指定,還會(huì)設(shè)置IE的編碼為
D6 D0 CE C4

19
IE根據(jù)指定的編碼或默認(rèn)編碼查看結(jié)果
“中文”(正確顯示)
IE


解釋一下,表中第4第5步和第15第16步是用紅色標(biāo)記的,表示要由編碼者來(lái)作轉(zhuǎn)換。第4、5兩步其實(shí)就是一句話:“new String(source.getBytes("GB2312"), "ISO8859-1")”。第15、16兩步也是一句話:“new String(source.getBytes("ISO8859-1"), "GB2312")”。親愛的讀者,你在這樣編寫代碼時(shí)是否意識(shí)到了其中的每一個(gè)細(xì)節(jié)呢?

至于客戶端內(nèi)碼和數(shù)據(jù)庫(kù)內(nèi)碼為其它值時(shí)的流程,和輸出對(duì)象是系統(tǒng)控制臺(tái)時(shí)的流程,請(qǐng)讀者自己想吧。明白了上述流程的原理,相信你可以輕松地寫出來(lái)。

行文至此,已可告一段落了。終點(diǎn)又回到了起點(diǎn),對(duì)于編程者而言,幾乎是什么影響都沒有。

因?yàn)槲覀冊(cè)缇捅桓嬷@么做了。

以下給出一個(gè)結(jié)論,作為結(jié)尾。

1、 在Jsp文件中,要指定contentType,其中,charset的值要與客戶端瀏覽器所用的字符集一樣;對(duì)于其中的字符串常量,不需做任何內(nèi)碼轉(zhuǎn)換;對(duì)于字符串變量,要求能根據(jù)ContentType中指定的字符集還原成客戶端能識(shí)別的字節(jié)流,簡(jiǎn)單地說,就是“字符串變量是基于字符集的”;

2、 在Servlet中,必須用HttpServletResponse.setContentType()設(shè)置charset,且設(shè)置成與客戶端內(nèi)碼一致;對(duì)于其中的字符串常量,需要在Javac編譯時(shí)指定encoding,這個(gè)encoding必須與編寫源文件的平臺(tái)的字符集一樣,一般說來(lái)都是GB2312或GBK;對(duì)于字符串變量,與JSP一樣,必須“是基于字符集的”。

分享:JavaBean 在jsp和serlvle中傳遞技術(shù)要點(diǎn)
javaBean 在jsp和serlvle中的傳遞技術(shù)要點(diǎn) 一、 初始化javaBean 1、 在jsp中 在上一段的代碼中執(zhí)行過程如下: ? 按照scope的參數(shù)尋找相同id的javabean,如果找到了就跳出該; ?

共7頁(yè)上一頁(yè)1234567下一頁(yè)
來(lái)源:模板無(wú)憂//所屬分類:JSP教程/更新時(shí)間:2008-08-22
相關(guān)JSP教程