posts - 78, comments - 34, trackbacks - 0, articles - 1
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
           

                   今日的課程內(nèi)容是JavaWEB國(guó)際化和EL表達(dá)式,EL表達(dá)式在之前的課程中有使用過,但并未深入。今日的內(nèi)容整體上比較輕松,當(dāng)我看到JavaWEB國(guó)際化時(shí),還以為內(nèi)容很多。國(guó)際化嗎!以為在某些編寫操作上有什么國(guó)際化的特殊要求?呵呵,其實(shí)我們的編寫方式本身就已經(jīng)是國(guó)際化的了。這里的國(guó)際化是指WEB應(yīng)用國(guó)際化,跟桌面應(yīng)用國(guó)際化沒什么區(qū)別。EL表達(dá)式使用起來(lái)到是方便許多。

           

                   今日每位同學(xué)的學(xué)習(xí)效果整體上感覺不錯(cuò)!可能是學(xué)習(xí)完了WEB基礎(chǔ),學(xué)習(xí)高級(jí)部分都相對(duì)容易些吧!不過方老師為了讓大家吸收的好,對(duì)課程內(nèi)容進(jìn)行了調(diào)整,沒有講基礎(chǔ)時(shí)那么緊縮,拿出了些時(shí)間給學(xué)生們做練習(xí)。明天就開始講數(shù)據(jù)庫(kù)了,之后就是JSP自定義標(biāo)簽,等這些講完了,終于可以進(jìn)行高級(jí)開發(fā)了!學(xué)習(xí)基礎(chǔ)是枯燥的,學(xué)習(xí)應(yīng)用才有樂趣。這是正常現(xiàn)象,比如我在學(xué)校時(shí)特別不喜歡學(xué)習(xí)語(yǔ)文,學(xué)習(xí)完不知做什么用。話我說(shuō)的不差勁!直到參加工作時(shí),發(fā)現(xiàn)寫作是很重要的,這時(shí)我開始喜歡上了語(yǔ)文。哎,枯燥的教育好煩!我與其為此而煩,還不如為此做些事情!

           

                   國(guó)際化開發(fā)就是,為了應(yīng)對(duì)不同國(guó)家用戶。將軟件的語(yǔ)言,數(shù)據(jù),使用習(xí)慣等,適合相應(yīng)的國(guó)家。

                            我們?cè)趯?shí)際的軟件使用中,桌面軟件的語(yǔ)言設(shè)置選項(xiàng)也比較常見,這就是國(guó)際化。WEB被廣泛應(yīng)用后,一些國(guó)際化的網(wǎng)站也有針對(duì)不同國(guó)家訪問的本地語(yǔ)言。

                    一個(gè)合格的國(guó)際化軟件,必須對(duì)程序中固定使用的文本元素,例如:菜單、提示信息、錯(cuò)誤信息等以用戶本地使用的語(yǔ)言進(jìn)行顯示。也必須對(duì)程序中的一些動(dòng)態(tài)信息以用戶本地語(yǔ)言進(jìn)行顯示,例如:日期時(shí)間、貨幣等。

                    WEB應(yīng)用的國(guó)際化實(shí)現(xiàn)方式與桌面軟件的國(guó)際化實(shí)現(xiàn)方式類同。但是JAVA將應(yīng)用做的比較完美,JAVA提供的類可以方便軟件國(guó)際化的工作。下面讓我們看一下桌面軟件國(guó)際化的實(shí)現(xiàn)原理。

                    將桌面軟件國(guó)際化,比如將菜單國(guó)際化顯示:

          1.               編寫一個(gè)配置文件(*.ini)。

          2.               在配置文件中設(shè)置節(jié)點(diǎn)名為國(guó)家或語(yǔ)言的名字,比如“中文簡(jiǎn)體”、“中文繁體”、“English

          3.               在各語(yǔ)言節(jié)點(diǎn)中添加配置項(xiàng),各節(jié)點(diǎn)的配置項(xiàng)名稱必須相同,比如在“中文簡(jiǎn)體”中添加“open=文件”節(jié)點(diǎn),在“中文繁體”節(jié)點(diǎn)中添加“open=打開”,在“Englis”節(jié)點(diǎn)中添加“open=open”。

          4.               軟件在啟動(dòng)時(shí),根據(jù)用戶選擇的語(yǔ)言,去對(duì)應(yīng)的節(jié)點(diǎn)下讀取指定的配置項(xiàng),并使用配置項(xiàng)的值做為菜單顯示。

          上面就是桌面軟件國(guó)際化的實(shí)現(xiàn)過程。接下來(lái)讓我們看一下WEB應(yīng)用中,國(guó)際化的實(shí)現(xiàn)方法。

          WEB應(yīng)用國(guó)際化,比如將登錄頁(yè)面國(guó)際化:

          1.        根據(jù)WEB應(yīng)用面向的重點(diǎn)區(qū)域,編寫相應(yīng)的的配置文件(*.properties)。比如中國(guó)的配置文件“login_zh.properties”、美國(guó)的配置文件“login_en.properties”。注意:配置文件的命名,必須是“文件名+語(yǔ)言代碼.properties”。

          2.        所有的配置文件必須使用相同的鍵名稱,比如“name=用戶名”、“name=name”。

          3.        JAVA提供了一個(gè)類ResourceBundle,專門用于讀取這種用于特定語(yǔ)言環(huán)境的資源。調(diào)用ResourceBundle.getBundle方法時(shí),我們只需要傳遞參數(shù)一“配置文件所在WEB應(yīng)用下的目錄+login”和參數(shù)二本地信息(Locale)即可!ResourceBundle類會(huì)自動(dòng)根據(jù)Locale信息中的語(yǔ)言代碼,去讀取指定的配置文件。

          4.        在登錄頁(yè)面,使用ResourceBundleobj.getString(“鍵名稱”),讀取相應(yīng)該的值并顯示到頁(yè)面上。

          可見JAVA將應(yīng)用做的如此完美,將配置文件分開這樣有助于減小文件的大小。并且ResourceBundle會(huì)自動(dòng)根據(jù)Locale設(shè)置的信息,去讀取相應(yīng)的配置文件。

                   以上我們說(shuō)的都是對(duì)靜態(tài)數(shù)據(jù)的國(guó)際化,那動(dòng)態(tài)數(shù)據(jù)應(yīng)該如何實(shí)現(xiàn)國(guó)際化呢?動(dòng)態(tài)數(shù)據(jù),比如數(shù)值,貨幣,時(shí)間,日期等數(shù)據(jù)。JAVA對(duì)此也做了相應(yīng)的工作,處理時(shí)間有DateFormat類,處理數(shù)值有NumberFormat類。關(guān)于這兩個(gè)類的使用,我也不做練習(xí)了十分簡(jiǎn)單,查看JDK文檔,已經(jīng)說(shuō)明的很詳細(xì)了。

                   動(dòng)態(tài)文本(MessageFormat),用于處理一個(gè)字符串包含了多個(gè)與國(guó)際化相關(guān)的數(shù)據(jù)。看下面的代碼:

          import java.text.MessageFormat;

          import java.util.Date;

           

          public class MessageFormatTest {

           

              public static void main(String[] args) {

                

                 //比如有這樣一片段文字:在20091128我來(lái)到了北京,我買的是打折機(jī)票,票價(jià)¥330.00

                 String str = "{0,date,long}我來(lái)到了北京,我買的是打折機(jī)票,票價(jià){1, number, currency}";

                 Object[] reargs = {new Date(), 330};

                 MessageFormat mf = new MessageFormat(str);

                

                 StringBuffer sb = new StringBuffer();

                 System.out.println(mf.format(reargs));

              }

           

          }

           

                   DateFormat NumberFormat相比,MessageFormat使用起來(lái)復(fù)雜一點(diǎn)。但功能比較強(qiáng)大,對(duì)于它的國(guó)際化應(yīng)用,我還不明朗。在學(xué)習(xí)框架時(shí),我想可能會(huì)明朗些吧!

          下午重點(diǎn)學(xué)習(xí)EL表達(dá)式,使用上并不復(fù)雜。只過JAVA應(yīng)用總是搞出來(lái)這么多名堂,其實(shí)就是為了簡(jiǎn)化開發(fā)。這也是可以理解的!

          EL——ExpressionLanguage,它是用于替換JSP頁(yè)面中的腳本表達(dá)式。之前也有提到過,在JSP頁(yè)面中使用腳本表達(dá)式進(jìn)行數(shù)據(jù)顯示是一件痛苦的事。若想使用EL表達(dá)式,WEB服務(wù)器必須支持Servlet2.4/JSP2.0技術(shù)。EL都有哪些功能呢?比如${標(biāo)識(shí)符}EL拿到標(biāo)識(shí)符后會(huì)到自己的隱式對(duì)象中去查找,如果隱式對(duì)象中不存在,則到page域、request域、session域、application域中去查找。

          舉例:${abcd}abcd不是EL的隱式對(duì)象。但它在request域中(request.setAttribute (“abcd”,”hi”);),所以會(huì)調(diào)用pageContext.findAttribute方法進(jìn)行查找,${abcd}代表的就是request.getAttribute(“abcd”);EL都具有哪些隱式對(duì)象呢?

          pageContextpageScoperequestScopesessionScopeapplicationScopeparamparamValuesheaderheaderValuescookieinitParam。這些都是Servlet中相關(guān)的作用域?qū)ο螅热?/span>${requestScope.abcd}就是獲取request中的abcd屬性。既然${abcd}${requestScope.abcd}有什么區(qū)別,使用${abcd}不是更簡(jiǎn)單嗎?咱們來(lái)看一下這種情況:request.setAttribute(“abcd”,”hiRequest”); session.setAttribute(“abcd”,”hiSession”);${abcd},獲取的是request中的abcd,如果request中沒有abcd它獲取的就是sessionabcd。這下明白了吧!如果兩個(gè)域中具有相同的屬性,那么些時(shí)EL的隱式對(duì)象就發(fā)揮了作用。EL中的隱式對(duì)象完全可以操作相應(yīng)域的數(shù)據(jù)。

          EL也具有基本的運(yùn)算處理能力:算術(shù)運(yùn)算、邏輯運(yùn)算和關(guān)系運(yùn)算。在此就不一一列舉了!

          EL中也可以編寫自己的函數(shù):

          1.        編寫一個(gè)類,定義靜態(tài)方法:

          public class MyEl {

              public static String getMessage(){

                 return "HI,我是EL自定義函數(shù)!!!";

              }

          }

           

          2.        WEB-INF目錄中添加一個(gè)*.tld配置文件:

          <?xml version="1.0" encoding="UTF-8" ?>

          <taglib 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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

              version="2.0">

              <description>A tag library exercising SimpleTag handlers.</description>

              <tlib-version>1.0</tlib-version>

              <short-name>SimpleTagLibrary</short-name>

              <uri>/SimpleTagLibrary</uri>

             

              <function>

                  <name>print</name>

                 <function-class>cn.itcast.cc.el.MyEl</function-class>

                 <function-signature>java.lang.String getMessage()</function-signature>

              </function>

          </taglib>

           

          3.        在要調(diào)用本函數(shù)的JSP頁(yè)面中添加引用:

          %@taglib prefix="cc" uri="/SimpleTagLibrary" %

          4.調(diào)用方法:${cc:print()}

          上面就是編寫自定義EL函數(shù)的過程,Apache組織為EL提供了一些比較常用的函數(shù)。比如文件處理函數(shù),老師說(shuō)這一點(diǎn)要注意,以后不需要在Servlet中把處理好的文本傳遞給頁(yè)面,可以在頁(yè)面中直接使用Apache提供的函數(shù)來(lái)方便快捷的處理文本。

          Apache提供的EL常用函數(shù)在Standard.jar包中的“org.apache.taglibs.standard.functions.Functions”包中。UIRhttp://localhost:8080/jsp/jstl/functions

                  


          評(píng)論

          # re: 2009-11-28 傳智播客 java web——國(guó)際化、EL表達(dá)式  回復(fù)  更多評(píng)論   

          2012-10-08 20:02 by breaknull
          每天寫一次日記心得真是一件特別好的事!!

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 安龙县| 景德镇市| 漳平市| 穆棱市| 伽师县| 内乡县| 湟源县| 临江市| 岚皋县| 休宁县| 竹山县| 高邑县| 灵璧县| 井冈山市| 兴义市| 赫章县| 桂林市| 鄱阳县| 公安县| 开平市| 惠州市| 竹溪县| 阜新市| 汤原县| 阿克苏市| 台湾省| 安塞县| 邓州市| 手机| 冕宁县| 衢州市| 八宿县| 苏州市| 岑巩县| 山东| 尚义县| 鹿邑县| 西城区| 宜兴市| 桐城市| 滕州市|