2010-01-18 46 views
6

如何獲取Java EE中當前Web應用程序的名稱?如何在Java EE中獲取當前Web應用程序的名稱?

我對單機Java很滿意,但Java EE對我來說是新手。我正在編寫一些自定義代碼以插入第三方Java EE報告包。我有部署在同一Tomcat服務器上的多個實例,所以我有這樣的:

 
C:\ 
+-- tomcat6 
    +-- webapps 
     +-- app1 
     +-- app2 

因此,當用戶進入,讓我們說,http://example.com/app1/viewReport,我希望能夠得到「APP1」。 (而不是通過解析URL,最好)

此外,如果有一種方法可以獲取app1的根(在本例中爲C:\ tomcat6 \ webapps \ app1),那也會很棒。

回答

11

1.獲取「名稱」

它被稱爲上下文路徑。如果您的代碼在Web應用程序請求上下文中運行,您可以通過調用HttpServletRequest#getContextPath()來獲取它。

2.訪問物理/實際資源

如果你想訪問你的web應用文件/資源​​的內容,你最好使用之一:

也可以得到一個文件/資源​​的磁盤上的物理路徑,相對於Web應用程序的路徑給出,使用ServletContext#getRealPath(String),但它不可靠(例如,如果您將webapp部署爲WAR,則不會總是有效)。

3.訪問類路徑的資源

根據您的意見,您試圖在/ WEB-INF/classes目錄中訪問的資源。由於WEB-INF/classes/*是特定於Web應用程序的類所在的位置,因此您可以簡單地訪問它,就好像您正在訪問Java SE應用程序中的任何類路徑資源一樣。同樣,假設你的代碼的Web應用程序的上下文中運行,你可以簡單地使用以下命令:

在你的情況,你可能想使用後者,然後通過屬性#load(InputStream)加載屬性文件。

線沿線的東西:

Properties props = new Properties(); 
props.load(getClass().getResourceAsStream("/reportCustom.properties")); 
+0

感謝您的幫助。我想要做的是在'webapps/myapp/WEB-INF/classes/reportCustom.properties'中加載一個屬性文件。這是一個更簡單的方法嗎?在過去,我使用硬編碼的字符串(它是web.xml中提供根路徑的屬性)獲得System.getProperty(「myapp.root」)。但是後來我發現我們需要在同一個Tomcat上支持多個實例,所以我不知道「myapp」會被調用。 – Jenni 2010-01-18 18:39:54

+0

就你而言,你可以訪問reportCustom.properties,就好像它只是在類路徑中一樣。我會盡快更新我的答案。 – 2010-01-18 18:47:00

2

我想要做的是加載一個性質的webapps文件/ MyApp的/ WEB-INF /班/ reportCustom.properties

由於該文件位於classes目錄中,因此可以使用ClassLoader(用於在類路徑中加載文件的常用Java機制)加載該文件。最好使用context ClassLoader

相關問題