<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 66,comments - 41,trackbacks - 0

    一.JSP頁(yè)面部分

      1. 頁(yè)面文字處理

      1.1概述

      由于STRUTS提供了很好的國(guó)際化的支持,因此JSP頁(yè)面可以STRUTS的這一特性做到國(guó)際化。

      STRUTS允許將不同語(yǔ)言的文字寫(xiě)在多個(gè)資源文件中,每個(gè)資源對(duì)應(yīng)一種語(yǔ)言,而在JSP頁(yè)面上則通過(guò)STRUTS標(biāo)簽< bean:message>來(lái)顯示文字,該標(biāo)簽可以根據(jù)瀏覽器的當(dāng)前語(yǔ)言設(shè)置確定從對(duì)應(yīng)的語(yǔ)種資源文件中取出字符串,顯示在頁(yè)面上。

      1.2資源文件

      實(shí)現(xiàn)國(guó)際化,首先需要準(zhǔn)備好資源文件,需要支持的語(yǔ)言各對(duì)應(yīng)一個(gè)。資源文件一定要用支持多國(guó)語(yǔ)言文字的文本編輯器(如WORD,一定不能用NOTEPAD、UE等)編寫(xiě),其格式如下:

      # Project international

      index.title=XX信息系統(tǒng)

      index.copyright=XXX有限公司 版權(quán)所有

      其中以#開(kāi)頭的行是注釋?zhuān)渌男卸际荎EY=VALUE的形式,定義了一個(gè)KEY對(duì)應(yīng)當(dāng)前語(yǔ)言下的文字。保存資源文件時(shí),需要在文件類(lèi)型選項(xiàng)中選擇純文本類(lèi)型,編碼選擇其它>>UTF-8,注意資源文件的擴(kuò)展名為.properties,文件名可以任意取。

      這樣保存的資源文件還不能直接被STRUTS使用,JDK提供了一個(gè)工具native2ascii對(duì)編寫(xiě)的資源文件進(jìn)行轉(zhuǎn)換,該工具位于%JDK%/bin/目錄下,一般在JDK正確安裝后可以直接在命令行使用。使用native2ascii工具轉(zhuǎn)換的資源的文件的命令行格式如下:

      native2ascii -encoding UTF-8 ApplicationResources.properties ApplicationResources_zh_CN.properties

      其中-encoding參數(shù)指明編寫(xiě)的資源文件的編碼格式,這里必須與編輯時(shí)選擇保存的編碼格式一致,后面兩個(gè)參數(shù)分別是需要轉(zhuǎn)換的資源文件名和轉(zhuǎn)換后保存的資源文件名。

      轉(zhuǎn)換后的資源文件名都必須以一個(gè)特定的前輟開(kāi)頭,該前輟寫(xiě)在struts-config.xml配置中,后輟是對(duì)應(yīng)語(yǔ)言的簡(jiǎn)稱(chēng),如

      英文(美國(guó)) ApplicationResources _en_US.properties

      中文(簡(jiǎn)體)ApplicationResources _zh_CN.properties

      中文(繁體)ApplicationResources _tw.properties

      泰語(yǔ) ApplicationResources _th.properties

      資源文件的存放目錄可以是/WEB-INF/classes/下的任意目錄,為了便于管理 ,建議在/WEB-INF/ classes/下建立目錄resources,將所有的資源文件都放在該目錄下。STRUTS通過(guò)配置文件struts-config.xml配置資源文件的所在位置,如:

      < message-resources parameter="resources.ApplicationResources" />

    其中目錄以包的方式表示。

      1.3 JSP頁(yè)面顯示

      為了支持國(guó)際化,JSP頁(yè)面的編碼方式需要設(shè)成UTF-8,即在頁(yè)面的頭部加入以下幾行:

      < %@ page contentType="text/html; charset=UTF-8" %>

      < %@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

      ……(STRUTS及其它標(biāo)簽庫(kù)引用)

      < html:html locale="true">

      JSP頁(yè)面的中文字要全部寫(xiě)到資源文件中,注意每種語(yǔ)言資源文件都要寫(xiě)到,否則在使用某種語(yǔ)言訪問(wèn)系統(tǒng)時(shí)可能會(huì)報(bào)錯(cuò)。JSP中使用STRUTS標(biāo)簽< bean:message key="index.title"/>顯示資源文件中定義的字符串。這樣當(dāng)改變?yōu)g覽器的當(dāng)前語(yǔ)言后,頁(yè)面會(huì)自動(dòng)取得與瀏覽器當(dāng)前語(yǔ)言對(duì)應(yīng)的資源文件中的字符串顯示在頁(yè)面上。

      對(duì)于在ACTION的JAVA代碼中直接設(shè)置的變量,如需要在JSP頁(yè)面上進(jìn)行顯示,那么在設(shè)置變量時(shí)也需要從資源文件中通過(guò)KEY取到當(dāng)前語(yǔ)言的字符串,再使用request.setAttribute方法進(jìn)行設(shè)置,這樣在JSP頁(yè)面上使用< bean:write>標(biāo)簽展現(xiàn)設(shè)置的變量才會(huì)對(duì)應(yīng)不同的語(yǔ)言會(huì)呈現(xiàn)不同的字符串。

      在JAVA代碼中取資源文件的信息的方法是,首先通過(guò)Globals.MESSAGES_KEY從request或session變量中取得資源對(duì)象(MessageResources),再調(diào)用MessageResources.getMessage方法即可取得相應(yīng)的字符串,該方法需的兩個(gè)參數(shù)是當(dāng)前語(yǔ)言區(qū)域設(shè)置(Locale)和字符串的KEY,其中當(dāng)前語(yǔ)言區(qū)域設(shè)置(Locale)保存在SESSION變量中,其變量名為Globals.LOCALE_KEY,該變量在下一節(jié)手工設(shè)置語(yǔ)言時(shí)也有提到。

      1.4手工設(shè)置顯示語(yǔ)言

      用瀏覽器的語(yǔ)言設(shè)置來(lái)決定系統(tǒng)采用哪種語(yǔ)言展現(xiàn)可能會(huì)出現(xiàn)一個(gè)問(wèn)題,就是用戶(hù)的瀏覽器語(yǔ)言與他想要使用系統(tǒng)的語(yǔ)言不一致的情況,如某客戶(hù)瀏覽器的語(yǔ)言設(shè)置為英文,但他還是在使用主站系統(tǒng)時(shí)看到的是中文界面。該問(wèn)題可以通過(guò)手工選擇語(yǔ)言來(lái)解決,在程序中可以通過(guò)設(shè)置名為Globals.LOCALE_KEY(Globals.LOCALE_KEY 是 struts的常量)的SESSION變量,也能改變系統(tǒng)中當(dāng)前語(yǔ)言的設(shè)置,代碼類(lèi)似于:

       Locale newLocale = new Locale( language, country );
      session.setAttribute( Globals.LOCALE_KEY, newLocale );
      其中變量language, country 可以通過(guò)用戶(hù)的選擇設(shè)置相應(yīng)的值,各種語(yǔ)言的對(duì)應(yīng)值參考http://www.unicode.org/unicode/onlinedat/countries.html。

      2. 帶有文字的圖片處理

      2.1靜態(tài)圖片

      帶有文字的圖片應(yīng)該也要根據(jù)語(yǔ)言的不同而顯示不同的圖片,但圖片本身不是文本信息,無(wú)法直接用< bean:message>標(biāo)簽來(lái)完成國(guó)際化操作。但由于頁(yè)面上顯示圖片取決于< image>標(biāo)簽的src屬性,因此可以為每個(gè)圖片對(duì)應(yīng)各種語(yǔ)言的都準(zhǔn)備一個(gè)版本,文件名或路徑有所差異,然后將每種語(yǔ)言對(duì)應(yīng)的圖片的路徑及文件名放在資源文件中,而在JSP頁(yè)面上< image>標(biāo)簽的src屬性由< bean:message>標(biāo)簽指定,這樣即可以完成圖片的國(guó)際化。

      2.2 JAVA生成動(dòng)態(tài)圖片

      由于生成動(dòng)態(tài)圖片是在服務(wù)器端進(jìn)行,因此同樣需要將生成圖形字符的靜態(tài)部分放在資源文件中,如圖形名稱(chēng)等,從資源文件中取字符串的方法在JSP頁(yè)面顯示部分已有說(shuō)明;從數(shù)據(jù)庫(kù)中取出的部分可以不用做任何處理,直接從數(shù)據(jù)庫(kù)取出與靜態(tài)部分拼裝成圖形字符串即可,數(shù)據(jù)庫(kù)相關(guān)設(shè)置在數(shù)據(jù)庫(kù)部分有詳細(xì)說(shuō)明。

      3. 頁(yè)面提交參數(shù)處理

      頁(yè)面上向WEB服務(wù)器提交參數(shù)有兩種方式,一是在訪問(wèn)URL后面附加上request變量,這樣的變量在服務(wù)器端可以通過(guò)request.getParameter方法得到,另一種方式是在JSP頁(yè)面上用FORM表單方式提交,這種方法提交的變量在服務(wù)器端可以通過(guò)form的getXXX方法取到變量的值。

     當(dāng)WEB系統(tǒng)需要國(guó)際化時(shí),JSP頁(yè)面的編碼方式被指定為UTF-8(前面已有說(shuō)明),也就是說(shuō)頁(yè)面上可以處理各國(guó)文字,在使用URL傳遞變量時(shí)需要將變量用JS方法encodeURI方法處理過(guò),才能在服務(wù)器端得到正確的值,如

      location.href="int/do/common/queryUserInfo.do?sqlcode=QUERY0001&hh="+encodeURI(document.all.hh.value)+"&hm="+encodeURI(document.all.hm.value)+"&bmbh="+encodeURI(document.all.bmbh.value);

      由于這種方式需要對(duì)每個(gè)request變量調(diào)用encodeURI方法,處理起來(lái)比較麻煩,但用FORM表單提交的方式即不需要進(jìn)行任何處理,因此在開(kāi)發(fā)時(shí)應(yīng)盡量使用FORM表單提交的方式進(jìn)行數(shù)據(jù)傳遞。

      如果需要JAVA代碼中生成URL,則其中傳遞的參數(shù)也需要調(diào)用URLEncoder.encode方法進(jìn)行處理,并指定編碼方式為"UTF-8"。

      在服務(wù)器端取得客戶(hù)端傳遞的參數(shù)時(shí)也需要對(duì)參數(shù)進(jìn)行字符集的轉(zhuǎn)換后才可以下確使用,如

      strString = new String(strString.getBytes("ISO-8859-1"), "GBK");

      但如此對(duì)每個(gè)變量都需要這樣處理也是非常麻煩,實(shí)際上可以利用servlet的Filter機(jī)制進(jìn)行統(tǒng)一處理。在調(diào)用servlet(包括struts)時(shí),在到達(dá)實(shí)際的servlet類(lèi)前,會(huì)首先調(diào)用指定的Filter進(jìn)行處理,F(xiàn)ilter處理完成后再?zèng)Q定是否交給實(shí)際請(qǐng)求的servlet類(lèi)處理。

      利用這一點(diǎn),我們可以新建一個(gè)類(lèi)繼承自Filter基類(lèi),重載doFilter方法,并在該方法中加入

      request.setCharacterEncoding(“UTF-8”);

      指定客戶(hù)端的字符集為UTF-8(默認(rèn)客戶(hù)端的字符集為ISO8859),這樣在ACTION類(lèi)中取得的參數(shù)就不需要進(jìn)行任何的轉(zhuǎn)換處理了。

      配置Filter的地方在web.xml,在web.xml文件中加入類(lèi)似這樣的配置即可以使自定義的Filter生效:

       < filter>
      < filter-name>charsetfilter< /filter-name>
      < filter-class> international.CharsetFilter< /filter-class>
      < init-param>
      < param-name>encoding< /param-name>
      < param-value>UTF-8< /param-value>
      < /init-param>
      < /filter>
      < filter-mapping>
      < filter-name>charsetfilter< /filter-name>
      < url-pattern>/*< /url-pattern>
      < /filter-mapping>
      二.數(shù)據(jù)庫(kù)設(shè)置

      在數(shù)據(jù)庫(kù)建庫(kù)時(shí)需要將數(shù)據(jù)庫(kù)的字符集指定為unicode編碼類(lèi)型,以支持多種語(yǔ)言。

      有一點(diǎn)需要特別說(shuō)明的是UTF-8是用3個(gè)字節(jié)表示一個(gè)漢字,這點(diǎn)在進(jìn)行表結(jié)構(gòu)設(shè)計(jì)時(shí)需要注意,適當(dāng)設(shè)置字段的長(zhǎng)度。



    MSN:
    posted on 2007-12-28 09:54 kylixlu 閱讀(199) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Struts

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 色窝窝亚洲av网| 亚洲国产人成网站在线电影动漫 | 亚洲三级高清免费| 久久久亚洲精品国产| 久久国产福利免费| 亚洲精品无码专区久久同性男| 亚洲成AV人片在WWW| 国产三级电影免费观看| 亚洲AV无码AV吞精久久| 国产gav成人免费播放视频| 国产精品亚洲综合天堂夜夜| 国产一精品一aⅴ一免费| 国产亚洲综合视频| 亚洲日本韩国在线| 华人在线精品免费观看| 亚洲综合国产一区二区三区| 最近的2019免费中文字幕| 亚洲精品无码专区久久久| 182tv免费视频在线观看| 久久精品亚洲一区二区| 免费观看无遮挡www的视频 | 国产精品亚洲色婷婷99久久精品| 免费在线观看黄色毛片| 久久久WWW成人免费精品| 国产成人亚洲精品青草天美| 亚洲高清视频免费| 亚洲国产精品无码久久98| 国产亚洲av片在线观看18女人| 鲁丝片一区二区三区免费| 亚洲一级视频在线观看| 国产一区视频在线免费观看| 成人片黄网站色大片免费观看cn | 亚洲国产精品一区第二页| 四虎精品视频在线永久免费观看| 亚洲性无码AV中文字幕| 亚洲国产黄在线观看| 性色午夜视频免费男人的天堂| 亚洲最大的成人网站| 国产亚洲精品拍拍拍拍拍| 51精品视频免费国产专区| 毛片亚洲AV无码精品国产午夜|