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
Example of service definition in
<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
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:
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_BASEdirectory. […] If not specified, the default of
webappswill 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
/example/example will go to