Java 使用Tomcat手动部署webapp(即autoDeploy=false,noDeployOnStartup=false)

Java 使用Tomcat手动部署webapp(即autoDeploy=false,noDeployOnStartup=false),java,jakarta-ee,tomcat,Java,Jakarta Ee,Tomcat,我正在尝试将多个web应用程序部署到tomcat 6.x,并关闭了autoDeploy和onDeployStartup,因为我想手动注册这些应用程序,并将它们映射到URL,而不是基于它们的war文件名 我将以下上下文文件放在$catalina.home/conf/catalina/localhost中: <Context path="" docBase="web-1.0-SNAPSHOT.war" debug="1"> </Context> 我将war文件放在$ca

我正在尝试将多个web应用程序部署到tomcat 6.x,并关闭了autoDeploy和onDeployStartup,因为我想手动注册这些应用程序,并将它们映射到URL,而不是基于它们的war文件名

我将以下上下文文件放在$catalina.home/conf/catalina/localhost中:

<Context path="" docBase="web-1.0-SNAPSHOT.war" debug="1">
</Context>

我将war文件放在$catalina.home/webapps下,但当我启动tomcat时,什么也没有部署。我甚至没有看到关于我创建的上下文文件的任何错误消息。或者任何打印出来的错误信息


有什么问题吗?我已经阅读了很多概述autodeploy的文档,但是对于如何在autodeploy之外执行此操作的细节却非常粗略。

将deployonstartup设置为false会告诉tomcat不要在启动时部署应用程序。我认为关闭自动部署就足够了。因此,可以在server.xml中的主机中尝试以下操作:autoDeploy=“false”deployOnStartup=“true”

尝试以下步骤

关闭tomcat

将web-1.0-SNAPSHOT.war复制到webapps文件夹

部署webapp

现在webapps中有一个名为web-1.0-SNAPSHOT的文件夹

转到conf/server.xml

添加以下条目

<Context path="/abc" docBase="web-1.0-SNAPSHOT" debug="1"></Context>

希望这对您有所帮助,因此有关自动部署工作原理和替代部署的详细信息仅在此处讨论:

我不知道为什么tomcat会把事情弄得这么复杂。如果关闭“自动部署”,则唯一的选择是修改server.xml并在其中添加上下文。您不能将上下文的定义具体化,这似乎是一种复杂的部署方式。如果我要花时间删除一个XML配置文件,我应该能够控制它装载到的URL和docBase。只需直截了当,因为Jetty确实如此。

示例代码

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


    <Context path="/howto-prepareexam" docBase="howto-prepareexam" debug="1"></Context>

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

  </Host>


然后重新启动tomcat

这可能就是解决方案。在生产部署上重新启动Tomcat是一个很好的解决方案,因为众所周知的PermGen空间错误。我已经为每个应用程序部署了一个Tomcat。我已经使用deployOnStartup=“true”进行了部署,它只执行autoDeploy=“true”所做的操作,我无法控制将URL映射到war文件。我有一些特定的URL,我想把war放在这些URL上,这些URL不是从war文件的名称派生出来的。这才是我想要解决的问题。因此,我不认为启用autoDeploy或deployOnStartup是一个解决方案。这是另一个可以在So上打开的问题。如何部署到与war文件名不同的路径。但在这个问题上,问题是应用程序没有在tomcat启动时加载。如果两者都是错的话就不会了。这其实不是另一个问题,因为这是我的动机,它也没有回答我的其他问题,即如何调试上下文片段的部署,因为根据文档,我将它们放在正确的目录中,但tomcat没有看到它们。他们的解决方案有点像是针对autoDeploy无法控制URL的黑客。我会投你一票,因为你所描述的是让它工作的一种方法,但我想我找到了一个全面的解释,解释了如果你关闭autoDeploy,为什么要这么做。还有其他选择,这样我就可以将我的上下文保存在server.xml的外部,为什么不把它发布在这里呢?这对别人和我自己都有好处。我已经发布了另一个答案,上面有我找到的信息的链接。如果您跳到附录和方法2.1和2.2部分,这些可能是我看到的关于关闭autoDeploy/deployOnStartup意味着什么的最好解释。
localhost:8080/abc
<Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="false" deployOnStartup="false">


    <Context path="/howto-prepareexam" docBase="howto-prepareexam" debug="1"></Context>

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

  </Host>