Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java dynamic web项目中找不到该映像_Java_Jakarta Ee_Servlets - Fatal编程技术网

在java dynamic web项目中找不到该映像

在java dynamic web项目中找不到该映像,java,jakarta-ee,servlets,Java,Jakarta Ee,Servlets,我有以下问题: 我创建了servlet,它应该绘制一个动态图。在绘图过程中,它应该从另一个目录中获取图片,并将其绘制在另一个图像上。一切都应该很好: try { BufferedImage temp = ImageIO.read(new File("image/arrow.png")); tempIm = temp.getScaledInstance(55, 55, Image.SCALE_SMOOTH); } catch (IOE

我有以下问题:

我创建了servlet,它应该绘制一个动态图。在绘图过程中,它应该从另一个目录中获取图片,并将其绘制在另一个图像上。一切都应该很好:

try {
            BufferedImage temp = ImageIO.read(new File("image/arrow.png"));
            tempIm = temp.getScaledInstance(55, 55, Image.SCALE_SMOOTH);
        } catch (IOException e) {

            e.printStackTrace();

        }
但它打印了以下内容:

SEVERE:javax.imageio.IIOException:无法读取输入文件!
在javax.imageio.imageio.read(imageio.java:1275)
在CertifiedRaw.doGet(CertifiedRaw.java:36)

我试图以各种可能的方式更改文件对象的路径,但这只会带来相同的问题,即使图像的一部分仍然发送到浏览器。所以问题在于ImageIO.read部分-我如何找到它为什么不加载图像


我在Eclipse中工作-servlet位于src文件夹中。图像位于rot目录“WebContent”下的“image”文件夹中。

java.io.File中的相对路径与当前工作目录(CWD)相对。这是在发出启动Java运行时环境(在您的示例中是Web服务器)的命令时当前打开的文件夹。在Eclipse中启动服务器时,这通常是项目的
/bin
文件夹。您可以通过打印
新文件(“.”)来解决这个问题。getAbsolutePath()

但您根本不应该依赖
文件中的相对路径。CWD不能从代码内部控制

因为它已经在webcontent文件夹中了,所以只需将其取而代之


请注意,
HttpServlet
扩展自
GenericServlet
类,因此您不需要自己提供该方法。
java.io.File
中的相对路径是相对于当前工作目录(CWD)的。这是在发出启动Java运行时环境(在您的示例中是Web服务器)的命令时当前打开的文件夹。在Eclipse中启动服务器时,这通常是项目的
/bin
文件夹。您可以通过打印
新文件(“.”)来解决这个问题。getAbsolutePath()

但您根本不应该依赖
文件中的相对路径。CWD不能从代码内部控制

因为它已经在webcontent文件夹中了,所以只需将其取而代之


请注意,
HttpServlet
GenericServlet
类继承而来,因此您不需要自己提供该方法。

但是您能解释更多关于该概念的信息吗?什么是CWD?这些文件不应该部署在web服务器中吗?servlet仅在调用请求时处理该请求-这意味着文件类在部署之前正在查找资源?+getResource()如何找到相同的资源?我是否应该对所有类型的碎片(不仅仅是图片)做同样的事情jsp片段呢?如果它们不是直接在根目录下,而是在某个子文件夹中,如何加载它们?CWD是“当前工作目录”。它是当前在JRE/JVM启动时打开的本地磁盘文件系统文件夹。作为练习,创建一个简单的java类,用于打印
新文件(“.”)。getAbsolutePath()
。编译它并将其保存在固定位置,然后在命令提示符下从不同文件夹中运行它。例如windows文件夹、程序文件、文档等。您将看到它每次都打印当前打开的文件夹。
java.io.File
仅在本地磁盘文件系统上工作,并且不知道应用程序正在运行的上下文(例如java EE Web应用程序),换句话说,就是永远不要在Web应用程序中使用具有相对路径的
File
。请参见,但您能否解释更多有关该概念的信息?什么是CWD?这些文件不应该部署在web服务器中吗?servlet仅在调用请求时处理该请求-这意味着文件类在部署之前正在查找资源?+getResource()如何找到相同的资源?我是否应该对所有类型的碎片(不仅仅是图片)做同样的事情jsp片段呢?如果它们不是直接在根目录下,而是在某个子文件夹中,如何加载它们?CWD是“当前工作目录”。它是当前在JRE/JVM启动时打开的本地磁盘文件系统文件夹。作为练习,创建一个简单的java类,用于打印
新文件(“.”)。getAbsolutePath()
。编译它并将其保存在固定位置,然后在命令提示符下从不同文件夹中运行它。例如windows文件夹、程序文件、文档等。您将看到它每次都打印当前打开的文件夹。
java.io.File
仅在本地磁盘文件系统上工作,并且不知道应用程序正在运行的上下文(例如java EE Web应用程序),换句话说,就是永远不要在Web应用程序中使用具有相对路径的
File
。另见
InputStream input = getServletContext().getResourceAsStream("/image/arrow.png");
BufferedImage image = ImageIO.read(input);
// ...