<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頁面部分

      1. 頁面文字處理

      1.1概述

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

      STRUTS允許將不同語言的文字寫在多個資源文件中,每個資源對應一種語言,而在JSP頁面上則通過STRUTS標簽< bean:message>來顯示文字,該標簽可以根據瀏覽器的當前語言設置確定從對應的語種資源文件中取出字符串,顯示在頁面上。

      1.2資源文件

      實現國際化,首先需要準備好資源文件,需要支持的語言各對應一個。資源文件一定要用支持多國語言文字的文本編輯器(如WORD,一定不能用NOTEPAD、UE等)編寫,其格式如下:

      # Project international

      index.title=XX信息系統

      index.copyright=XXX有限公司 版權所有

      其中以#開頭的行是注釋,其它的行都是KEY=VALUE的形式,定義了一個KEY對應當前語言下的文字。保存資源文件時,需要在文件類型選項中選擇純文本類型,編碼選擇其它>>UTF-8,注意資源文件的擴展名為.properties,文件名可以任意取。

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

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

      其中-encoding參數指明編寫的資源文件的編碼格式,這里必須與編輯時選擇保存的編碼格式一致,后面兩個參數分別是需要轉換的資源文件名和轉換后保存的資源文件名。

      轉換后的資源文件名都必須以一個特定的前輟開頭,該前輟寫在struts-config.xml配置中,后輟是對應語言的簡稱,如

      英文(美國) ApplicationResources _en_US.properties

      中文(簡體)ApplicationResources _zh_CN.properties

      中文(繁體)ApplicationResources _tw.properties

      泰語 ApplicationResources _th.properties

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

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

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

      1.3 JSP頁面顯示

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

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

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

      ……(STRUTS及其它標簽庫引用)

      < html:html locale="true">

      JSP頁面的中文字要全部寫到資源文件中,注意每種語言資源文件都要寫到,否則在使用某種語言訪問系統時可能會報錯。JSP中使用STRUTS標簽< bean:message key="index.title"/>顯示資源文件中定義的字符串。這樣當改變瀏覽器的當前語言后,頁面會自動取得與瀏覽器當前語言對應的資源文件中的字符串顯示在頁面上。

      對于在ACTION的JAVA代碼中直接設置的變量,如需要在JSP頁面上進行顯示,那么在設置變量時也需要從資源文件中通過KEY取到當前語言的字符串,再使用request.setAttribute方法進行設置,這樣在JSP頁面上使用< bean:write>標簽展現設置的變量才會對應不同的語言會呈現不同的字符串。

      在JAVA代碼中取資源文件的信息的方法是,首先通過Globals.MESSAGES_KEY從request或session變量中取得資源對象(MessageResources),再調用MessageResources.getMessage方法即可取得相應的字符串,該方法需的兩個參數是當前語言區域設置(Locale)和字符串的KEY,其中當前語言區域設置(Locale)保存在SESSION變量中,其變量名為Globals.LOCALE_KEY,該變量在下一節手工設置語言時也有提到。

      1.4手工設置顯示語言

      用瀏覽器的語言設置來決定系統采用哪種語言展現可能會出現一個問題,就是用戶的瀏覽器語言與他想要使用系統的語言不一致的情況,如某客戶瀏覽器的語言設置為英文,但他還是在使用主站系統時看到的是中文界面。該問題可以通過手工選擇語言來解決,在程序中可以通過設置名為Globals.LOCALE_KEY(Globals.LOCALE_KEY 是 struts的常量)的SESSION變量,也能改變系統中當前語言的設置,代碼類似于:

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

      2. 帶有文字的圖片處理

      2.1靜態圖片

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

      2.2 JAVA生成動態圖片

      由于生成動態圖片是在服務器端進行,因此同樣需要將生成圖形字符的靜態部分放在資源文件中,如圖形名稱等,從資源文件中取字符串的方法在JSP頁面顯示部分已有說明;從數據庫中取出的部分可以不用做任何處理,直接從數據庫取出與靜態部分拼裝成圖形字符串即可,數據庫相關設置在數據庫部分有詳細說明。

      3. 頁面提交參數處理

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

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

      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);

      由于這種方式需要對每個request變量調用encodeURI方法,處理起來比較麻煩,但用FORM表單提交的方式即不需要進行任何處理,因此在開發時應盡量使用FORM表單提交的方式進行數據傳遞。

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

      在服務器端取得客戶端傳遞的參數時也需要對參數進行字符集的轉換后才可以下確使用,如

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

      但如此對每個變量都需要這樣處理也是非常麻煩,實際上可以利用servlet的Filter機制進行統一處理。在調用servlet(包括struts)時,在到達實際的servlet類前,會首先調用指定的Filter進行處理,Filter處理完成后再決定是否交給實際請求的servlet類處理。

      利用這一點,我們可以新建一個類繼承自Filter基類,重載doFilter方法,并在該方法中加入

      request.setCharacterEncoding(“UTF-8”);

      指定客戶端的字符集為UTF-8(默認客戶端的字符集為ISO8859),這樣在ACTION類中取得的參數就不需要進行任何的轉換處理了。

      配置Filter的地方在web.xml,在web.xml文件中加入類似這樣的配置即可以使自定義的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>
      二.數據庫設置

      在數據庫建庫時需要將數據庫的字符集指定為unicode編碼類型,以支持多種語言。

      有一點需要特別說明的是UTF-8是用3個字節表示一個漢字,這點在進行表結構設計時需要注意,適當設置字段的長度。



    MSN:
    posted on 2007-12-28 09:54 kylixlu 閱讀(191) 評論(0)  編輯  收藏 所屬分類: Struts
    主站蜘蛛池模板: 国产亚洲精品成人AA片新蒲金 | 国产精品久久亚洲一区二区| 人人狠狠综合久久亚洲88| 日韩免费毛片视频| 久久九九兔免费精品6| 任你躁在线精品免费| 免费无码一区二区| 亚洲成a人片在线观看天堂无码| 亚洲黄色片在线观看| 国产亚洲成av片在线观看| 亚洲福利中文字幕在线网址| 免费看片免费播放| 无码国产精品一区二区免费| 99精品一区二区免费视频| 在线观看免费黄网站| 一区二区三区免费高清视频| 国产大陆亚洲精品国产| 国产精品亚洲综合一区在线观看| 国产午夜亚洲精品国产| 2017亚洲男人天堂一| 久久精品国产亚洲αv忘忧草| 亚洲黄色在线播放| 亚洲视频免费在线观看| 亚洲av福利无码无一区二区 | 中美日韩在线网免费毛片视频| 亚洲中文无码mv| 亚洲精品视频在线免费| 亚洲精品视频免费在线观看| 亚洲美女aⅴ久久久91| 亚洲视频一区在线| 亚洲视频在线观看网址| 亚洲无砖砖区免费| 亚洲成a人片毛片在线| www.亚洲成在线| 国产成人亚洲合集青青草原精品 | 91福利视频免费| 91精品免费观看| 青苹果乐园免费高清在线| 麻豆成人精品国产免费| 亚洲M码 欧洲S码SSS222| 久久精品国产精品亚洲下载|