如何从Web存档的WEB-INF目录加载资源

时间:2009-07-10 08:43:21

标签: java

我有一个Web档案,文件放在WEB-INF目录中。

如何在java类中加载该文件?

我知道我可以将它放在classes目录中并从那里加载它。它只会被放在WEB-INF中。

3 个答案:

答案 0 :(得分:87)

在ServletContext对象上使用getResourceAsStream()方法,例如

servletContext.getResourceAsStream("/WEB-INF/myfile");

如何获得对ServletContext的引用取决于您的应用程序...您想从Servlet还是从JSP中执行此操作?

编辑:如果您在Servlet对象中,请调用getServletContext()。如果您在JSP中,请使用预定义变量application

答案 1 :(得分:6)

以下是没有使用Servlet的方式。

假设我正在尝试访问project / WebContent / WEB-INF / web.xml中的web.xml

  1. 在项目属性Source-tab中,通过指向WEB-INF文件夹的父容器(在我的WebContent中)添加源文件夹

  2. 现在让我们使用类加载器:

    InputStream inStream = class.getClass().getClassLoader().getResourceAsStream("Web-INF/web.xml")
    

答案 2 :(得分:0)

我访问我在java(jersey)服务器中创建的sqlite db文件的问题完全归结为路径。一些文档说jdbc connect url应该看起来像" jdbc:sqlite://path-to-file/sample.db"。我认为双斜杠是htt协议风格路径的一部分,并且在部署时会正确映射,但实际上,它是绝对路径或相对路径。因此,当我将文件放在WebContent文件夹(tomcat项目)的根目录下时,像这样的uri工作了" jdbc:sqlite:sample.db"。

抛出我的一件事是,当我踩过调试器时,我收到一条消息说“打开db:...权限被拒绝"”。我认为这是文件系统权限或sql用户权限的问题。在发现SQLite没有像MySQL这样的角色/权限的概念之后,我确实最终在我认为是正确的解决方案之前更改了文件权限,但我认为这只是一个不好的消息(即拒绝权限,而不是找不到文件)。

希望这有助于某人。