3

我有一个使用 Tomcat 的 6 和 7 以及 SDK 的 6 和 7 在 Windows 和 Linux 上运行良好的应用程序。我设置了 SDK 8 和 Tomcat 8,当应用程序运行时,它现在阻塞:

public static final String THEME_DIRECTORY = File.separator + "WEB-INF"
                                                + File.separator + "theme"
String realPath = servletContext.getRealPath(requiredPath);

作为realPath回报null。事实证明,以下情况属实:

  • requiredPath是'\WEB-INF\主题';
  • File.separator是 '\';
  • 如果requiredPath设置为“/WEB-INF/theme”,那么我realPath会按预期返回。

似乎行为已经改变,我不能再使用File.separator.

有人遇到过这种情况么?

4

2 回答 2

2

是的,我也遇到过。我怀疑这是 Tomcat 8 中 servlet 规范的更严格的实现,而不是 Tomcat 7。这里的 javadocs似乎表明路径参数应该是一个 URL 片段,这意味着它必须使用正斜杠,而不是反斜杠,这是您在 Windows 环境中使用 File.separator 时得到的。

于 2014-09-12T20:48:24.713 回答
0

这取决于 Apache Tomcat 8 的版本。

我发现方法 getRealPath() 中的反斜杠适用于最新的 Tomcat,但它不适用于 8.0.29 之前的版本。

于 2016-10-12T08:56:00.353 回答