我有一个Web档案,文件放在WEB-INF目录中。
如何在java类中加载该文件?
我知道我可以将它放在classes目录中并从那里加载它。它只会被放在WEB-INF中。
答案 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
在项目属性Source-tab中,通过指向WEB-INF文件夹的父容器(在我的WebContent中)添加源文件夹
现在让我们使用类加载器:
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这样的角色/权限的概念之后,我确实最终在我认为是正确的解决方案之前更改了文件权限,但我认为这只是一个不好的消息(即拒绝权限,而不是找不到文件)。
希望这有助于某人。