【问题标题】:How can I get the name of the current web app in Java EE?如何在 Java EE 中获取当前 Web 应用程序的名称?
【发布时间】:2011-01-06 11:45:20
【问题描述】:

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

我对独立的 Java 很满意,但 Java EE 对我来说是新的。我正在编写一些自定义代码以插入第三方 Java EE 报告包。我在同一个 Tomcat 服务器上部署了多个实例,所以我有类似的东西:

C:\ +-- tomcat6 +-- 网络应用 +-- 应用程序1 +-- 应用程序2

因此,当用户转到 http://example.com/app1/viewReport 时,我希望能够获得“app1”。 (最好不要通过解析 URL。)

另外,如果有办法获取 app1 的根目录(在本例中为 C:\tomcat6\webapps\app1),那也很棒。

【问题讨论】:

    标签: java tomcat jakarta-ee


    【解决方案1】:

    1。获取“名称”

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

    2。访问物理/真实资源

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

    也可以使用ServletContext#getRealPath(String) 获取文件/资源​​在磁盘上的物理路径,给定相对于 Web 应用程序的路径,但这并不可靠(如果您将 Web 应用程序部署为战争,例如)。

    3。访问类路径资源

    根据您的评论,您试图访问 /WEB-INF/classes 目录中的资源。因为 WEB-INF/classes/* 是 Web 应用程序特定类所在的位置,所以您可以像访问 Java SE 应用程序中的任何类路径资源一样简单地访问它。同样,假设您的代码在 webapp 的上下文中运行,您可以简单地使用以下内容:

    在您的情况下,您可能希望使用后者,然后通过 Properties#load(InputStream) 加载属性文件。

    类似的东西:

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

    【讨论】:

    • 感谢您的帮助。我想要做的是在webapps/myapp/WEB-INF/classes/reportCustom.properties 中加载一个属性文件。这是一种更简单的方法吗?过去,我得到了 System.getProperty("myapp.root"),它带有一个硬编码字符串,它是 web.xml 中的一个属性,它提供了根路径。但是后来我发现我们需要在同一个Tomcat上支持多个实例,所以不知道会调用什么“myapp”。
    • 在您的情况下,您可以访问 reportCustom.properties,就好像它只是在类路径中一样。我会尽快更新我的答案以包含此内容。
    【解决方案2】:

    我要做的是在 webapps/myapp/WEB-INF/classes/reportCustom.properties 中加载一个属性文件

    由于该文件位于classes 目录中,您可以使用ClassLoader(在类路径上加载文件的常用Java 机制)加载它。最好使用context ClassLoader

    【讨论】:

      猜你喜欢
      • 2013-04-09
      • 2013-11-30
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 2013-06-25
      • 1970-01-01
      相关资源
      最近更新 更多