如何在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),那也很棒。
答案 0 :(得分:11)
它被称为上下文路径。如果您的代码在Web应用程序请求上下文中运行,则可以通过调用HttpServletRequest#getContextPath()
来获取它。
如果您尝试访问网络应用中的文件/资源内容,则最好使用以下方法之一:
在给定相对于Web应用程序的路径的情况下,使用ServletContext#getRealPath(String)
也可以获取文件/资源的磁盘上的物理路径,但它不可靠(如果部署webapp,则无法始终有效)例如,作为WAR。
根据您的评论,您试图访问/ WEB-INF / classes目录中的资源。因为WEB-INF / classes / *是Web应用程序特定类所在的位置,所以您可以像访问Java SE应用程序中的任何类路径资源一样访问它。再次,假设您的代码在webapp的上下文中运行,您可以简单地使用以下内容:
在您的情况下,您可能希望使用后者,然后通过Properties#load(InputStream)加载Properties文件。
有些事情:
Properties props = new Properties();
props.load(getClass().getResourceAsStream("/reportCustom.properties"));
答案 1 :(得分:2)
我要做的是在webapps / myapp / WEB-INF / classes / reportCustom.properties中加载属性文件
由于文件位于classes
目录中,因此可以使用ClassLoader(用于在类路径上加载文件的常用Java机制)加载它。最好使用context ClassLoader。