2014-08-28 74 views
5

我试图在传统上在WebSphere下运行的Tomcat 8下运行Java Web项目。一个servlet进行以下调用:Tomcat 8中的getServletContext()。getRealPath()返回错误的路径

xslFilePath = config.getServletContext().getRealPath(System.getProperty("file.separator") + "xsl"); 

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容器是否可取?任何意见,将不胜感激。

回答

9

使用getRealPath(“/ xsl”)。

getRealPath()的参数是一个'虚拟路径',不幸的是,这是一个在Java文档中使用但在任何地方都没有定义的概念。它被假定为您的Web应用程序中的资源路径,并且该情况下的分隔符总是“/”,而不管平台如何。

+11

这个答案是正确的,但它不只是使用错误的路径分隔符。先前版本的Tomcat允许getRealPath(“xsl”)根本没有初始分隔符,但Tomcat 8需要“/ xsl”(否则返回null)。这已经打破了我的一些个人web应用程序,其中大部分从Tomcat 5以来的未编译中幸存下来... – sam 2014-10-18 15:30:58

相关问题