This is a sample config file (server.xml) that tells Tomcat to listen on localhost for requests from Apache using the ajp protocol.
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<!-- Define a Coyote/JK2 AJP 1.3 Connector (for apache) on port 8009 -->
<Connector port="8009" enableLookups="false" connectionTimeout="300000"
debug="0" protocol="AJP/1.3" address="127.0.0.1" />
<Engine name="Catalina" defaultHost="host.com" debug="1">
<!-- first virtual host -->
<Host name="domain.com" debug="1" appBase="/home/domain/htdocs"
autoDeploy="false" xmlValidation="false" xmlNamespaceAware="true">
<Alias>www.domain.com</Alias>
<Context path="" docBase="/home/domain/htdocs" debug="0" reloadable="false"/>
</Host>
<!-- other virtual hosts follow -->
</Engine>
</Service>
</Server>
You have to create a web.xml file for each virtual host mentioned in server.xml. Here's a sample that uses my application framework. Yours will differ.
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <!-- ContextServlet loads service classes into this host's ServletContext --> <servlet-name>ctxtservlet</servlet-name> <servlet-class>com.neolectric.servlet.ContextServlet</servlet-class> <init-param> <!-- file that describes service classes --> <param-name>contextFile</param-name> <param-value>/home/domain/prop/context.xml</param-value> </init-param> <init-param> <!-- xml parser that reads config values --> <param-name>parser</param-name> <param-value>org.apache.xerces.parsers.SAXParser</param-value> </init-param> <load-on-startup>1</load-on-startup> <!-- load this servlet first --> </servlet> <servlet> <!-- DxpServlet delivers dynamic dxp pages --> <servlet-name>dxpservlet</servlet-name> <servlet-class>com.neolectric.servlet.DxpServlet</servlet-class> <init-param> <param-name>maxPost</param-name> <param-value>8192</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> <init-param> <!-- how often a cached page is checked for changes to the src file --> <param-name>updateInterval</param-name> <param-value>5</param-value> <!-- sec --> </init-param> <init-param> <param-name>docroot</param-name> <param-value>/home/domain/htdocs</param-value> </init-param> <init-param> <param-name>errdoc</param-name> <param-value>/home/domain/htdocs/dxperrdoc.html</param-value> </init-param> <init-param> <param-name>notauthdoc</param-name> <param-value>/home/domain/htdocs/error/notauthorized.html</param-value> </init-param> <init-param> <param-name>excludeDir</param-name> <!-- comma delim list --> <param-value>/home/domain/htdocs/WEB-INF</param-value> </init-param> <init-param> <param-name>errtag</param-name> <param-value>[msg]</param-value> </init-param> <init-param> <param-name>parser</param-name> <param-value>org.apache.xerces.parsers.SAXParser</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dxpservlet</servlet-name> <url-pattern>*.dxp</url-pattern> </servlet-mapping> <servlet-mapping> <!-- /usr/local/apache/conf/worker2.properties also maps /dataview --> <servlet-name>dvservlet</servlet-name> <url-pattern>/dataview</url-pattern> </servlet-mapping> <!-- docs (relative to host docroot) returned by servlet runner for various http errors --> <error-page> <error-code>401</error-code> <location>/error/notauthorized.html</location> </error-page> <error-page> <error-code>403</error-code> <location>/error/forbidden.html</location> </error-page> <error-page> <error-code>404</error-code> <location>/error/notfound.html</location> </error-page> <error-page> <error-code>500</error-code> <location>/error/internalerr.html</location> </error-page> <error-page> <error-code>503</error-code> <location>/error/unavailable.html</location> </error-page> </web-app>