【问题标题】:Java - load file from web contextJava - 从 Web 上下文加载文件
【发布时间】:2021-05-19 14:55:28
【问题描述】:

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

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

【问题讨论】:

    标签: java servlets filenotfoundexception webcontext


    【解决方案1】:

    我想你误解了什么是上下文路径。

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

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

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

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

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

    如果你想检查上下文相关的资源是否存在,你可以这样做as stated here

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

    String path=req.getServletContext().getRealPath("images/default.png");`
    

    【讨论】:

    • 嗯,我不确定您所说的“在安装应用程序服务器旁边”是什么意思。图片不是资源,它位于网络环境中:mydomain/app/images/default.png。我尝试了您的建议,但仍然找不到文件:File fi = new File("images/default.png")
    • 哦,这就是你的意思。上下文中的东西不一定是文件。我已经更新了我的答案。
    • 我不得不使用getRealPath: String path = req.getServletContext().getRealPath("/images/default.png") File fi = new File(path);这不会编译: boolean exists=req.getServletContext().getResource("images/default.png");
    【解决方案2】:

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

    String path = req.getServletContext().getRealPath("/images/default.png");
    File fi = new File(path);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2014-07-28
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多