0

我不知道为什么fi.exists()在这里返回 false。我可以通过浏览器浏览文件contextPath+"/images/default.png

String contextPath = req.getContextPath();
File fi = new File(contextPath+"/images/default.png");
exists = fi.exists();
4

2 回答 2

3

我认为您误解了上下文路径是什么。

如果您的应用程序部署在 上yourdomain.com/app,则上下文路径将为/app.

它用于告诉客户端在哪里寻找资源。

当您这样做时contextPath+"/images/default.png",您的路径将取决于部署路径(在这种情况下它将是文件/app/images/default.png)。

如果您想要在安装应用程序服务器旁边的文件,您可以使用"images/default.png".

如果你想访问资源文件,你可能想尝试Thread.currentThread().getContextClassLoader().getResource("images/default.png")而不是文件。

如果要检查是否存在与上下文相关的资源,可以按照此处所述进行:

boolean exists=req.getServletContext().getResource("images/default.png")!=null;`

或者

String path=req.getServletContext().getRealPath("images/default.png");`
于 2021-05-19T15:06:25.717 回答
0

我需要使用 getRealPath() 而不是 getContextPath():

String path = req.getServletContext().getRealPath("/images/default.png");
File fi = new File(path);
于 2021-05-19T16:07:56.037 回答