我的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
是否有一些可用的变量可以为我提供应用程序目录的路径?
如果没有,你能想到其他方法来实现这个目标吗?
答案 0 :(得分:1)
您可以将带有-Dapp.base=/foo/bar
的变量传递给tomcat的JVM(取决于catalina.sh中的版本或/ conf中的文件),然后使用`System.getProperty读取它( ..)在您的WC servlet中。
虽然建议将这些配置放在外部位置,以便您可以在不触及已部署的应用程序的情况下进行更改,并且还可以根据需要启用解压缩的WAR部署。
如果您想访问应用程序中的资源,那么您最好使用相对(而不是绝对)路径。
getClass().getResourceAsAstream(..)
servletContext.getResourceAsStream(..)
答案 1 :(得分:0)
您可以使用
...
servletContext().getRealPath("");
...
获取应用程序的物理主目录。