【发布时间】:2009-07-10 08:43:21
【问题描述】:
我有一个网络存档,其中有一个文件放在 WEB-INF 目录中。
如何在 java 类中加载该文件?
我知道我可以将它放在类目录中并从那里加载它。它只会放在WEB-INF中。
【问题讨论】:
标签: java
我有一个网络存档,其中有一个文件放在 WEB-INF 目录中。
如何在 java 类中加载该文件?
我知道我可以将它放在类目录中并从那里加载它。它只会放在WEB-INF中。
【问题讨论】:
标签: java
在 ServletContext 对象上使用getResourceAsStream() 方法,例如
servletContext.getResourceAsStream("/WEB-INF/myfile");
您如何获得对 ServletContext 的引用取决于您的应用程序...您想从 Servlet 还是从 JSP 进行?
已编辑:如果您在 Servlet 对象中,请调用 getServletContext()。如果您在 JSP 中,请使用预定义变量 application。
【讨论】:
application.getResourceAsStream("/WEB-INF/myConfig.xml");
getServletConfig().getServletContext()。
ServletContext.getResourceAsStream(String),ServletContext.getResource(String) 方法也可以用于获取引用文件的 URL,而不是 InputStream。
这就是它在不使用 Servlet 的情况下对我的工作方式。
假设我正在尝试访问项目/WebContent/WEB-INF/web.xml 中的 web.xml
在项目属性 Source-tab 中,通过指向 WEB-INF 文件夹的父容器(在我的例子中为 WebContent )添加源文件夹
现在让我们使用类加载器:
InputStream inStream = class.getClass().getClassLoader().getResourceAsStream("Web-INF/web.xml")
【讨论】:
WEB-INF/classes,你仍然不能访问WEB-INF/web.xml,而是WEB-INF/classes/WEB-INF/web.xml。因此,尽管在 IDE 中配置源文件夹对于许多项目设置来说是不够的,但您最终会得到一个两倍大的应用程序,并且在各种重复问题中运行。
我在访问我在 java (jersey) 服务器中创建的 sqlite db 文件时遇到的问题完全是由于路径所致。一些文档说 jdbc 连接 url 应该看起来像“jdbc:sqlite://path-to-file/sample.db”。我认为双斜杠是 htt 协议样式路径的一部分,并且在部署时会正确映射,但实际上,它是绝对或相对路径。因此,当我将文件放在 WebContent 文件夹(tomcat 项目)的根目录时,类似这样的 uri 工作“jdbc:sqlite:sample.db”。
让我感到震惊的一件事是,当我单步调试调试器时,我收到一条消息,上面写着“正在打开数据库:...权限被拒绝”。我认为这是文件系统权限或sql用户权限的问题。在发现 SQLite 没有 MySQL 等角色/权限的概念后,我最终确实更改了文件权限,然后才得出我认为正确的解决方案,但我认为这只是一个坏消息(即权限被拒绝,而不是找不到文件)。
希望这对某人有所帮助。
【讨论】: