Advanced   Java   Services
Connecting Apache 2.x.xx and Tomcat 6.x.xx with mod_jk to run Servlets and JavaServerPages
Back Next Up Home
Wie der Indianer den Kater zum Schnurren bringt


I  Download der Dateien



1)  Apache 2.x.xx


Die aktuelle Version findet man auf der Startseite von Apache. Dort sucht man den Absatz mit dem Hinweis "best available version". und dann den Eintrag "Win32 Binary" und folgt dem Link.

2)  Tomcat 6.x.xx


Für Tomcat geht man ähnlich vor. Man besucht die Startseite und informiert sich über die aktuelle Version. Am linken Rand der Seite findet man dann unter Download einen Link auf die aktuelle Version. Die dann folgende Seite beinhaltet eine Beschreibung der aktuellen Version. Man sucht den Absatz Binary Distributions und dort den Link Windows Service Installer.

3) mod_jk connector


Die connectoren dienen dazu einen WebServer mit Tomcat zu verbinden. Tomcat dient dann als Servletcontainer und der WebServer reicht Sevletanfragen an Tomcat weiter. Für den Apache WebServer wird die Konfiguration dieser Verbindung hier beschrieben. Mittlerweile haben die beiden connectoren ihre Rollen vertauscht, war früher mod_jk2 state of the art, so ist es jetzt wieder mod_jk. Die Weiterentwicklung von mod_jk2 wurde bereits Ende 2004 eingestellt:

From the Tomcat-website:
JK2 has been put in maintainer mode and no further development will take place. The reason for shutting
down JK2 development was the lack of developers interest. Other reason was lack of users interest
in adopting JK2, caused by configuration complexity when compared to JK. The latest official JK2
release is 2.0.4. Lots of code from JK2 has been ported to JK.


Man geht wieder zur Startseite von Apache Tomcat. Am linken Rand findet man unter Documentation den Link Tomcat Connectors. Folgt man dem Link, so findet man unter dem Absatz Headlines den Link Download the binaries for selected platforms. Hier wird man auf ein Inhaltsverzeichnis geführt, in dem man seine Betriebssystem wählen kann. Sodann sucht man sich den richtigen Connector heraus.

4)  Servlet API 2.5 und Servlet packages


Die Servlet-API sowie die JSP-API ist auch Bestandteil der java Enterpriseedition, die man von der Sunseite herunterladen kann. Wer nur Servlets und JSP entwickeln will kann die Version 2.5 hier herunterladen:

Servlet API 2.5

JSP API 2.5

Die notwendigen Packages zum Compilieren von eigenen Servlets und JSP finden sich nach der Installtion von Tomcat im Verzeichnis

<%TOMCAT_HOME%>/lib

Es sind dies die Dateien   servlet-api.jar   und   jsp-api.jar


II  Installation


Voraussetzung für Tomcat ist eine zur Version von Tomcat passende JavaUmgebung. Für Tomcat 6 ist dies eine JRE in der Version 1.5 oder 1.6 . Bei der Installation von Tomcat 6 mit JRE 1.6 gibt es ein kleines Problem, weil Tomcat 6 eine Datei sucht, die in der Javaversion 1.6 nicht mehr an der gleichen Stelle liegt. Wir werden gleich darauf hinweisen.

1)  Tomcat 6.x.xx


Die Installation von Tomcat ist mittlerweile sehr komfortabel. Bei der Installation wird eine vorhandene Javaumgebung erkannt. Die Installation schlägt als Pfad "C:\Programme\Apache Software Foundation\Tomcat 6.0" vor. Da dieser Pfad Leerzeichen enthält muß man bei der Verbindung von Apache mit Tomcat in der Apachekonfigurationsdatei httpd.conf den Pfad zu Tomcat in Anführungszeichen angeben, was man gerne vergißt. Wir wählen daher einen Pfad ohne Leerzeichen.

Hier die Scrennshots der Installation:





Es empfiehlt sich die Beispiele mitzuinstallieren und Tomcat als Windowsservice einzurichten.





Wir ändern den Pfad so ab, daß leine Leerzeichen enthalten sind.





Die vorhandene Javaumgebung wird erkannt.







Starten und Beenden von Tomcat

Über einen Monitor rechts in der Taskleiste kann man Tomcat als Service Starten bzw. Beenden. Die Eingabe der Adresse http://127.0.0.1:8080 in einen Browser sollte die Startseite von Tomcat bringen, da Tomcat auf den Port 8080 vorkonfiguriert ist. Die dort über Links zu erreichenden Servletbeispiele bzw. JSP-Beispiele sollten dann laufen.

Falls Tomcat nicht startet

Falls Tomcat nicht startet, so kann das daran liegen, daß Tomcat 6 eine Datei nicht findet. Tomcat 6 braucht um starten zu können die Datei msvcr71.dll. Diese muß entweder im Verzeichnis <%TOMCAT_HOME%>/bin oder im Windows system32 Verzeichnis liegen. Die Datei wird bei der Installation einer Javaumgebung im Verzeichnis <%JAVA_HOME%>/bin abgelegt. Man muß sie also von diesem Verzeichnis in eines der vorher erwähnten kopieren.

Falls der Tomcatmanager nicht mehr erreichbar ist

Falls der Tomcatmanager nicht mehr erreichbar ist und die Fehlermeldung This request requires HTTP authentication erscheint, so kann das daran liegen, daß Tomcat keine JavaServer Pages mehr starten kann. Der Tomcatmanager ist nämlich eine JSP-Datei. Falls also auch die JSP-Beispiele nicht mehr funktionieren, dann schaut man am besten mal in die Tomcat log-Dateien von localhost oder manager. Falls man dort die Meldung ClassNotFoundException: javax.el.ELResolver entdeckt, dann findet Tomcat ein Javaarchiv nicht (mehr). Es handelt sich um das Archiv el-api.jar im Verzeichnis <%TOMCAT_HOME%>/lib. Kopiert man dieses Archiv in das lib/ext Verzeichnis der aktuellen JRE, dann laufen die JSP wieder (Aus einem mir unbekannten Grund findet Tomcat das Archiv el-api.jar nicht mehr im eigenen Verzeichnis, kann es sich aber dann aus dem lib/ext Verzeichnis besorgen)

Tomcat konfigurieren

Die Konfigurationsdatei von Tomcat ist TOMCAT_HOME/conf/server.xml. Will man etwa den Port 8080 ändern, so geschieht das hier durch Angabe eines anderen Ports unter

    <Connector port="8080"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000"
               disableUploadTimeout="true" />



Verzeichnis der WebApplikation, die die Servletbeispiele enthält

<%TOMCAT_HOME%>/webapps/examples

Verzeichnis der Servletdateien (Sourcen und classes)

<%TOMCAT_HOME%>/webapps/examples/WEB-INF/classes Ort der Kondigurationsdatei web.xml (Notwendig für Servlet- und evtl. Listenereinträge)

<%TOMCAT_HOME%>/webapps/examples/WEB-INF/web.xml

Verzeichnis der Startdatei index.jsp

<%TOMCAT_HOME%>/webapps/ROOT


2)  Apache 2.x.xx


Zu (irgend) einem gewählten Verzeichnis installiert sich Apache immer in ein Unterverzeichnis Apache2. Will man also etwa Apache im Verzeichnis c:\ApacheTomcat\Apache2 installieren, so darf man als Verzeichnis bei der Installation nur c:\ApacheTomcat angeben. Des weiteren muß man bei der Installation eine Serveradresse der Form xxx.yyy bzw. www.xxx.yyy eingeben. Für lokale Testinstallationen ist es egal was man hier eingibt. Zudem kann man die Eingaben später in der Konfigurierungsdatei httpd.conf immer ändern. Die fehlerfreie Installation beendet sich mit einem automatischen Start von Apache. Rechts unten auf der Taskleiste sollte die Apachefeder mit einem kleinen grünen Dreieck erscheinen. Über diesen Monitor kann man den Server ein- und ausschalten. Die Umgebungsvariable APACHE_HOME sollte gesetzt werden.

Die Eingabe der Adresse http://127.0.0.1 in einen Browser sollte die Startseite von Apache bringen (Defaultport 80).

Pfad zur KonfigurierungsDatei httpd.conf

APACHE_HOME/conf

Verzeichnis für .html Dateien

APACHE_HOME/htdocs

cgi-bin Verzeichnis

APACHE_HOME/cgi-bin

Verzeichnis der module

APACHE_HOME/modules


III  Connecting Apache 2.x.xx and Tomcat 6.x.xx


Verbindung mit mod_jk (empfohlen)


### begin workers.properties ###

# ================== worker list ==================
# The worker that your plugins should create and work with
# worker.list=ajp13
# default, Eintrag nicht notwendig
#
# ================== worker type ==================
# Defining a worker named ajp13 and of type ajp13
# Note that the name and the type do not have to match.
# worker.ajp13.type=ajp13
# default, Eintrag nicht notwendig
#
# ================== worker configuration ==================
# worker.ajp13.port=8009
# default, Eintrag nicht notwendig
#
# worker.ajp13.host=localhost
# default, Eintrag nicht notwendig
#
# ================== worker loadbalancing  ==================
# The loadbalancer (type lb) worker perform weighted round-robin load
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=ajp13
#
# Specifies the load balance factor when used with a load balancing worker.
# lbfactor must be > 0  (Low lbfactor means less work done by the worker.)
worker.ajp13.lbfactor=1
#
### End workers.properties ###


Nach den Ergänzen des mappings in workers.properties sollten die folgenden URL's paarweise das gleiche Ergebnis liefern.

Zugriff über Tomcat direkt :   http://localhost:8080/examples/servlets/servlet/HelloWorldExample
Zugriff über Apache :   http://localhost/examples/servlets/servlet/HelloWorldExample

oder auch

Zugriff über Tomcat direkt :   http://localhost:8080/examples/
Zugriff über Apache :   http://localhost/examples/


Verbindung mit mod_jk2 (seit November 2004 deprecated)


### begin workers2.properties ###

# Port für Servletweiterleitung
[channel.socket:localhost:8009]
info=Ajp13 forwarding over socket
tomcatId=localhost:8009

# worker angeben
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009

# Apache das Verzeichnis von Tomcat in webapps bekanntgeben, in dem das Unterverzeichnis
# class liegt, in dem die .class Dateien liegen
[uri:/servlets-examples/*]

info=Map the whole webapp
worker=ajp13:localhost:8009

[shm]
file=${serverRoot}/logs/shm.file
size=1048576

[status:status]
# Uri mapping
[uri:/jkstatus/*]
worker=status:status

### End workers2.properties ###

Nach den Ergänzen des mappings in workers2.properties sollten die folgenden beiden URL's dieselbe Datei index.jsp aus
TOMCAT_HOME/webapps/servlets-examples/index.jsp   bringen.

Zugriff über Tomcat direkt :   http://127.0.0.1:8080/servlets-examples/

Zugriff über Apache :   http://127.0.0.1:/servlets-examples/



IV  Konfigurierung von webapps/examples/WEB-INF/web.xml


Im Unterschied zu den 4-er Versionen braucht man bei Tomcat 5.0.16 für jedes Servlet zwingend zwei Einträge in der Datei web.xml, einen Eintrag im Bereich <servlet> und einen Eintrag im Bereich <servlet-mapping> . Das folgende Beispiel zeigt die Einträge für ein Servlet mit dem Namen MyServlet:

<!-- Define servlets that are included in the example application -->

<servlet>
   <servlet-name>MyServlet<servlet-name>
   <servlet-class>MyServlet</servlet-class>
</servlet>

<!-- Eintrag im Bereich servlet-mapping -->

<servlet-mapping>
   <servlet-name>MyServlet<servlet-name>
   <url-pattern>/servlet/MyServlet<url-pattern>
</servlet-mapping>

Und noch eine "Kleinigkeit". web.xml reagiert sehr empfindlich auf bestimmte Kommentare. Eine Hervorhebung des Beginns eines Abschnittes durch etwa

<!-- ---------- servlet-mapping ---------- -->

führt dazu, daß die Servlets nicht mehr gestartet werden können ! Ersetzt man - durch + oder durch = , dann ist Tomcat zufrieden...

<!-- ========= servlet-mapping ========= -->


V  Eine eigene Webapplikation einrichten


Eigene WebApplikationen sollten in einem separaten Bereich liegen. Die Servlet API Specification 2.3 legt fest, wie dieser Bereich strukturiert werden muß.

[uri:/myWebApp/*]

Hier ein Listing einer minimalen web.xml . Die Datei muß mit dem xml-Versionseintrag beginnen, sonst wird sie von Tomcat nicht als xml-Datei erkannt.


<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- Beispielskonfigurierungsdatei web.xml -->

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

    <display-name>Beispielskonfigurierungsdatei</display-name>
    <description>
      Beispielskonfigurierungsdatei
    </description>

    <!-- Define servlets that are included in the myWebApp application -->
    <!-- ============================================================= -->

    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>MyServlet</servlet-class>
    </servlet>

    <!-- ====================== servlet-mapping ====================== -->

    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/wzlbrmpft.html</url-pattern>
    </servlet-mapping>

</web-app>

Wie man am letzten Eintrag sieht, kann man über das servlet-mapping ein Servlets beliebig umbenennen. Mit dem in servlet-mapping angegebenen URL-Pattern (und nur mit diesem!), das beliebig wählbar ist, ist das Servlet für den Client ansprechbar.

Was bewirken diese Einträge :



VI  Die Verzeichnisse /TOMCAT_HOME/common und /TOMCAT_HOME/shared


Die beiden Verzeichnisse haben eine verwandte Funktion.


top Back Next Up Home