Tomcat 8中的getServletContext().getRealPath()返回错误的路径

Mic*_*elB 6 java tomcat servlets servletconfig

我试图在Tomcat 8下运行一个传统上在WebSphere下运行的Java Web项目.一个servlet进行以下调用:

xslFilePath = config.getServletContext().getRealPath(System.getProperty("file.separator") + "xsl");
Run Code Online (Sandbox Code Playgroud)

config是ServletConfig的一个实例.

xsl位于项目内部并部署为C:\ myproject\build\web\xsl.当servlet尝试引用位​​于xslFilePath中的文件时,我得到一个异常,指示Tomcat实际上在C:\ Program Files\Apache Software Foundation\Apache Tomcat 8.0.3\bin \null中查找xsl文件.显然这是错误的位置,没有找到任何东西.

不幸的是我无法更改代码,因为我无法访问源代码.所以我想知道这是否是Tomcat的预期行为?是否有任何Tomcat配置可以确保路径被引用到部署目录而不是Tomcat bin目录?选择其他servlet容器会更好吗?任何意见,将不胜感激.

Mar*_*mas 10

使用getRealPath("/ xsl").

getRealPath()的参数是一个"虚拟路径" - 遗憾的是 - 它是Java文档中使用的概念,但实际上并未在任何地方定义.它被假定为Web应用程序中资源的路径,在这种情况下,分隔符始终为"/",而不管平台如何.

  • 这个答案是正确的,但它不仅仅是使用错误的路径分隔符.Tomcat的早期版本允许getRealPath("xsl")完全没有初始分隔符,但Tomcat 8需要"/ xsl"(否则返回null).这打破了我的几个个人网络应用程序,其中大部分都是自Tomcat 5时代以来未经编译的幸存... (12认同)