Context.xml中的相对路径

时间:2013-10-22 12:38:17

标签: java tomcat context.xml

有没有办法在Web应用程序的context.xml中设置 docBase 属性的相对路径,因此它位于tomcat服务器实例的appBase目录之外?

我希望能够在计算机之间共享上下文配置,并让应用程序存在于目录中,而不是war文件中。这样我就可以直接将类编译到该目录中(在我的项目开发目录中)并让tomcat使用这些类而无需任何复制/打包。

我正在使用tomcat 8.0.0-RC5。 我的目录布局是:

/home/david/projects/frontend/web-content          <-- the static html files
/home/david/projects/frontend/web-content/WEB-INF  <-- the WEB-INF with the web.xml
/home/david/projects/tomcat                        <-- tomcat base directory
/home/david/projects/tomcat/Catalina/localhost     <-- holds the frontend.xml context configuration

我试过了

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/frontend" docBase="../../frontend/web-content">
</Context>

但这不起作用。 / web-content之前的整个路径似乎被忽略了。日志说:

The main resource set specified [/home/david/projects/tomcat/webapps/web-content] is not valid

上下文容器的Tomcat 8 documentation表示:

  

您可以为此目录或WAR文件指定绝对路径名,或者指定相对于拥有主机的appBase目录的路径名。

这里的亲属是指appBase的严格子目录(不允许)吗?

设置绝对路径可以正常工作。配置

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/frontend" docBase="/home/david/projects/frontend/web-content">
</Context>

有效,但它特定于我的电脑。所以我不能再修改上下文配置了。

我可以在tomcat服务器的appBase目录中创建一个符号链接,让它指向我的应用程序的web-content文件夹。这可行,但我会在linux和Windows机器上有不同的配置(符号链接)。

1 个答案:

答案 0 :(得分:6)

只取相对路径名的姓氏,忽略第一部分 最有可能是tomcat中的一个bug。相对路径名应该起作用或必须抛出错误。 但忽略零件是不好的。 解决方法可能是使用这样的绝对路径名: <Context docBase="${catalina.home}/../www.war"

我只是阅读Tomcat 8.0.15的更改日志。 应该修复bug(!):  &#34;正确处理Context的docBase属性的相对值。&#34;