我的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的类加载器如何解决问题。如果这不起作用,我该如何获取文件?
答案 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
- 它并不关心资源的存储位置。所以,只要你需要它的内容而不是路径,你应该没事。