【问题标题】:Why does ServletContext#getRealPath("/") return a relative path?为什么 ServletContext#getRealPath("/") 返回相对路径?
【发布时间】:2010-11-27 06:08:13
【问题描述】:

我有以下sn-p的代码:

String path = servletContext.getRealPath("/");

现在我收到一个用户的错误报告,说返回的路径不是绝对路径。 返回的路径是 'usr/local/...' 而不是 '/usr/local/...' ,所以 getRealPath 似乎返回的是相对路径。

我可以看到这一点,因为返回的路径已记录到日志文件中。

我的规格是:

  • JBoss 4.0.5.GA
  • 红帽 EL 4
  • jdk 1.5.0

有关 javadoc,请参阅 here

【问题讨论】:

  • 您确定您的日志记录不只是出于某种原因删除了第一个字符吗?您可以调试到应用程序并以这种方式检查结果吗?如果一切都失败了,您可以在 Sun 上查看有关此问题的错误报告。
  • 不,很遗憾没有。 1:这是一个简单的日志语句:log.debug("path:" + path); 2:稍后在应用程序中,一些代码尝试在该路径下查找文件:new File(servletContext.getRealPath("/) + ...); 对 file.exists() 的调用返回 false。不过好主意,我'将检查错误报告。
  • 您提到您使用的是 JBoss,但是哪个 Web 容器?它过去默认与 Jetty 一起提供,但现在我认为是 Tomcat...您也可以在错误数据库和/或论坛上查看您实际使用的 Web 容器的这个问题,因为它是它们的实现...没有想到早一点。

标签: java servlets jakarta-ee


【解决方案1】:

类似

String path = new File(servletContext.getRealPath("/")).getAbsolutePath();

应该可以解决您的问题。 (虽然它没有回答你的问题......;-))

问候,扬

【讨论】:

  • 我不这么认为 :) 说 servletContext.getRealPath("/") 返回 'usr/local/...' new File("usr/local/...") 只会当前工作目录为 / (root) 时工作​​。
  • 你试过了吗?它将返回一个绝对文件(它在我的 mac 上使用 jetty 作为 servlet 容器运行);-)
  • 这可以追溯到我对这个问题的评论......我想知道它是否是一个实现问题,因为您刚刚在 Jetty 中测试并且 JBoss 使用了我相信的 Tomcat。文档和规范说它应该可以工作,但他们必须正确实现它:-)
  • 据我所知,Jboss 默认使用 tomcat 作为 webcontainer。您可以将其配置为使用 Jetty。或者只是尝试使用 "new File("/").getAbsoluteFilePath() 作为后备。;-)
猜你喜欢
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多