将多个应用程序部署到Tomcat

时间:2014-05-09 16:11:02

标签: tomcat war

我想将两个应用程序foo.warbar.war部署到同一个Tomcat实例。他们是否可以在不同的端口上监听连接,例如foo侦听端口81,bar监听端口82?如果是这样,我该如何配置?我意识到应用程序不必在不同的端口上侦听,但这就是我想要实现的目标。

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

4 个答案:

答案 0 :(得分:64)

如果您希望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>

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

appBase中定义的目录是相对于tomcat目录的。通过使用绝对路径,它可以在您的系统上的任何位置。来自documentation

  

<强>的appBase

     

此虚拟主机的 Application Base 目录。这是可能包含要在此虚拟主机上部署的Web应用程序的目录的路径名。您可以指定绝对路径名,或相对于$CATALINA_BASE目录的路径名。 [...]如果未指定,将使用默认值webapps

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

根应用程序不会收到与其他应用程序匹配的请求,例如/foo/example将转到foo.war/example/example将转到ROOT.war

答案 1 :(得分:26)

无需更改端口

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

只需将两个war文件放入Tomcat的webapps文件夹即可。这就是你需要做的。

默认情况下,Tomcat将每个战争(技术上是一个zip文件)扩展(&#34;爆炸&#34;有些人说)到一个文件夹中并自动为你部署应用程序。如果Tomcat已经运行,或者在启动Tomcat时启动时,会发生这种情况。有些人关闭了生产的自动部署功能,以便为Tomcat保存扫描新战争文件的工作。

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

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

所有网络应用都可以在同一个端口上提供。您唯一关心的是如果您使用Unix风格的操作系统来保护对低编号端口的访问。这包括Mac OS X,BSD,Linux和Solaris。在URL中使用高编号端口(Tomcat默认为8080),或使用port-forwarding将端口80(Web浏览器的默认)上的传入请求发送到Tomcat的端口(例如8080)。

如果您想要使用不同的域提供服务的战争文件,请了解&#34;虚拟主机&#34; Tomcat中的设置。

答案 2 :(得分:4)

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

的内容
<Service>...</Service>
在conf / server.xml中

并更改了连接器标记的端口,并更改了主机标记的 appBase 属性。您可以根据部署到的应用 appBase 来控制应用运行的端口。

答案 3 :(得分:0)

我已经在做罗勒上面提到的事情了。

事实证明,我需要对我的 sites-enabled / blah.conf 文件进行通配,以不引用我在添加其他应用之前几个月部署的第一个(也是唯一一个).war。

这是我通配的内容:

  • DocumentRoot
  • JkMount
  • 目录
  • DirectoryIndex

如此,你会的。 :)