2

我的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

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

如果没有,你能想出其他方法来实现这一点吗?

4

2 回答 2

1

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

尽管建议将这些配置放在外部位置,这样您就可以在不接触已部署应用程序的情况下更改它们,并且如果需要,还可以启用未打包的 WAR 部署。

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

  • 如果资源在类路径上,请使用getClass().getResourceAsAstream(..)
  • 如果资源在类路径之外,请使用servletContext.getResourceAsStream(..)
于 2012-08-06T18:03:10.983 回答
0

您可以使用

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

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

于 2012-08-06T20:03:48.987 回答