在學struts2之前先把struts1大概的學習一下,雖然說兩者相差很大,但是大致的思想都是差不多的,也對於之後學習struts2會有幫助。這裡主要分享一下struts1.3的國際化實現,1.3也差不多是struts1中的最新或者是最後的版本了,也跟之前的版本小有區別。我做之前也在網上搜了很多,大都是千篇一律,但是其實都漏了很多,根本實現不了,而且都沒怎麼講原理,或者是struts內部到底是怎麼實現的,我待會都會說一下,有不妥的望高手指正。
上面圖片的英文還沒弄。
工具/原料
需要的類庫及工具
*struts1.3的jar包,直接去apache的官網上去下,最好是下的完整包,包含原始碼(
*然後工具我用的是eclipse的J2EE版
*伺服器用的是apache-tomcat 6
步驟/方法
首先可以再eclipse裡新建一個Dynamic web project,怎麼建不說了。然後把這個專案對應到你的tomcat伺服器上,對好以後最好先測試一下,能不能用。
然後要把struts用到的核心jar檔案放到新建專案的web目錄下的lib目錄裡,由於struts你開啟裡面的包的話是有很多很多的,但是我們現在只需要基礎核心的jar包,因為只是做一個簡單的例子,所以我們就直接把struts給的簡單例子裡用到的lib複製到當前專案的lib裡。解壓你的struts1.3.10壓縮包,然後然後開啟裡面的apps目錄,選擇struts-blank-1.3.10例子進行解壓,把裡面的的web-inf下的lib裡德jar包全部拷到當前專案下的lib下。拷貝好以後把eclipse下的專案重新整理一下就可以了。此時專案在eclipse中的大致結構
先看一下我的頁面的國際化實現的程式碼,首先是原始碼
裡面的
如上圖可以找到register.languagezh用英文是CHINESE,對於英文檔案倒好辦,但對於中文檔案就不能直接在等號後面寫中文,需要通過java\bin(你的jdk目錄)目錄下的native2ascii.exe程式來轉化,在cmd中輸入native2ascii RegisterResourcesTemp.properties gb2312 RegisterResources_zh_CN.properties temp檔案就是直接包含中文的檔案,gb2312是temp檔案編碼形式,這個根據你儲存時確定的,後面的就是新生成的中文版的資原始檔
當然你的頁面必須得utf-8編碼的,不然就不能顯示了。至於這些檔案怎麼讓struts找到,那當然要在配置檔案裡配置,這個待會說。然後再看一下實際瀏覽器裡的原始碼
現在看一下配置檔案,先是web.xml,
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
簡要的說一下原理,為什麼用
我們再看看上面的LocaleAction是怎麼實現的,然後我們可以根據這個簡單的實現在這上面進行一些改進以實現自己的目的,它的類宣告public final class LocaleAction extends BaseAction {}一個final類繼承BaseAction類,所有的action都會繼承baseaction。然後private Log log =
LogFactory.getFactory().getInstance(this.getClass().getName());這段當然是用來日誌記錄的,不管它。接下來就是最重要的execute方法,簡要的解釋一下:public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// Extract attributes we will need
HttpSession session = request.getSession();//先去得到session
Locale locale = getLocale(request);//這個應該是父類的方法,通過request得到locale
String language = null;//這裡就是配置檔案裡的三個引數了
String country = null;
String page = null;
try {//分別去獲得三個引數的值,form就是那個DynaActionForm物件
language =
(String) PropertyUtils.getSimpleProperty(form, "language");
country = (String) PropertyUtils.getSimpleProperty(form, "country");
page = (String) PropertyUtils.getSimpleProperty(form, "page");
} catch (Exception e) {
log.error(e.getMessage(), e);
}
boolean isLanguage = ((language != null) && (language.length() > 0));
boolean isCountry = ((country != null) && (country.length() > 0));
if ((isLanguage) && (isCountry)) {//如果都不會空的話,就建立新的locale物件
locale = new java.util.Locale(language, country);
} else if (isLanguage) {
locale = new java.util.Locale(language, "");//沒有國家的話直接就是語言locale
}
session.setAttribute(Globals.LOCALE_KEY, locale);吧新的locale放到session裡,這樣放回過去,就可以根據新的locale來實現國際化了
if (null == page) {
return mapping.findForward("success");
} else {
return new ActionForward(page);//返回到page,就是還是之前的註冊頁面
}
}
差不多一個簡易的struts國際化就這樣搞定,至於自己要實現跟多的功能就靠自己去摸索了,我想struts2的國際化也差不多吧,連線了大致的原理,用起來就快了。希望對大家有幫助。