struts 國際化(yunchat-學習筆記)

yunchat發表於2005-08-25

字元編碼格式的轉換。

Resources Bundle 的配置。

Struts使用繫結資源的方式

[@more@]

1. 1 .處理HTTP請求資料編碼

a) 在處理請求前先設定HttpServletRequest物件的字元編碼:

request.setCharacterEncoding(“gb2312”);

b) 2. 對使用者輸入的請求資料進行編碼轉換.

new String (data.getBytes(“ISO-8859-1”), “GB2312”);

2. 3. 處理資料庫資料編碼使用編碼轉換.

3. 4 . 處理XML配置檔案編碼.;

4. 5. 處理響應結果編碼.

a) a.Servlet.

Response.setContentType(“text/html;charset=GB2312”);

b) b.JSP.

c) c.html.

HTTP-EQUIV = “Content Type”CONTENT=”text/html;charset=GB2312”>

LOCALE

Locale usLocale = new Locale(“en”, “US”);

Locale enLocale = new Locale(“ch”, “CH”);

Locale jpLocale = Locale.JAPAN;

JAVA虛擬機器在啟動時會查詢作業系統,為執行環境設定預設的Locale. Java程式可以呼叫java.util.Locale類的getLocale()來獲得預設Locale getDefault();

HttpServletRequst物件包含下面兩方法: public java.util.Locale getLocale();

public java.util.Enumeration getLocales();

這兩方法都會訪問Http請求中的Accept-Language頭資訊.

Struts 中訪問Locale物件.. 由於WEB伺服器並不和客戶瀏覽器保持長期的連線,因此沒個傳送到Web容器的Http請求中都包含了Locale資訊. Struts配置檔案中的元素的Locale屬性指定是否把Locale物件儲存在session範圍中,預設值為true. 在處理每一個使用者請求時,RequestProcessor類都會呼叫它的processLocale()方法,

在該方法中會判斷是否儲存在session.

Struts Action基類中 可使用getLocale()方法 WEB應用的其他地方可以直接使用R equestUtils類的getUserLocale()方法.

Strut類中的Resources bundle, struts類沒有直接使用JAVA語言提供的ResourceBundle.

org.apache.struts.util.MessageResources

org.apache.struts.util.PropertyMessageResources

這兩個類具有ResourceBundle相似功能PropertyMessageResourcesMessageResources子類. 另外可以使用MessageResourcesFactory建立ResourcesFactory在該類中包含createResources方法中建立PropertyMessageResources物件 但在配置檔案中一個元素下卻只能配置一個資源元素可以考慮重些 該方法…. 及重寫PropertyMessageResources的相關方法是它可以支援多檔案的配置.

如下:

factory="org.apache.struts.util.ExMessageResourcesFactory" parameter="tilesResources,tilesResources_zh_CN,tilesResources_en" />

通常:

factory="org.apache.struts.util.ExMessageResourcesFactory" parameter="tilesResources " />

Struts處理請求的時候,會依次搜尋資原始檔. : local為中文時候.

它會依次搜尋_ch_CN, _ch, default .

預設資原始檔名為:application.properties,但實際配置時使用如: tilesResources 它也會預設依次搜尋的。

Struts應用,子應用模組,Resource Bundle和資原始檔之間的關係:

ü 一個Struts應用可以有多個子應用模組,必須有且只有一個預設子應用模組.

ü 一個子應用模組可以有多個Resource Bundle, 必須有且只有一個預設Resource Bundle.

ü 一個Resource Bundle可以有多個資原始檔, 必須有且只有一個預設資原始檔.

對資原始檔的編碼轉換:

JDK中提供了 native2ascii命令:

native2ascii –encoding gb2312 fileA fileB

另外: 不必在每個JSP或Servlet中設定HTTP請求的字元編碼

可以在Servlet過濾器中設定編碼 SetCharacterEncodingFilter;

......

......

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/118026/viewspace-805130/,如需轉載,請註明出處,否則將追究法律責任。

相關文章