【发布时间】:2013-10-30 14:26:42
【问题描述】:
我有一个部署到 Tomcat 的非常简单的 java web 应用程序。
在这个应用程序中,我有一些代码如下:
package com.mywebapp.hello;
import javax.servlet.http.*;
import java.io.*;
public class PdfTwoServlet extends HttpServlet {
public void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException {
httpServletResponse.setContentType("application/pdf");
InputStream is = PdfTwoServlet.class.getResourceAsStream("/two.pdf");
当我编译我的代码并将其部署到 tomcat 时,目录结构是这样的:
这在 C:\Tomcat\webapps\myApplication 下:
所以
PdfTwoServlet.class.getResourceAsStream("/two.pdf");
工作正常,找到了 classes 文件夹下的文件 two.pdf,但我不知道它是如何工作的。
Accessing properties file in a JSF application programmatically 这里 BalusC 说:
Class#getResourceAsStream() 可以采用相对于 您在那里使用的类的位置作为起点。 如果你使用 /foo/filename.properties,那么它实际上会加载 类路径根目录中的 foo/filename.properties。
我有两个问题:
1) 为什么classpath root 是WEB-INF\classes 文件夹?是在哪里确定的? (据我了解,应该是因为我说的代码运行良好。)
据此:http://docs.oracle.com/javase/tutorial/essential/environment/paths.html,我的本地机器中没有设置类路径。所以也许当我启动tomcat时,它会设置类路径?但是部署的网络应用很少,类路径很少吗?
2) 有没有更好的方法来代替:PdfTwoServlet.class.getResourceAsStream? getClassPath().getResourceAsStrem 之类的东西?
编辑:也许更有经验和英语更好的人可以编辑这个问题的标题。我不确定它是否足够好。
【问题讨论】:
-
这对 Tomcat 没有任何解释,对我的第二个问题也没有任何解释。 @JimGarrison 你确定你读过这个问题还是在巡逻?
-
BalusC(和往常一样)在这里有一些非常好的解释:stackoverflow.com/questions/6341784/…
-
这只是关于 web 应用如何工作的 Java Servlet 规范。
-
为什么 PdfTwoServlet 中的 getServletContext() 位于“classes”文件夹上方的两个文件夹中?如果我使用 getServletContext 我需要说 getResourceAsStream("/WEB-INF/classes/two.pdf") @BoristheSpider ?