当前位置: 首页 > 知识库问答 >
问题:

Tomcat使用配置(而不是war名称)设置应用程序上下文

松高歌
2023-03-14

我的问题是这样的--假设我有一个war文件,叫做My-APP-123.war。我想把它部署在Tomcat服务器(9.0.x)上,让它自动解包。

然后可以通过http://localhost:8080/my-app-123访问该应用程序

有没有一种方法,不重命名war文件,就可以从http://localhost:8080/my-app访问应用程序?

在此之前,我将说,我意识到最简单的解决方案是只命名war文件。我很好奇在Tomcat配置中是否有一种方法可以做到这一点。

我已经这样做了(在server.xml文件的主机部分中):

<Context path="/my-app" docBase="my-app-123"></Context>

但我在网上(https://tomcat.apache.org/tomcat-7.0-doc/config/context.html)看到的路径变量描述:

即使在server.xml中静态定义上下文时,也不能设置此属性,除非docBase不位于主机的appBase下,或者deployOnStartup和autoDeploy都为false。如果不遵守这一规则,很可能导致双重部署。

我现在可以在http://localhost:8080/my-app和http://localhost:8080/my-app-123上访问该应用程序,这不是一个真正的解决方案。

共有1个答案

姚宪
2023-03-14

以下内容适用于我使用过的Tomcat部署--不存在双重部署问题。

在我将在这里使用的示例中,我在tomcatdemo-1.0-snapshot.war中有一个简单的“Hello World”webapp。它部署在Tomcat9.0的标准位置(webapps目录)中。

我希望应用程序的上下文路径为/my-foo-app

<Context path="/my-foo-app" docBase="TomcatDemo-1.0-SNAPSHOT.war"></Context>
<Host name="localhost" 
      appBase="webapps" 
      deployOnStartup="true"
      deployIgnore="TomcatDemo-1.0-SNAPSHOT.war" 
      unpackWARs="true" 
      autoDeploy="false">

https://tomcat.apache.org/tomcat-9.0-doc/config/host.html#automatic_application_deployment

使用自动部署时,由XML上下文文件定义的docBase应该在appBase目录之外。如果不是这样,部署web应用程序可能会遇到困难,或者应用程序可能会被部署两次。可以使用deployIgnore属性来避免这种情况。

或者,如果您不介意自动启动部署,可以设置deployonstartup=“false”-在这种情况下,您不需要deployignore

在这些场景中,web应用程序仅在以下位置可用:

http://localhost:8080/my-foo-app/   <-- OK

否则,如您所注意到的,通过双重部署,web应用程序也将在此处可用(您将在webapps中看到两个分解目录):

http://localhost:8080/TomcatDemo-1.0-SNAPSHOT/  <-- BAD!
 类似资料:
  • 我正在处理部署在tomcat7环境中的两个WAR应用程序(我们称它们为app1.WAR和app2.WAR)。通过setenv.sh,我将类路径扩展到位于/opt/configurations中的共享文件夹。 我想这样构造配置:

  • 问题内容: 我正在使用Java 1.6为Mac编写Java Swing应用程序。我阅读了许多教程,它们逐步引导您如何更好地将Java应用程序与OS X集成在一起,但是有一件事我还没有开始工作。我无法显示应用程序名称(Mac菜单栏中的第一个粗体菜单项)。默认情况下,显示主类的全限定类名,但我无法更改它。 该站点说您必须设置以下属性: 但这不起作用(我正在运行10.6,所以也许属性名称已更改?)。 当

  • 你可以查看或更改 Navicat Monitor 的应用程序设置,例如端口、网站网址和 IP 地址。若要配置应用程序设置,请前往“配置”->“应用程序设置”。 这里列出了 Navicat Monitor 的应用程序设置。你可以编辑以下设置: 端口 Navicat Monitor 将侦听的端口号。 网站网址 将用于警报电子邮件内的 Navicat Monitor 网站网址。 IP 地址 如果机器已被

  • 问题内容: 在阅读O’Reilly的“高性能MySQL”时,我偶然发现了以下内容 另一个常见的垃圾查询是SET NAMES UTF8,无论如何这是错误的处理方式(它不会更改客户端库的字符集;它仅影响服务器)。 我有点困惑,因为我曾经将“ SET NAMES utf8”放在每个脚本的顶部,以使数据库知道我的查询是utf8编码的。 任何人都可以评论以上引用,或者,更正式地说,是什么建议或最佳实践,以确

  • 我尝试了一个显示其他响应的测试用例,我将一步一步地解释它: > 我在我的设备上安装了MDM配置文件,这提示我安装了一个应用程序,并且我成功地安装了它。应用程序已进入“应用程序中的配置文件”部分。 然后我手动删除了应用程序。

  • 我在用Spring靴和Gradle来制造一场战争。 由于war任务有一个版本号,因此生成的war名称为,因此当部署到Tomcat时,上下文路径为 我想使用上下文路径'bar',省略版本号并使用不同的路径。 这可能使用Spring注释吗?我尝试更改但这只会将上下文更改为 我尝试将添加到中,尽管它包含在war中,但它并没有更改上下文路径