【问题标题】:Deployment of Web Application to a Running Tomcat将 Web 应用程序部署到正在运行的 Tomcat
【发布时间】:2009-02-24 11:33:15
【问题描述】:

我想收集一些关于将 Web 应用程序部署到正在运行的 Tomcat 的最佳实践。不久前,我不得不描述我们的 Web 应用程序的部署过程,这个过程看起来相当混乱。

假设,我们在 WAR 文件 (foo.war) 中正确配置了一个应用程序,并且不需要额外的配置。在这种情况下,部署过程相当简单:

  • 将 foo.war 文件复制到 $CATALINA_HOME/webapps 目录。如果应用程序正确启动,应用程序将自动部署到 $CATALINA_HOME/webapps/foo 目录。

要取消部署应用程序:

  • 从 $CATALINA_HOME/webapps 中删除 foo.war 文件。如果应用程序正确卸载,它将被卸载并删除 $CATALINA_HOME/webapps/foo。

现在我想在我正在运行的应用程序中覆盖一些上下文参数。阅读了docs,我需要做的就是:

  1. 创建一个名为 foo.xml 的 context.xml 文件
  2. 将文件复制到 $CATALINA_BASE/conf/[enginename]/[hostname]/ 目录。

很遗憾,这不起作用:应用程序不会重新启动。根据经验,我们发现唯一可行的解​​决方案是将war文件部署到$CATALINA_HOME/webapps之外的位置。 另外,WAR文件中可配置的上下文参数的默认值应该在web.xml中指定,因为WAR文件中的context.xml在外面有context.xml时是不会被读取的。

这是 foo.xml 的一个简单示例:

<?xml version='1.0' encoding='utf-8'?>                           
<Context docBase="/path-to-deployment-directory/foo.war">
    <Parameter name="myparam" value="newvalue" override="false"/>
</Context>

如果您希望“新值”覆盖 WAR 的 web.xml 中指定的值,请务必为参数指定 override=false。这对我们来说并不明显。

因此,要将应用程序部署到正在运行的 Tomcat:

  1. 创建一个名为 foo.xml 的 context.xml 文件
  2. 将文件复制到 $CATALINA_BASE/conf/[enginename]/[hostname]/ 目录。
  3. 将 foo.war 复制到 foo.xml 的 docBase 中指定的位置;应用程序将自动部署。

应用新的上下文参数:

  • 将参数值添加到foo.xml并保存文件;应用程序将自动重新部署。

要取消部署应用程序:

  • 从 $CATALINA_BASE/conf/[enginename]/[hostname]/ 目录中删除 foo.xml

请注意,删除 foo.war 也可以,但也会删除 foo.xml。


到目前为止,我有以下问题:

  1. 在不停止 tomcat 的情况下部署 Web 应用程序是否是最佳实践?我听说过一种观点,即永远不需要部署到正在运行的 tomcat,因为人们在单独的 tomcat 中运行每个应用程序。
  2. 将 WAR 文件复制到 $CATALINA_HOME/webapps 是否是个好主意,或者最好将它们保存在单独的位置?
  3. 如何配置部署到 $CATALINA_HOME/webapps 的应用程序
  4. 为什么 catalina.out 中没有用于部署应用程序的 INFO 行而有用于取消部署的行?是否可配置?

【问题讨论】:

    标签: deployment configuration tomcat servlets


    【解决方案1】:

    关于问题 (1),Tomcat 非常适合将 servlet 部署到正在运行的服务器中。可能会担心w.r.t。安全或可能的 D.O.S.或提供您将拥有单独的服务器实例的原因。

    您可以灵活地使用任何一种方式,但部署到已经运行的服务器通常更方便。这是 servlet 体系结构中的一个内置功能。 :)

    对于 (2),您可以自行决定将 WAR 放在何处。听起来您已经将其配置为非标准(我应该说是非默认)方式。检查您的 server.xml 文件以获取服务器实例中的设置。检查unpackWARsautoDeploy 等属性。

    对于 (3) 和 (4) 以及您的 (1,2) 问题,最好查阅 Tomcat 文档以了解您的 Tomcat 版本的部署模型。您应该能够使用相同的文档来确定您的服务器是如何配置的。

    请参阅 Tomcat 手册中的 Tomcat Web Application Deployment,根据您的 Tomcat 版本进行调整。

    【讨论】:

      【解决方案2】:

      一种解决方案是使用管理器应用程序。如果您认为使用它是安全的,那么您可以轻松部署、启动、停止和取消部署应用程序:

      http://localhost:8080/manager/deploy?path=[context_path] http://localhost:8080/manager/start?path=[context_path] http://localhost:8080/manager/stop?path=[context_path] http://localhost:8080/manager/undeploy?path=[context_path]

      有一些 ant 任务可以帮助您完成这些任务。

      我在猜测,但不确定,停止和启动应用程序会使其重新读取 context.xml。

      关于你的第二个问题,我认为出于维护原因,最好将war文件保存在webapps目录中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-16
        • 1970-01-01
        • 2012-08-12
        • 2013-02-20
        • 2014-11-02
        • 2011-08-11
        • 2011-08-06
        • 1970-01-01
        相关资源
        最近更新 更多