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

将多个应用程序部署到Tomcat

邓威
2023-03-14

我想部署两个应用程序foo。war和条形图。war到同一个Tomcat实例。他们是否可以侦听不同端口上的连接,例如,foo侦听端口81,bar侦听端口82?如果是,我如何配置?我意识到应用程序没有必要监听不同的端口,但这正是我想要实现的。

此外,如果我将foo.war重命名为ROOT. war,使其在根上下文中运行,那么对该Tomcat实例的所有请求都将由foo应用程序处理,因此bar必须部署到单独的Tomcat实例,这是否正确?

共有3个答案

锺离俊雄
2023-03-14

我已成功配置Tomcat在多个端口上运行应用程序。我不知道这是否是最好的方法,但我只是复制了

<Service>...</Service>

在conf/server中。xml和更改了连接器标记的端口,并更改了主机标记的appBase属性。您可以根据应用程序部署到的应用程序库来控制应用程序在哪个端口上运行。

孟安民
2023-03-14

使用多个运行的web应用程序中的任何一个,在多个用户之间处理多个传入请求和传出响应是Java Servlet技术的目的。所有这些流量都可以在单个端口上处理。

只需将这两个war文件都放到Tomcat的webapps文件夹中。这就是你需要做的一切。

默认情况下,Tomcat会将每个war(技术上是一个zip文件)扩展到一个文件夹中,并自动为您部署应用程序。如果Tomcat已经在运行,或者在启动时启动Tomcat,就会发生这种情况。有些人关闭了生产环境的自动部署功能,以节省Tomcat扫描新war文件的工作。

不需要多个端口。Servlet容器的工作是检查URL并确定应该调用哪个Servlet。

默认情况下,war文件的名称决定URL。举个例子:

>

  • http://www.example.com/foo--

    http://www.example.com/bar --

    http://www.example.com/ --

    所有的网络应用程序都可以在同一个端口上运行。您唯一关心的是端口是否使用Unix风格的操作系统来保护对低编号端口的访问。这包括Mac OS X、BSD、Linux和Solaris。要么在URL中使用高编号端口(Tomcat默认为8080),要么使用端口转发将端口80上的传入请求(web浏览器的默认值)发送到Tomcat的端口(例如8080)。

    如果您希望使用不同的域来提供war文件,请了解Tomcat中的“虚拟主机”设置。

  • 宰父宾实
    2023-03-14

    如果您希望Tomcat侦听多个端口,您需要为每个端口设置一个连接器。要将每个端口映射到不同的应用程序,您需要将每个连接器包装在一个服务中,并使用它自己的appBase创建一个主机。

    server.xml中的服务定义示例

    <Service name="foo">
        <Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol" />
        <Engine name="Catalina80" defaultHost="localhost">
            <Host name="localhost" appBase="foo" unpackWARs="true" autoDeploy="true" />
        </Engine>
    </Service>
    
    <Service name="bar">
        <Connector port="81" protocol="org.apache.coyote.http11.Http11NioProtocol" />
        <Engine name="Catalina81" defaultHost="localhost">
            <Host name="localhost" appBase="bar" unpackWARs="true" autoDeploy="true" />
        </Engine>
    </Service>
    

    您需要为port80创建目录foo,为port81创建目录bar,而不是将war文件放在webapps目录中。命名两个war文件ROOT. war并将它们放在自己的基本目录中。如果需要,您当然可以在每个目录中拥有多个应用程序。

    appBase中定义的目录相对于tomcat目录。通过使用绝对路径,它可以位于系统中的任何位置。从文档中:

    应用程序库

    此虚拟主机的应用程序基目录。这是可能包含要在此虚拟主机上部署的web应用程序的目录的路径名。您可以指定绝对路径名,也可以指定相对于CATALINA\u BASE目录的路径名。[...] 如果未指定,将使用默认的webapps。

    另一种选择是保留默认的tomcat配置并使用另一个http服务器(apache、nginx、lighttpd等)将端口映射到tomcat应用程序的内部路径。

    根应用程序不会收到与其他应用程序匹配的请求,例如,将转到foo。war将转到根目录。战争。

     类似资料:
    • 问题内容: 我正在尝试在Heroku上使用Flask开发我的第一个“大型”应用程序,并尝试将此处的基本教程与以下说明结合:https : //devcenter.heroku.com/articles/python与以下说明:http:// flask.pocoo.org/docs/patterns/packages/#larger- applications。它在本地与“先行启动”一起工作,但是

    • 我试图将Spring Boot应用程序部署到Heroku,但我无法做到这一点。我的应用程序会自动检测为"heroku-maven-plugin",但我想将其部署为Java应用程序。 我怎样才能做到这一点?

    • 我已将一个 .Net 网站部署到 AWS 弹性豆茎。我现在想将另一个 .Net Web 项目(Web 服务)部署到由 AWS 弹性 Beanstalk 创建的同一 EC2 实例,但在发布向导的环境页面中选择“使用和现有环境”显示为灰色。 有办法做到这一点吗?

    • 我从昨天开始尝试在AWS Beanstalk上的Tomcat中部署Spring启动,但我总是出现此异常: 在我的本地开发环境中,我没有这个错误。在我的本地开发环境中,我在Tomcat 7上开发了“1.0.2.RELEASE”版本。 我创建了一场战争,我在AWS Beanstalk中的Tomcat 7实例上部署了它,但下面的错误总是出现。如何修复此错误?

    • Requirements 运行一个Spark Streaming应用程序,有下面一些步骤 有管理器的集群-这是任何Spark应用程序都需要的需求,详见部署指南 将应用程序打为jar包-你必须编译你的应用程序为jar包。如果你用spark-submit启动应用程序,你不需要将Spark和Spark Streaming打包进这个jar包。 如果你的应用程序用到了高级源(如kafka,flume),你需

    • 基本上,我想使用spring boot auto配置数据源相关功能,并希望将spring boot应用打包到一个war,并部署到Tomcat。 github URL:https://github.com/oneslideicywater/customlizeofkakahair运行MVN构建后,我跳过测试,将部署到TomCat,重新启动它,然后在STS IDE中运行应用程序时,一切都很好。但是会发