Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

deploying multiple applications to Tomcat

Tags:

tomcat

war

I want to deploy two applications foo.war and bar.war to the same Tomcat instance. Is it possible for them to listen for connections on different ports, e.g. foo listens on port 81 and bar listens on port 82? If so, how can I configure this? I realise that it is not necessary for the applications to listen on different ports, but that is what I want to achieve.

Also, am I right in saying that if I rename foo.war to ROOT.war such that it runs in the root context, then all requests to this Tomcat instance will be handled by the foo app and therefore bar would have to be deployed to a separate Tomcat instance?

like image 530
Dónal Avatar asked May 09 '14 16:05

Dónal


People also ask

Can we deploy multiple applications in Tomcat?

Simply drop both war files into Tomcat's webapps folder. That is all you need to do. By default, Tomcat expands ("explodes" some say) each war (technically a zip file) into a folder and automatically deploys the app for you. This happens on the fly if Tomcat is already running, or on startup when you launch Tomcat.

How many ways we can deploy the application into Tomcat?

As we can see, there are two ways for deploying a web application using the manager: Deploy directory or WAR file located on server. WAR file to deploy.

Can Tomcat listen on multiple ports?

Is it possible for a single instance of Tomcat to listen on multiple ports? Sure, you can do it. Tomcat is support several protocol such as HTTP(80/8080) default, HTTPS.

Can we deploy WAR file in Tomcat?

Perhaps the simplest way to deploy a WAR file to Tomcat is to copy the file to Tomcat's webapps directory. Copy and paste WAR files into Tomcat's webapps directory to deploy them. Tomcat monitors this webapps directory for changes, and if it finds a new file there, it will attempt to deploy it.


1 Answers

If you want Tomcat to listen to multiple ports, you need to setup a connector for each port. To get each port mapped to a different application, you need need to wrap each connector in a service and create a host with it's own appBase.

Example of service definition in 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> 

Instead of dropping the war files in the webapps directory, you need to create the directory foo for port 80 and bar for port 81. Name both war files ROOT.war and drop them in their own base directory. You can of course have multiple apps in each directory if you need.

The directory defined in appBase is relative to the tomcat directory. By using an absolute path, it could be anywhere on your system. From the documentation:

appBase

The Application Base directory for this virtual host. This is the pathname of a directory that may contain web applications to be deployed on this virtual host. You may specify an absolute pathname, or a pathname that is relative to the $CATALINA_BASE directory. [...] If not specified, the default of webapps will be used.

Another option is to keep the default tomcat configuration and use another http server (apache, nginx, lighttpd,...) to map a port to the internal path of a tomcat application.

The root application won't receive requests that match other applications, e.g. /foo/example will go to foo.war, /example/example will go to ROOT.war.

like image 105
kapex Avatar answered Sep 21 '22 13:09

kapex