簡體   English   中英

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

[英]How can I get the name of the current web app in Java EE?

如何在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),那也很棒。

1.得到“名字”

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

2.訪問物理/真實資源

如果您嘗試訪問webapp中的文件/資源​​的內容,則最好使用以下方法之一:

在給定相對於Web應用程序的路徑的情況下,使用ServletContext#getRealPath(String)也可以獲取文件/資源​​的磁盤上的物理路徑,但它不可靠(如果將webapp部署為webapp,則無法始終工作)例如,WAR)。

3.訪問類路徑資源

根據您的評論,您試圖訪問/ WEB-INF / classes目錄中的資源。 因為WEB-INF / classes / *是Web應用程序特定類所在的位置,所以您可以像訪問Java SE應用程序中的任何類路徑資源一樣訪問它。 再次,假設您的代碼在webapp的上下文中運行,您可以簡單地使用以下內容:

在您的情況下,您可能希望使用后者,然后通過Properties#load(InputStream)加載Properties文件。

有點像:

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

我想要做的是在webapps / myapp / WEB-INF / classes / reportCustom.properties中加載屬性文件

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM