GlassFish 下 Web 应用程序中文件的路径
如何指定 Web 应用程序中文件的路径?我在 WEB-INF 下有一个名为“templates”的文件夹,有人告诉我在 GlassFish v3 下路径应如下所示:
./WebContent/WEB-INF/templates
但这样我会收到文件未找到异常。为了让它发挥作用,我必须改变什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果我理解正确的话,您不能依赖当前工作目录来查找已部署的资源。如果您的资源在物理上相对于类路径资源放置(例如在 jar 内),您可以询问该资源在哪里,然后从那里导航。
来自 servlet 如何获取 servlet 外部文件的绝对路径? 又来自 http://www.exampledepot.com/egs/java.lang/ClassOrigin.html:
If I understand you correctly, you cannot rely on the current working directory to locate a resource you have deployed. If your resource is physically placed relative to a classpath resource (like inside a jar), you can ask about where that resource is, and then navigate from there.
From How a servlet can get the absolute path to a file outside of the servlet? which in turn is from http://www.exampledepot.com/egs/java.lang/ClassOrigin.html:
当您在 Eclipse 中创建动态 Web 应用程序项目时,将进入 war 文件根目录的内容将从 WebContent 文件夹打包。
听起来您想在 Web 应用程序运行时访问 WEB-INF/templates 目录中的文件。
我假设您目前正在使用绝对路径从那里访问文件。您已经发现,一旦部署了您的应用程序,这可能不适用于您的应用程序。
您需要使用 ServletContext.getResourceAsStream(String)。
以下代码片段从 servlet 中查找名为 WEB-INF/templatez/myfile.txt 的文件,该 servlet 是包含 myfile.txt 文件的 Web 应用程序的一部分。其他 Web 应用程序和用户将无法通过 http GET 请求访问该文件。
When you create a dynamic web app project in Eclipse, the content that will go into the root of the war file gets packaged from the WebContent folder.
It sounds like you want to access a file from the directory WEB-INF/templates at runtime for your web app.
I assume that you are using the absolute path to access a file from there presently. You have already figured out that this probably will not work for your app, once it is deployed.
You will need to access the content of the file using ServletContext.getResourceAsStream(String).
The following snippet finds a file named WEB-INF/templatez/myfile.txt from a servlet that is part if the web app that contains the myfile.txt file. Other web apps and users will will not be able to access the file via http GET requests.
好吧,我明白了。不敢相信解决方案如此简单。我刚刚将 templates 文件夹移至 WebContent 文件夹,JSP 和 HTML 页面所在的位置相同,并将 DD 中的路径更改为 /templates。现在我非常确定它可以在任何服务器上的任何 Web 容器下工作。
Ok, I figured this out. Can't believe the solution was this simple. I just moved the templates folder to WebContent folder, same place JSP and HTML pages are at and changed the path in the DD to /templates. Now I'm pretty sure it'll work under any web container on any server.
servlet 3.0 的资源 JAR 功能有用吗: http://blogs.oracle.com/alexismp /entry/web_inf_lib_jar_meta ?
Would servlet 3.0's resource JAR feature be useful: http://blogs.oracle.com/alexismp/entry/web_inf_lib_jar_meta ?