如何从在 Java 网络应用程序中执行的 POJO 获取网络根目录的路径?

How do I get the path to the web root from a POJO executing inside a Java web app?

在 Java 网络应用程序中的 POJO 中,如何找到 运行 网站的根路径,以便我可以在那里读取文件?

记住,这是 在 POJO 中,所以我没有:

我看过 System.getProperty("user.dir") 的建议,但这看起来不对(在我的笔记本电脑上,它 returns C:\Program Files\eclipse\eclipse,这显然不是我想要的)。

该应用程序将部署到 Azure,因此从技术上讲我无法提前知道该应用程序的路径,这意味着我无法将其设置为 属性 或设置。我需要凭空实时制作它。

其他语言有全局变量:

然后您可以通过将这些值与来自 webroot 的相对路径相结合来形成路径。

Java 的等价物是什么?

我认为没有什么可以与 PHP 或 .NET 中的变量相媲美的,因为系统上可能有多个 webroot:一个用于普通连接,另一个用于 TLS 连接或者如果您在一个应用程序中设置多个 HTTP 服务器(我定期使用 Jetty 这样做)

所以像系统 属性 这样的 "global variable" 不能在这里工作。

我解决这个问题的想法实际上是将 ServletContext 或非 POJO-class(如 servlet)中的任何可用内容保存到您的 classes 之一中的某个静态成员是 webapp 的一部分,因此您可以从 POJO 访问它并从中获取 webroot。正如我在其中一条评论中提到的,该根目录可能位于 WAR 文件中,因此您不应期望 java.io.File 实际工作。

即使您在同一台服务器内(或同一台虚拟机中的多台服务器)多次使用同一个 Web 应用程序,这也应该有效,因为这些 Web 应用程序应该使用不同的 class 加载程序,以便存储 class 应按 webapp 加载。