ApplicationContext更強的功能-學習筆記


---恢復內容開始---

一、國際化支持

二、資源訪問

三、事件傳遞

 

國際化支持

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

 

事件傳遞:  待續...

 

 

 

 

 

 

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM