让 Tomcat 使用静态上下文重新加载 Web 应用程序

发布于 2024-09-27 11:13:37 字数 969 浏览 15 评论 0原文

我有一个主机,它不会自动部署所有网络应用程序。

  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="false"
        xmlValidation="false" xmlNamespaceAware="false">

但我确实希望 dreambear Web 应用程序能够自动重新加载而无需重新启动,以用于开发目的(因此这是 SO,而不是服务器故障)。

Catalina/localhost/dreambear.xml

<Context reloadable="true">
    <Parameter name="gamePageUrl" value="http://****/dreambear.html" />
</Context>

我通过将 dreambear.war 放入 webapps 目录来部署 Web 应用程序。不幸的是,它不会自动重新加载:

  • (Host:unpackWARs = false): 未检测到新版本的 WAR
  • (Host:unpackWARs = true): 新版本的 WAR 未解压
  • (Host:unpackWARs = true) ): 如果我删除解压后的目录,新的WAR将被解压但不会部署。

有办法实现我想要的吗?我不想启用 autoDeploy 因为每次我放入新的 WAR 时,我的上下文 xml 都会被删除 (参见此处)。

I have a Host that doesn't automatically deploy all web apps.

  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="false"
        xmlValidation="false" xmlNamespaceAware="false">

But I do want the dreambear web app to automatically reload without a restart, for development purposes (hence this is on SO, not Server Fault).

Catalina/localhost/dreambear.xml:

<Context reloadable="true">
    <Parameter name="gamePageUrl" value="http://****/dreambear.html" />
</Context>

I deploy the web app by putting dreambear.war in the webapps dir. Unfortunately, it doesn't automatically get reloaded:

  • (Host:unpackWARs = false): The new version of the WAR is not detected
  • (Host:unpackWARs = true): The new version of the WAR is not unpacked
  • (Host:unpackWARs = true): If I delete the unpacked directory, the new WAR will be unpacked but not deployed.

Is there a way to achieve what I want? I don't want to enabled autoDeploy because my context xml will be deleted every time I put in a new WAR (see here).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

被你宠の有点坏 2024-10-04 11:13:37

我尝试了一些组合,autoDeploy 设置为 false 的情况下,它们都不会从 WAR 文件中重新部署。

设置 reloadable< /code> 到 trueContext 中不起作用,因为文档声明

如果您希望 Catalina 这样做,则设置为 true
监控 /WEB-INF/classes/ 中的类
和 /WEB-INF/lib 进行更改,以及
自动重新加载网页
如果检测到更改,则应用程序。

我也尝试过从管理器网络应用程序重新加载

http://localhost:8080/manager/reload?path=/dreambear

但是,这也不会从战争中进行更改

当网络
应用程序上下文不可重新加载
并且您已更新课程或
/WEB-INF/classes 中的属性文件
目录或当您添加或
更新了 /WEB-INF/lib 中的 jar 文件
目录。

管理器文档对此更加清楚

目前,应用程序正在重新加载(以
获取课程的更改或
web.xml 文件)在以下情况下不受支持
直接部署Web应用程序
来自 WAR 文件。它仅在以下情况下有效
Web应用程序是从部署的
解压后的目录。如果你是
使用 WAR 文件,您应该取消部署
然后部署或使用
再次更新应用程序参数
以获取您的更改。

I've tried some combinations, and none of them will redeploy from the WAR file with autoDeploy set to false.

Setting reloadable to true in Context wont work, since the docs state

Set to true if you want Catalina to
monitor classes in /WEB-INF/classes/
and /WEB-INF/lib for changes, and
automatically reload the web
application if a change is detected.

I've also tried reloading from the manager web app

http://localhost:8080/manager/reload?path=/dreambear

However, this too does not take changes from the war

This can be useful when the web
application context is not reloadable
and you have updated classes or
property files in the /WEB-INF/classes
directory or when you have added or
updated jar files in the /WEB-INF/lib
directory.

The manager docs are more clear on this

Currently, application reloading (to
pick up changes to the classes or
web.xml file) is not supported when a
web application is deployed directly
from a WAR file. It only works when
the web application is deployed from
an unpacked directory. If you are
using a WAR file, you should undeploy
and then deploy or deploy with the
update parameter the application again
to pick up your changes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文