如何在Java EE中获取当前Web应用程序的名称?

Jen*_*nni 7 java tomcat 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),那也很棒.

Jac*_*eow 11

1.得到"名字"

它被称为上下文路径.如果您的代码在Web应用程序请求上下文中运行,则可以通过调用获取它HttpServletRequest#getContextPath().

2.访问物理/真实资源

如果您尝试访问webapp中的文件/资源​​的内容,则最好使用以下方法之一:

在给定相对于Web应用程序的路径的情况下,使用可以获取文件/资源​​的磁盘上的物理路径ServletContext#getRealPath(String),但它不可靠(例如,如果将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"));
Run Code Online (Sandbox Code Playgroud)