从getResource解析webapp的根目录

时间:2012-01-05 21:18:55

标签: java tomcat classloader

我的webapp中有这样的文件结构:

webapp/
├── META-INF
└── WEB-INF
    ├── reports
    │   └── info.txt
    └── web.xml

3 directories, 2 files

我需要从类中得到/WEB-INF/reports/info.txt

this.getClass().getResource("/WEB-INF/reports/info.txt");

这会解决吗?我将测试它,但我不确定Tomcat的类加载器如何解决问题。如果这不起作用,我该如何获取文件?

2 个答案:

答案 0 :(得分:7)

不,它不会解决。 Class.getResource从类路径加载资源,而webapp的根目录本身不在类路径中。

为了掌握该资源,您需要抓住ServletContext,然后可以调用ServletContext.getResource("/WEB-INF/reports/info.txt")。这应该有用。

您可以使用ServletContext获取Servlet.getServletConfig().getServletContext()

或者,将reports目录移到/WEB-INF/classes目录下(类路径上 )。然后,您可以使用

获取文件
getClass().getResource("reports/info.txt");

答案 1 :(得分:3)

嗯,首先,this.getClass().getResource不应该工作(虽然我没有尝试)。它不是类路径,而是ServletContext,因此您需要使用ServletContext.getResource

问题是,它不是一个文件:它可以是WAR存档中的一个条目。因此,根据您的确切知识,答案可能会有所不同。

我们使用Spring实用程序类来处理这两个文件(如果可用,则通过ServletContext.getResourcePaths)和WAR(通过ServletContext.getResource)。如果你使用Spring,那可能是最好的方法。如果不这样做,您可能需要重新实施解决方案。

或者,您只需使用ServletContext.getResourceAsStream - 它并不关心资源的存储位置。所以,只要你需要它的内容而不是路径,你应该没事。