2011-12-09 49 views
1

我正在研究分佈在tomcat的一個實例內運行的多個上下文的Web應用程序。上下文標記爲crossContext="true",以便我們可以在不同的上下文之間共享一些jsp。還有一組通用類,它們是tomcat的common.loader的一部分。我們要遠離這個項目來改變這個結構,所以請在回答問題時對這個結構敏感。從多個servlet上下文獲取屬性文件

我想要做的是獲取所有資源,比如com.something.messages,這些資源都存在於所有不同的環境中。這是可能嗎?我應該爲每個創建的上下文記錄類加載器並使用它來加載資源?你有什麼建議?

回答

1

如果你已經上的Servlet 3.0,那麼你可以使用ServletContext#getClassLoader()獲得servlet上下文自己的類加載器:

ServletContext otherContext = servletContext.getContext("/other"); 
ClassLoader otherClassLoader = otherContext.getClassLoader(); 
// ... 

(如果這會引發安全異常,編輯相應策略文件)

然後,您可以通過此類加載到例如ResourceBundle#getBundle()

ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale, otherClassLoader); 
// ... 

如果由於各種原因(例如,還沒有使用Servlet 3.0,或者不願意擺弄政策文件(非常合理......)等),那麼最好的辦法就是給每個Web應用程序自己的ServletContextListener,它加載所需的包並將其存儲爲屬性在contextInitialized()方法期間的ServletContext。通過這種方式,您可以將其作爲通常方式的屬性。

+0

將嘗試您的'ServletContextListener'方法... – rmarimon