|
Posted on 2006-07-24 22:59 大大毛 閱讀(450) 評(píng)論(0) 編輯 收藏 所屬分類: Struts
???前言: ??????雖說(shuō)剛看"精通Struts"幾章,已經(jīng)迫不及待的想試試它的"國(guó)際化"效果了.測(cè)試環(huán)境:JDK1.4 + Tomcat5 +?中文XP
??????先用的方法是網(wǎng)絡(luò)上流行的方法: ??????在IE/Internet選項(xiàng)/語(yǔ)言 中刪除掉中文,選擇英文,如此類推,則可以看到頁(yè)面的國(guó)際化效果. ??????但是這種方法有缺點(diǎn): ?????????1.很麻煩; ?????????2.非常的不靈,剛開(kāi)始俺整了幾回都偶爾出效果了,但是玩這招多了,Tomcat5.0.29就再也不理我了,任我怎么變,它依舊顯示中文. ??????基于第2點(diǎn)那是非解決不可啊
???
分析: ??????按"精通Struts"里面對(duì)于Struts國(guó)際化的解釋,應(yīng)該是頁(yè)面會(huì)從Session(如果有的話)中取出Locale對(duì)象,只有當(dāng)該對(duì)象為空時(shí)才會(huì)將request中的Locale對(duì)象放入session中去,而資源文件的選擇是依據(jù)session中的Locale對(duì)象的,如此這般,就可以拿出一個(gè)簡(jiǎn)單點(diǎn)演示國(guó)際化效果的方法來(lái): ?????????提供一個(gè)JSP讓用戶選擇語(yǔ)種,如英文,中文.提交到Action時(shí) 來(lái)個(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é)果測(cè)試失敗.
???
解決辦法: ??????事實(shí)證明,并不是理解Struts有誤, 問(wèn)題只是出在容器的處理方法上,還是按上面的方法,搭配Tomcat5.5測(cè)試成功,現(xiàn)在要想看"國(guó)際化"的效果就輕松多了,只要在應(yīng)用的主菜單上加入語(yǔ)言選項(xiàng),以后的各種跳轉(zhuǎn)都一切OK.
???
還存在的問(wèn)題: ??????經(jīng)測(cè)試證明,這種方法能夠達(dá)到根據(jù)菜單自動(dòng)切換語(yǔ)種顯示的目的,但是也注意到了一點(diǎn),就是 request.getLocale(); 方法得到的始終都是本機(jī)IE的編碼,這與session中存放的那個(gè)Locale是不一致的,當(dāng)然也是利用了Struts需要先判斷session中的Locale對(duì)象是否為空才進(jìn)行改變這一點(diǎn).不過(guò)這也帶來(lái)這種演示方法的局限性: ??????1.有些Struts應(yīng)用是允許客戶端在應(yīng)用的過(guò)程中改變Locale的,因此為此覆蓋了RequestProccessor.proccessLocale()方法,支持動(dòng)態(tài)的更新.這樣會(huì)造成此種演示方法的可恥失敗; ??????2.必須依賴于session, ??????3.如果程序中存在有手工從資源文件中取資源的情況(如我提到過(guò)的標(biāo)簽中的使用),那么 ?
???getMessage(?(Locale)session.getAttribute(Globals.LOCALE_KEY)?, key
)
??????與
???getMessage( request.getLocale() ,?key?)
??????的效果是會(huì)完全不同的.
??
?有關(guān)Tomcat5.5的一點(diǎn)提示: ??????網(wǎng)上有說(shuō)
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 文件才行,下載回來(lái)后解壓到同一個(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;
|