【问题标题】:Start / stop a web application from itself?从自身启动/停止 Web 应用程序?
【发布时间】:2010-11-02 12:31:21
【问题描述】:

我使用 Java、Struts 制作了一个 Web 应用程序,并在 Apache Server 和 Tomcat 上运行。能够从 Web 重新启动应用程序将非常有用。我不想重启Tomcat,只重启这个webapp,和Tomcat Manager一样。

你知道我该怎么做吗?如果没有,有什么方法可以模拟这种行为(重新加载 config.properties,使 Hibernate 初始化进程等)?

非常感谢。

【问题讨论】:

  • 您可能会发现this 链接很有用。

标签: java tomcat jakarta-ee


【解决方案1】:

只需点击网址

http://<username>:<password>@<hostname>:<port>/manager/stop?path=/<context path> 

停下来

http://<username>:<password>@<hostname>:<port>/manager/start?path=/<context path> 

开始。这会模拟您使用管理器应用程序。

【讨论】:

  • 从 Tomcat 7 开始,您必须使用 manager/text 而不是 manager
【解决方案2】:

Tomcat 管理器提供了一个 http 接口来启动/停止应用程序和其他任务。您可以使用Ant tasks 轻松访问这些操作。

【讨论】:

    【解决方案3】:

    我快速浏览了 Tomcat 管理器的源代码。看起来有一个类是 Tomcat 源代码的一部分,称为“Container Servlet”。来自 javadocs:

    ContainerServlet 是一个 servlet 可以访问 Catalina 内部的 功能,并从加载 Catalina 类加载器而不是 Web 应用程序类加载器。

    ContainerServlet 会自动传递一个包装器,该包装器可用于获取 Context 和 Deployer —— Deployer 具有有用的方法,例如 start(String contextPath)stop(String contextPath) 可以满足您的需求。

    所以,我认为您需要做的是编写您自己的继承自 ContainerServlet 的 servlet,并配置 Tomcat 以使用 Catalina 类加载器加载您的 servlet(查看 Manager 的配置以了解如何)。请注意,在托管环境中这可能不适合您。

    然后,您的 servlet 可能有一个按钮,您可以按下该按钮来重新加载应用程序。我建议在前面放置某种密码保护。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      相关资源
      最近更新 更多