如何在 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),那也很好。
最佳答案
获取“名称” ===== 它称为上下文路径。如果您的代码在 Web 应用程序请求上下文中运行,您可以通过调用
HttpServletRequest#getContextPath()
来获取它。 .访问物理/实际资源 ===== 如果您正在尝试访问您的网络应用程序中的文件/资源的内容,您最好使用以下方法之一:
还可以获取文件/资源在磁盘上的物理路径,给定相对于 Web 应用程序的路径,使用 ServletContext#getRealPath(String)
,但它并不可靠(例如,如果您将 webapp 部署为 WAR,则并不总是有效)。
- 访问类路径资源 ===== 根据您的评论,您试图访问/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/