gpt4 book ai didi

java - Class.getResourceAsStream 的解释以及如何在 Tomcat 中为简单的 Java web - 应用程序设置它?

转载 作者:行者123 更新时间:2023-11-28 22:13:26 41 4
gpt4 key购买 nike

我有一个部署到 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 下:

enter image description here

所以

PdfTwoServlet.class.getResourceAsStream("/two.pdf");

工作正常并在 classes 文件夹下找到文件 two.pdf,但我不知道它是如何工作的。

Accessing properties file in a JSF application programmatically这里 BalusC 说:

The Class#getResourceAsStream() can take a path which is relative to the location of the Class which you're using there as starting point. If you use /foo/filename.properties, then it will actually load foo/filename.properties from the classpath root.

我有两个问题:

1) 为什么classpath根目录是WEB-INF\classes文件夹?在哪里确定的? (据我了解,应该是因为我说的代码运行正常。)

根据这个:http://docs.oracle.com/javase/tutorial/essential/environment/paths.html ,我的本地机器上没有设置类路径。所以也许当我启动 tomcat 时,它会设置类路径?但是部署的网络应用程序很少,类路径很少吗?

2) 有没有更好的方法来代替 PdfTwoServlet.class.getResourceAsStream ?像 getClassPath().getResourceAsStrem 这样的东西?

编辑:也许更有经验和英语更好的人可以编辑这个问题的标题。我不确定它是否足够好。

最佳答案

对于 1) servlet 应用程序中的类路径根目录是 jar 的 WEB-INF\classes 文件夹,加上该 WAR 的 WEB-INF/lib 中所有 jar 的根目录。这些位置中的任何内容都将被视为类路径的根。

关于 tomcat 中的类路径如何工作的问题,当 tomcat 部署它时,它按以下方式设置类路径:每个 WAR 对应一个单独的类加载器,它可以访问 WEB-INF/classes 和 WEB-INF 中的所有 jar/库。

默认如果搜索的资源在这里没有找到,会去tomcat/lib目录下搜索。如果那里没有找到,它会询问父类加载器,等等,解释可以找到here

如果部署了多个网络应用程序,每个 WAR 都会有自己的类加载器,指向它自己的 WEB-INF/classes 和 WEB-INF/lib jar。

对于 2) 没有像 getClasspath() 这样的方法,ServletContext.getResourceAsStream() 是 servlet 应用程序中从 WAR 内部获取资源的推荐方法。 WAR 可能被压缩或分解,这对两者都有效,请参阅 this answer .

关于java - Class.getResourceAsStream 的解释以及如何在 Tomcat 中为简单的 Java web - 应用程序设置它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19505646/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com