大大毛 的筆記

            DDM's Note

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

          posts - 14, comments - 23, trackbacks - 0, articles - 58
             :: 首頁 ::  :: 聯系 ::  :: 管理

          Struts國際化的快速演示

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

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

          ???
          分析:
          ??????按"精通Struts"里面對于Struts國際化的解釋,應該是頁面會從Session(如果有的話)中取出Locale對象,只有當該對象為空時才會將request中的Locale對象放入session中去,而資源文件的選擇是依據session中的Locale對象的,如此這般,就可以拿出一個簡單點演示國際化效果的方法來:
          ?????????提供一個JSP讓用戶選擇語種,如英文,中文.提交到Action時 來個相應處理
          ???????? 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 "
          ));
          ????????}
          ?????????這樣做應該是符合Struts的要求的,結果測試失敗.

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

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

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

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

          i am ddm

          主站蜘蛛池模板: 运城市| 武义县| 墨竹工卡县| 台南县| 普陀区| 蒲城县| 博罗县| 阿合奇县| 仁布县| 郓城县| 特克斯县| 巢湖市| 垫江县| 黔南| 香河县| 通州市| 大石桥市| 原阳县| 金堂县| 喜德县| 佛山市| 璧山县| 章丘市| 伊春市| 容城县| 苏尼特右旗| 汪清县| 新晃| 湖南省| 静安区| 陆良县| 武鸣县| 平山县| 中江县| 靖江市| 万州区| 高陵县| 芮城县| 洮南市| 浏阳市| 广州市|