---恢復內容開始---
一、國際化支持
二、資源訪問
三、事件傳遞
國際化支持
ApplicationContext繼承了org.springframework.context.MessageResource接口,使用getMessage()的各個方法來取得信息資源
從而實現國際化信息的目的。getMessage()有三個方法:
1)String getMessage(String code,Object[] args,String default,Locale loc)
2)String getMessage(String code,Object[] args,Locale loc)
3)String getMessage(MessageSourceResolvable resolvable,Locale locale),通過MessageSourceResolvable來傳入需要獲取信息的代號
當ApplicationContext被加載的時候,它會自動查找在XML中定義的messageSource,Spring約定這個Bean必須被定義為messageSource.
開發人員可以通過org.springframework.context.support.ResourceBundleMessageSource來取得國際化信息。
實例如下:
1)定義Spring的配置文檔config.xml
2)定義存放信息資源的文檔
3)編寫測試程序,查看輸出
1.config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--負責國際化支持-->
<bean id=“messageSource” class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<!--國際化支持的定義在文件名為message的文件夾中-->
<value>messages</value>
</property>
</bean>
<bean id="HelloWorld" class="com.gc.action.HelloWorld"></bean>
<bean id="date" class="java.util.Date"/>
</beans>
存放信息資源的文檔的名稱為messages.properties或messages.class
2.用記事本編寫存放信息資源的文檔messages.properties.
HelloWorld=問候語:{0} 問候時間:{1}
{0} {1} 用來標識當從外部傳入參數時,傳入值存放的位置
把messages.properties存放在ClassPath下,即myApp\WEB-INF\src下
3.測試程序TestHelloWorld.java
//**********TestHelloWorld.java*********
package com.gc.test;
import java.util.Calendar;
import java.util.Locale;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.gc.action.HelloWorld;
public class TestHelloWorld{
public static void main(String[] args) throws InstantiationException,IllegalAccessException,
ClassNotFoundException{
//通過ApplicationContext獲取配置文檔
ApplicationContext actx=new FileSystemXmlApplicationContext("config.xml");
//設定當前時間
Object[] objs=new Object[] {"HelloWorld",Calendar.getInstance().getTime()};
//國際化支持
String msg=actx.getMessage("HelloWorld",objs.Local.CHINA)
System.out.println(msg);
}
}
說明:
1.objs是一個數組,用來存放要傳入的內容,數組中的內容分別對應與messages.properties中的{0}和{1}
2.輸出的結果,中文為亂碼:因為JAVA本身在轉碼過程中出現了問題
解決方法:
cmd中輸入cd\回到C盤根目錄,然后輸入native2ascii messages.properties messages.txt
查看C盤生成的messages.txt文件,復制內容到messages.properties中,覆蓋原來的就可以
在myApp/WEB-INF/src下用同樣的方法新建一個message_en_US.properties文件輸入:HelloWorld=Language{0} Time{1}
修改測試程序TestHelloWorld,將Locale.CHINA改為Locale.US
總結:只需要修改Locale就可以很容易地實現對國際化的支持
資源訪問
ApplicationContext繼承了ReourceLoader接口,開發人員可以使用getResource()方法並指定資源文件的URL來獲取
ApplicationContext對資源文件的存儲在設定資源文件的路徑上有如下3種方式:
1.虛擬路徑來存取;
2.絕對路徑來存取;
3.相對路徑來存取。
1.資源文件位於CLASSPATH下:classpath: 是Spring約定的URL虛擬路徑
ApplicationContext actx=new FileSystemXmlApplicationContext("config.xml");
Resource resource=actx.getResource("classpath:messages.properties");
2.實際路徑:file:或http:
ApplicationContext actx=new FileSystemXmlApplicationContext("config.xml");
Resource source = actx.getResource("file:d:/eclipse/workspace/myApp/WEB-INF/src/messages.properties");
3.相對路徑
ApplicationContext actx=new FileSystemXmlApplicationContext("config.xml");
Resource source = actx.getResource("WEB-INF/src/messages.properties");
當取得一個Resource后,開發人員可以使用:
getFile() 來存取資源文件內容
exists()來檢查資源文件是否存在
isOpen()檢查資源文件是否被打開
getURL()返回資源文件的URL
事件傳遞: 待續...
---恢復內容結束---
