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

标签 java tomcat jakarta-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. 访问物理/实际资源 ===== 如果您正在尝试访问您的网络应用程序中的文件/资源​​的内容,您最好使用以下方法之一:

还可以获取文件/资源​​在磁盘上的物理路径,给定相对于 Web 应用程序的路径,使用 ServletContext#getRealPath(String) ,但它并不可靠(例如,如果您将 webapp 部署为 WAR,则并不总是有效)。

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

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

类似的东西:

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

关于java - 如何在 Java EE 中获取当前 Web 应用程序的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2088218/

相关文章:

java - Java程序如何知道如何访问该文件?

Java Web Service 框架/库,哪个更好,为什么?

java - 获取java中项目之外的图像文件的路径

java - 从 JAX-RS 服务获取资源时出错

java - JSP + Eclipse + TomCat : cannot be resolved to a type

Apache AH01328 行太长尝试下载损坏的文件时出错

java - 无法序列化 HibernateProxy 的对象原因

java.lang.ClassCastException : $Proxy99 cannot be cast

java - Selenium WebDriver - 意外的模态对话框警报

java - JAXB 解码神秘的 XML