gpt4 book ai didi

Tomcat web.xml 配置变量

转载 作者:行者123 更新时间:2023-11-28 22:00:23 31 4
gpt4 key购买 nike

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

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

如果没有,你能想出一些其他的方法来完成这个吗?

最佳答案

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

虽然建议将这些配置放在外部位置,这样您就可以在不接触部署的应用程序的情况下更改它们,并且还可以在需要时启用解压缩的 WAR 部署。

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

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

关于Tomcat web.xml 配置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11832942/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com