Mike Eller wrote:
Hi,

I am new to Tomcat and trying to get it up and running.

I have an Apache server (2.2.3) running on CentOS 5.2.  I want to add
the capabilities that tomcat brings, mainly JSP for now.
I followed the connector tutorial/guide on the web site.  I have tomcat
running and can access pages if I use the port number in the url.
According to the guide, Apache should be handing .jsp requests over to
tomcat automatically.  I have went through the guide twice...still no
luck.
...
Ok, I'll bite, even if there are quite detailed instructions available here :
http://tomcat.apache.org/connectors-doc/generic_howto/quick.html

..and even if Gregor gave you the short answer before.

First, a bit of theory.

I) If you look at your Tomcat's conf/server.xml file, you will see that there are two types of <Connector> defined, one for HTTP, and one for AJP. The HTTP one listens for requests to Tomcat, in the normal HTTP format and usually on port 8080 or 8180 or so. That is the one you say you can access directly from the browser. The other one listens for requests in a different format (AJP) and on a different port (usually 8009 by default). For a Tomcat application (for example a JSP page), it does not matter through which of these channels the request comes in. It will process the request, and respond to it. Tomcat will then route the response back through the same <Connector> on which it came in.


II) From Apache, there are three ways to communicate with Tomcat :

1) via the Tomcat HTTP connector, using "normal" HTTP requests. At the Apache level, that is done by using the mod_proxy module. Basically, this is the same mechanism as the one used when Apache acts as a "proxy" for any other webserver. You have to tell Apache which requests it must process itself, and which requests it should forward to the back-end server for which it acts as a proxy. Apache will forward the request, receive the answer from the back-end server, and pass it through to the waiting browser.

2) via the Tomcat AJP connector, using the AJP format, but still at the Apache level using the mod_proxy module, this time with the addition of a helper mod_proxy_ajp module. Apache will still receive the original request, decide if it has to go to the back-end Tomcat server, and if yes pass it on, but this time it passes it on through the mod_proxy_ajp module, which transforms the request format from pure HTTP into some different format called AJP. Then this mod_proxy_ajp module forwards the request, not to the HTTP Connector of Tomcat, but to the AJP Connector of Tomcat. Other than that, it is the same configuration as (1) above.

3) via the Apache add-on "mod_jk" module, also to the Tomcat AJP Connector. That is presumably the one you are trying to use. It differs of the above two methods, in that you are no longer using the standard "proxy" module of Apache, you are using a special dedicated handler, mod_jk.

There is a slight performance difference between the 3 above options, and quite a bit of difference in terms of configuration and capabilities. But we'll leave that for another time.

III) Telling Apache which requests (which URLs) it needs to pass to Tomcat.
There again, there are 2 ways to indicate this to Apache :

1) through Apache configuration directives called "JkMount" and "JkUnMount". For example, to tell Apache that all requests for URLs starting with "/examples" should go to Tomcat, you would use these two lines :
JkMount /examples worker1
JkMount /examples/* worker1

(where "worker1" is just a name that you will encounter again in the "workers.properties" file, see in IV below).

2) with a section like this (same basic effect, but more flexible):
<Location /examples>
  setHandler jakarta-servlet
</Location>

Now with either (1) or (2) Apache knows that if a request URL starts with "/examples", then it should pass it to the mod_jk module in order to generate a response.
That's basically all that Apache knows.

When the mod_jk module is given this request, it will try to pass it to Tomcat for processing, and wait for the answer. When the answer comes back, mod_jk gives it to Apache, which sends it to your browser, et voila, you run Java servlet examples in Apache !

IV) configuring mod_jk

Of course, for mod_jk to know where Tomcat is, and how to pass it the request, it needs instructions.
That is the role of the "workers.properties" file.
Basically, this file contains parameters that tell mod_jk that the Tomcat that you called "worker1" above, is located at a certain host address (in your case probably "localhost") and at a certain port (the one referenced in the "port" attribute of the Tomcat AJP Connector in Tomcat's server.xml file, probably 8009).

Now go back to Gregor's instructions about where to find these various files and instructions.



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to