大大毛 的筆記

            DDM's Note

          哪怕沒有辦法一定有說法,
          就算沒有鴿子一定有烏鴉,
          固執(zhí)無罪 夢想有價(jià),
          讓他們驚訝.

          posts - 14, comments - 23, trackbacks - 0, articles - 58
             :: 首頁 ::  :: 聯(lián)系 ::  :: 管理

          Struts國際化的快速演示

          Posted on 2006-07-24 22:59 大大毛 閱讀(452) 評論(0)  編輯  收藏 所屬分類: Struts
          ???前言:
          ??????雖說剛看"精通Struts"幾章,已經(jīng)迫不及待的想試試它的"國際化"效果了.測試環(huán)境:JDK1.4 + Tomcat5 +?中文XP

          ??????先用的方法是網(wǎng)絡(luò)上流行的方法:
          ??????在IE/Internet選項(xiàng)/語言 中刪除掉中文,選擇英文,如此類推,則可以看到頁面的國際化效果.
          ??????但是這種方法有缺點(diǎn):
          ?????????1.很麻煩;
          ?????????2.非常的不靈,剛開始俺整了幾回都偶爾出效果了,但是玩這招多了,Tomcat5.0.29就再也不理我了,任我怎么變,它依舊顯示中文.
          ??????基于第2點(diǎn)那是非解決不可啊

          ???
          分析:
          ??????按"精通Struts"里面對于Struts國際化的解釋,應(yīng)該是頁面會從Session(如果有的話)中取出Locale對象,只有當(dāng)該對象為空時(shí)才會將request中的Locale對象放入session中去,而資源文件的選擇是依據(jù)session中的Locale對象的,如此這般,就可以拿出一個(gè)簡單點(diǎn)演示國際化效果的方法來:
          ?????????提供一個(gè)JSP讓用戶選擇語種,如英文,中文.提交到Action時(shí) 來個(gè)相應(yīng)處理
          ???????? if (action.equalsIgnoreCase( " english " ))?{
          ????????????request.getSession().setAttribute(Globals.LOCALE_KEY,
          new ?Locale( " en " , ""
          ));
          ????????}
          ????????
          if (action.equalsIgnoreCase( " chinese "
          ))?{
          ????????????request.getSession().setAttribute(Globals.LOCALE_KEY,
          new ?Locale( " zh " , " CN "
          ));
          ????????}
          ?????????這樣做應(yīng)該是符合Struts的要求的,結(jié)果測試失敗.

          ???
          解決辦法:
          ??????事實(shí)證明,并不是理解Struts有誤, 問題只是出在容器的處理方法上,還是按上面的方法,搭配Tomcat5.5測試成功,現(xiàn)在要想看"國際化"的效果就輕松多了,只要在應(yīng)用的主菜單上加入語言選項(xiàng),以后的各種跳轉(zhuǎn)都一切OK.

          ???
          還存在的問題:
          ??????經(jīng)測試證明,這種方法能夠達(dá)到根據(jù)菜單自動(dòng)切換語種顯示的目的,但是也注意到了一點(diǎn),就是 request.getLocale(); 方法得到的始終都是本機(jī)IE的編碼,這與session中存放的那個(gè)Locale是不一致的,當(dāng)然也是利用了Struts需要先判斷session中的Locale對象是否為空才進(jìn)行改變這一點(diǎn).不過這也帶來這種演示方法的局限性:
          ??????1.有些Struts應(yīng)用是允許客戶端在應(yīng)用的過程中改變Locale的,因此為此覆蓋了RequestProccessor.proccessLocale()方法,支持動(dòng)態(tài)的更新.這樣會造成此種演示方法的可恥失敗;
          ??????2.必須依賴于session,
          ??????3.如果程序中存在有手工從資源文件中取資源的情況(如我提到過的標(biāo)簽中的使用),那么
          ?
          ???getMessage(?(Locale)session.getAttribute(Globals.LOCALE_KEY)?, key )
          ??????與
          ???getMessage( request.getLocale() ,?key?)
          ??????的效果是會完全不同的.

          ??
          ?有關(guān)Tomcat5.5的一點(diǎn)提示:
          ??????網(wǎng)上有說
          Tomcat5.5 ?是不能與 JDK1.4 搭配使用的,只能用 JDK5 ,這是錯(cuò)誤的.
          ??????Tomcat5.5如果搭配 JDK1.4 使用的話,需要注意一點(diǎn)的是:
          ?????????1.不能使用那個(gè)for windows 的EXE安裝文件,需要下載ZIP文件進(jìn)行安裝;
          ?????????2.除了必需下載的那個(gè) apache-tomcat-5.5.x.zip 主體文件外,使用 JDK1.4 還必須下載那個(gè) apache-tomcat-5.5.x-compat.zip 文件才行,下載回來后解壓到同一個(gè)目錄中即可直接使用.
          ?????????3.手工添加管理員
          ????????????向Tomcat\conf\tomcat-users.xml中加入
          ???????????????<role rolename="admin" />
          ???????????????<role rolename="manager" />
          ???????????????<user username="admin" password="你的密碼" roles="admin,manager" />

          ??????另外Tomcat5.5與Tomcat5.0還有一個(gè)顯著的區(qū)別就是在數(shù)據(jù)源的使用上
          ?????????Tomcat5.0是用的DBCP數(shù)據(jù)源的,因此common/lib下有DBCP需要用到的包;
          ?????????而Tomcat5.5則不同,如果想要使用DBCP數(shù)據(jù)源的話,需要手工向common/lib下加下DBCP所需的包:
          ????????????commons-dbcp-1.2.1.jar;
          ????????????commons-collections-3.1.jar;
          ????????????commons-pool-1.2.jar;

          i am ddm

          主站蜘蛛池模板: 安塞县| 新干县| 宁强县| 绩溪县| 乌恰县| 泸州市| 政和县| 屏山县| 囊谦县| 太湖县| 亳州市| 宁南县| 石棉县| 麦盖提县| 崇左市| 江川县| 类乌齐县| 威宁| 盐池县| 方正县| 济南市| 上虞市| 兴和县| 胶南市| 九龙城区| 昭苏县| 威信县| 阜宁县| 合川市| 浮梁县| 清涧县| 哈尔滨市| 岳普湖县| 太康县| 南皮县| 胶州市| 蓬溪县| 山阳县| 轮台县| 曲沃县| 南汇区|