這篇文章給大家介紹Struts初始化屬性資源文件的過程是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
成都創(chuàng)新互聯(lián)提供高防服務(wù)器租用、云服務(wù)器、香港服務(wù)器、珉田數(shù)據(jù)中心等
資源文件,不過是strus架構(gòu)內(nèi)部使用的,還是用戶自己定義的資源文件,都是資源文件。之所以會(huì)用到資源文件,有兩個(gè)原因:
一是方面是系統(tǒng)通過配置來實(shí)現(xiàn),那么就會(huì)有更好的擴(kuò)展性,也會(huì)更靈活。
另一個(gè)方面,可以實(shí)現(xiàn)國際化。
所以我們可能會(huì)有一個(gè)或多個(gè)資源配置文件。
那么資源文件到底是如何實(shí)現(xiàn)其初始化的呢?
內(nèi)部資源文件和外部資源文件是分開初始化的,其實(shí)是使用了不同的初始化方法。內(nèi)部資源文件是由init()調(diào)用initInternal()直接初始化的,而用戶的資源文件是通過配置模塊實(shí)現(xiàn)的。
內(nèi)部資源文件如何初始化?
protected void initInternal() throws ServletException { try { internal = MessageResources.getMessageResources(internalName); } catch (MissingResourceException e) { |
上面的方法就實(shí)現(xiàn)了內(nèi)部資源的初始化。
其實(shí)很簡單,通過資源文件定位,然后返回成一個(gè)MessageResources的對(duì)象就OK了。
也就是internal變量,以后通過此變量就可以直接取屬性的值了。
那么你可能會(huì)問,getMessageResources(internalName)又是如何實(shí)現(xiàn)取得資源文件的?
我們?cè)俑櫼幌拢?/p>
public synchronized static MessageResources getMessageResources(String config) { |
很明顯,這里面也使用了工廠模式。然后由工廠去生成一個(gè)資源MessageResources.
我們可以這樣理解,所有的資源其實(shí)屬于同一類產(chǎn)品,所以他們可是使用同一個(gè)工廠。
上面的初始化工廠的部分,我們其實(shí)可以看到, MessageResourcesFactory是一個(gè)抽象類,其抽象方法正是createResources(config),
那么他的實(shí)現(xiàn)是誰呢?這要問我們的工廠,因?yàn)槟阒挥兄懒斯S,才會(huì)知道產(chǎn)品。
所有我們要先知道,我們初始化了一個(gè)什么工廠。
所以我們?cè)倏矗?/p>
public static MessageResourcesFactory createFactory() { |
其實(shí)工廠實(shí)由factoryClass決定的。
這在
protected static String factoryClass = "org.apache.struts.util.PropertyMessageResourcesFactory"; |
定義了。
所以我們可以看到,其實(shí)是PropertyMessageResourcesFactory實(shí)現(xiàn)了*.properties文件的初始化。
初始化后的結(jié)果在哪?如何去使用呢?
內(nèi)部資源文件初始化后的結(jié)果以MessageResources的實(shí)例保存在internal變量上。其定義如下:
protected MessageResources internal = null; |
所以只有struts內(nèi)部能用,我們就不能調(diào)用了。
用戶的資源文件時(shí)如何初始化的呢?
用戶的資源文件是通過配置模塊ModueConfig來實(shí)現(xiàn)的。上面我們已經(jīng)初始化了一個(gè)ModuleConfig了。所以我們就可
以來初始化我們的資源文件了。
initModuleMessageResources(moduleConfig); |
struts的內(nèi)部分工也是非常明顯的。
ModuleConfig用來管理各個(gè)不同的模塊的配置。
其實(shí),各個(gè)由他管理的模塊也有自己的配置。
屬性資源文件的配置是就是MessageResourcesConfig
此配置的實(shí)例由ModuleConfig來管理,所有由ModuleConfig的實(shí)例,可以得到所有屬性文件配置的實(shí)例。
其實(shí)是每一個(gè)properties文件,就會(huì)對(duì)應(yīng)一個(gè)MessageResourcesConfig.
所以我們就可以理解下面的部分代碼了。
protected void initModuleMessageResources(ModuleConfig config) throws ServletException { |
這個(gè)地方得到是工廠的類的名稱。如:
"org.apache.struts.util.PropertyMessageResourcesFactory"
通過這個(gè),我們和前面的比較就可以知道,只要是屬性文件,就用的都是這個(gè)工廠。
String factory = mrcs[i].getFactory();
知道了用哪個(gè)工廠之后,就可以實(shí)例化了,創(chuàng)建一個(gè)工廠了。
MessageResourcesFactory.setFactoryClass(factory); MessageResourcesFactory factoryObject = MessageResourcesFactory.createFactory(); factoryObject.setConfig(mrcs[i]); |
由工廠生產(chǎn)出一個(gè)MessageResources
MessageResources resources = factoryObject.createResources(mrcs[i].getParameter()); resources.setReturnNull(mrcs[i].getNull()); resources.setEscape(mrcs[i].isEscape()); 將解析的結(jié)果保存在context 中。 |
}
至此,strtus如何初始化資源文件的過程也完成了。現(xiàn)在我們已經(jīng)知道了struts初始化屬性資源文件的過程。
最終解析的結(jié)果是以MessageResources的形式保存在context中。
關(guān)于Struts初始化屬性資源文件的過程是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。