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

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

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

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

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

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

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

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

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

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

序號
步驟說明
結(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ù)庫內(nèi)碼ISO8859-1生成新的字符串
00 D6 00 D0 00 CE 00 C4

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

7
JDBC檢測到數(shù)據(jù)庫內(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ù)庫中
D6 D0 CE C4

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

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

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

12
JDBC按照數(shù)據(jù)庫的字符集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ù)庫的內(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中,如果已指定,還會設(shè)置IE的編碼為
D6 D0 CE C4

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


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

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

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

因為我們早就被告之要這么做了。

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

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

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

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

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