Tomcat web.xml配置变量

时间:2012-08-06 17:19:54

标签: tomcat servlets configuration web.xml

我的Java Web应用程序在war文件中包含配置文件(例如myapp.xml)。我在web.xml文件中提供了这个文件的路径,如下所示。

  <servlet>
    <servlet-name>wc</servlet-name>
    <servlet-class>com.myapp.servlets.WC</servlet-class>
    <init-param>
      <param-name>configfile</param-name>
      <param-value>${catalina.base}/webapps/myapp/WEB-INF/myapp.xml</param-value>
    </init-param>
  </servlet>

问题是我现在想在同一台服务器上部署各种版本进行测试和开发,每个版本在webapps下都有不同的路径。我想避免为每个部署修改web.xml文件,但我找不到任何方法来引用WEB-INF文件夹。

这就是我想做的事情:

  <servlet>
    <servlet-name>wc</servlet-name>
    <servlet-class>com.myapp.servlets.WC</servlet-class>
    <init-param>
      <param-name>configfile</param-name>
      <param-value>${app.base}/myapp.xml</param-value>
    </init-param>
  </servlet>

$ {app.base} == $ {catalina.base} / webapps / myapp / WEB-INF

是否有一些可用的变量可以为我提供应用程序目录的路径?

如果没有,你能想到其他方法来实现这个目标吗?

2 个答案:

答案 0 :(得分:1)

您可以将带有-Dapp.base=/foo/bar的变量传递给tomcat的JVM(取决于catalina.sh中的版本或/ conf中的文件),然后使用`System.getProperty读取它( ..)在您的WC servlet中。

虽然建议将这些配置放在外部位置,以便您可以在不触及已部署的应用程序的情况下进行更改,并且还可以根据需要启用解压缩的WAR部署。

如果您想访问应用程序中的资源,那么您最好使用相对(而不是绝对)路径。

  • 如果资源位于类路径上,请使用getClass().getResourceAsAstream(..)
  • 如果资源位于类路径之外,请使用servletContext.getResourceAsStream(..)

答案 1 :(得分:0)

您可以使用

...
servletContext().getRealPath("");
...

获取应用程序的物理主目录。