Holger: Tomcat v.3.3.1 unter hp-ux 11.0 (Apache) will nicht so recht

Hallo,
sitze vor folgendem System:
hp apache-based web server v.2.0.43 on hp-ux 11.0
Tomcat v.3.3.1
mod_perl 1.99_07:
PHP 4.2.2

PHP und perl laufen prima, nur Tomcat will nicht wirklich laufen.
Wenn ich jsp's laufen lassen möchte wird nur der HTML-Teil dargestellt. Ein einfaches script:
----------schnipp----------
<%@ page language="java" %>
<html>
<head> <title>Hello World</title></head>
<body>
<%
String sParam = "User";
%>
<h1>Welcome <%= sParam %></h1>
</body>
</html>
----------schnapp----------
zeigt nur das "Welcome" auf der Seite.

Habe mich schon durch viele Foren, Docs und FAQs gekämpft, und auch einiges erfolglos ausprobiert, aber vielleicht kann mir jemand hier weiterhelfen.
Die einzigen Einträge, die ich in der http.conf bezüglich Tomcat habe, sind:
1.) Include tomcat/conf/jk/mod_jk.conf   (Pfad stimmt, ist vorhanden)
2.) # AddType text/jsp .jsp
3.) AddHandler jserv-servlet .jsp

Punkt 2.) und 3.) habe ich aus Foren entnommen, bin mir aber nicht sicher, ob diese notwendig sind. Punkt 2 bewirkt, dass der Browser jsps downloaden möchte, deswegen hab ich ihn auskommentiert.

Ein anderer Punkt: Wenn Tomcat gestartet wird, hab ich folgendes in der command line:
----------schnipp----------
+---------------------------------------------------------+
| Warning, user is root.                                  |
| Starting Tomcat as root can cause potential             |
| security problems.                                      |
| (for more information see tomcat.admin.guide, see       |
|  section - Starting Tomcat as root)                     |
+---------------------------------------------------------+
Using classpath: /opt/hpapache2/tomcat/bin/../lib/tomcat.jar
Using JAVA_HOME: /opt/java/bin/..
Using TOMCAT_HOME: /opt/hpapache2/tomcat/bin/..
$
----------schnapp----------
Läuft jetzt Tomcat? Auch wenn starting as root ein Sicherheitsproblem darstellt, müsste Tomcat doch trotzdem laufen, oder?

Vielen Dank für eure Hilfe,
Holger

  1. Hi Holger,

    Wenn ich jsp's laufen lassen möchte wird nur der HTML-Teil dargestellt.

    also wird anscheinend der JSP-Handler nicht aktiviert, um diese Seite zu parsen.

    1.) Include tomcat/conf/jk/mod_jk.conf   (Pfad stimmt, ist vorhanden)
    2.) # AddType text/jsp .jsp
    3.) AddHandler jserv-servlet .jsp
    Punkt 2.) und 3.) habe ich aus Foren entnommen, bin mir aber nicht sicher, ob diese notwendig sind.

    Was Du willst, ist, eine Verbindung zwischen bestimmten URLs und dem Aufruf des JSP-Interpreters herzustellen.

    "AddHandler" ist eine Möglichkeit dazu (falls "jserv-servlet" der in Deinem Falle richtige Handler-Name ist - das kann ich nicht beurteilen, weil es ist eine Tomcat-Eigenschaft ist, keine Apache-Eigenschaft), welche ein Namensmuster der URLs verwendet. Wahrscheinlich ist dies für Dich der im Prinzip richtige Weg.

    "Action" wäre eine andere Möglichkeit, die eine Verbindung zwischen einem Handler und einem MIME-Typ herstellen würde (so etwas verwendet man, wenn man viele verschiedene Endungen hat, die alle einen gemeinsamen MIME-Typ bedeuten), wofür dann "2.)" eine notwendige Vorbedingung schaffen würde (alleine aber nichts Sinnvolles bewirkt). Es gibt noch weitere Möglichkeiten, z. B. http://httpd.apache.org/docs/mod/mod_mime.html#sethandler; welche davon in Deinem Fall die sinnvollste ist, das hängt von Eigenschaften Deines gesamten Dokumentbaums ab, die Du bisher nicht erwähnt hast.

    Generell ist http://httpd.apache.org/docs/handler.html das Dokument, welches einen Überblick über die gesamte Handler-Materie gibt - und viele Links enthält.

    Ein anderer Punkt: Wenn Tomcat gestartet wird, hab ich folgendes in der command line:
    | Warning, user is root.                                  |
    | Starting Tomcat as root can cause potential             |
    | security problems.                                      |

    Unter welcher Benutzerkennung laufen Deine Apache-Prozesse?
    (http://httpd.apache.org/docs/mod/core.html#user)

    Viele Grüße
          Michael

    --
    T'Pol: I apologize if I acted inappropriately.
    V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
    (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
    Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
    1. Hi Michael,

      Was Du willst, ist, eine Verbindung zwischen bestimmten URLs und dem Aufruf des JSP-Interpreters herzustellen.

      Richtig. Was mich verwundert ist, dass in der Standard httpd.conf keinerlei Einträge vorhanden sind, die die Dateiendung *.jsp  mit dem JSP Interpreter verknüpfen. Folgt man der Konfigurationsanleitung des tomcat.admin.guide, so wird hier nichts davon erwähnt.
      Es kann aber nicht sein, dass das Tomcat selbst übernimmt?!
      Es muss auf jeden Fall in der httpd.conf stehen?

      1. Hi Holger,

        Was Du willst, ist, eine Verbindung zwischen bestimmten URLs und dem Aufruf des JSP-Interpreters herzustellen.
        Richtig. Was mich verwundert ist, dass in der Standard httpd.conf keinerlei Einträge vorhanden sind, die die Dateiendung *.jsp  mit dem JSP Interpreter verknüpfen.

        das könnte daran liegen, daß die Standard-Apache nicht weiß, welchen von beliebig vielen auf dem Markt befindlichen Java Server Pages Interpreter Du vielleicht eines Tages benutzen willst.
        (Und wenn Du es gar nicht willst, dann enthält die Apache-Konfiguration unnötigen Ballast.)

        Es kann aber nicht sein, dass das Tomcat selbst übernimmt?!

        Denkbar wäre ein Tomcat-Installationsprogramm, welches die Apache-Konfiguration liest und umschreibt. Wir haben so ein Programm in einem unserer Produkte ...

        Es muss auf jeden Fall in der httpd.conf stehen?

        Es muß über die httpd.conf erreichbar sein (inklusive sämtlicher vom Apache unterstützter impliziter bzw. expliziter "Include"-Mechanismen). Nur dann versteht es der Apache (wenn wir .htaccess als in diesem Falle unpraktisch ausschließen).

        Viele Grüße
              Michael

        --
        T'Pol: I apologize if I acted inappropriately.
        V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
        (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
        Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
        1. Hi Michael,

          danke für die Hilfe. Ich werde mich heute noch einmal dransetzen. Was ich vergessen habe zu sagen ist, dass unser Produkt ein Paket ist, das heisst, dass Tomcat schon standardmäßig mit hp ux Apache usw kommt. Deshalb verwundert es mich, dass das nicht schon in der httpd.conf steht.

  2. » ----------schnipp----------

    +---------------------------------------------------------+
    | Warning, user is root.                                  |
    | Starting Tomcat as root can cause potential             |
    | security problems.                                      |
    | (for more information see tomcat.admin.guide, see       |
    |  section - Starting Tomcat as root)                     |
    +---------------------------------------------------------+
    Using classpath: /opt/hpapache2/tomcat/bin/../lib/tomcat.jar
    Using JAVA_HOME: /opt/java/bin/..
    Using TOMCAT_HOME: /opt/hpapache2/tomcat/bin/..
    $
    ----------schnapp----------
    Läuft jetzt Tomcat? Auch wenn starting as root ein Sicherheitsproblem darstellt, müsste Tomcat doch trotzdem laufen, oder?

    Ich weiss, dass ich tomcat nicht als root starten sollte. Das Problem wird sich lösen, sobald ich das Passwort für den anderen User bekomme.

    Aber woher weiss ich, dass Tomcat gestartet ist? Die obige Meldung erscheint, wenn ich Tomcat mit startup.sh aufrufe. War das jetzt erfolgreich?
    Wenn ich Tomcat kurz nach dem Commando stoppen möchte, erscheint diese Meldung:
    ----------schnipp----------
    Using classpath: /opt/hpapache2/tomcat/bin/../lib/tomcat.jar
    Using JAVA_HOME: /opt/java/bin/..
    Using TOMCAT_HOME: /opt/hpapache2/tomcat/bin/..
    Stopping Tomcat.
    Stopping tomcat on :8007 null
    Error stopping Tomcat with Ajp12 on nexus01.atl.hp.com/15.47.113.8:8007 java.net.ConnectException: Connection refused
    ----------schnapp----------

    Liegt das jetzt daran, dass der Kater garnicht erst gestartet wurde?

    1. Hi Holger,

      Aber woher weiss ich, dass Tomcat gestartet ist? Die obige Meldung erscheint, wenn ich Tomcat mit startup.sh aufrufe. War das jetzt erfolgreich?
      Wenn ich Tomcat kurz nach dem Commando stoppen möchte, erscheint diese Meldung:
      ----------schnipp----------
      Using classpath: /opt/hpapache2/tomcat/bin/../lib/tomcat.jar
      Using JAVA_HOME: /opt/java/bin/..
      Using TOMCAT_HOME: /opt/hpapache2/tomcat/bin/..
      Stopping Tomcat.
      Stopping tomcat on :8007 null
      Error stopping Tomcat with Ajp12 on nexus01.atl.hp.com/15.47.113.8:8007 java.net.ConnectException: Connection refused

      Deine Beschreibung klingt so, als würde "Tomcat" als daemon permanent laufen und der in den Apache eingebundene Handler zu diesem daemon lediglich eine (socket?-)Verbindung aufbauen. Wenn dies der Fall ist, dann solltest Du den Tomcat-daemon via "ps" sehen können - genauso wie den Apache-daemon.
      Vielleicht schreibt Tomcat - wie Apache - ja auch seine Prozeß-ID in eine Datei ...

      Viele Grüße
            Michael

      --
      T'Pol: I apologize if I acted inappropriately.
      V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
      (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
      Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
      1. halo Michael,

        Ich bin mir nicht sicher, ob ich die Problembeschreibung von Holger richtig lese/interpretiere. Aber es sieht so aus, als läge es daran, daß Apache und Tomcat unterschiedliche ports ansprechen und dadurch nicht "zusammenkommen".
        Siehe:

        Stopping tomcat on :8007 null

        Vielleicht schreibt Tomcat - wie Apache - ja auch seine Prozeß-ID in eine Datei ...

        Das tut die mächtige Katze, soviel ich weiß.

        Grüße aus Berlin

        Christoph S.

        1. Hallo Christoph,
          <<
          Port 8007 is the default port that the tomcat web agent listens on and that Apache is suppose to forward the JSP request to

          Das hat mir ein Kollege aus Palo Alto gesagt. Es scheint, als ob das mittels dem "worker ajp12" geschiet, auch wenn ich noch nicht genau weiss, wie das vonstatten geht.

          1. hi,

            <<
            Port 8007 is the default port that the tomcat web agent listens on and that Apache is suppose to forward the JSP request to

            Hm. Ich habe im Moment nur einen Tomcat 4.1 (Windows) hier, und da ist der "default port" 8080  -  den habe ich allerdings in der "server.xml" anders eingestellt

            Das hat mir ein Kollege aus Palo Alto gesagt.

            Natürlich ist der Rat von Kollegen immer ernst zu nehmen, aber ein Blick in die Doku sollte auch gewagt werden.

            Grüße aus Berlin

            Christoph S.

  3. Hallo zusammen,
    bin nun einen Schritt weiter gekommen:
    Tomcat läuft nicht mehr als root, sondern vom user webadmin.
    @Christoph: die verschiedenen Ports sind okay, da der Indiander und die Katze über ajp13 worker kommunizieren. Ich kenne mich da nicht so gut aus, aber es scheint, als ob es ausreicht, in der httpd.conf mod_jk.conf zu includen:
    Include /opt/hpapache2/tomcat/conf/jk/mod_jk.conf

    Dort ist dann folgendes vermerkt:
    --------------schnipp---------------
    JkMount /admin ajp13
    JkMount /admin/* ajp13
    JkMount /examples ajp13
    JkMount /examples/* ajp13

    JkMount /*.jsp ajp13
    JkMount /servlet/* ajp13
    --------------schnapp---------------

    Wenn ich nun die Datei print.jsp aufrufe, erscheint in der Kommandozeile, wo ich Tomcat getartet habe, folgendes:
    --------------schnipp---------------
    2003-08-10 06:45:04 - Ctx() : Class not found: TOMCAT/JSP/print.jsp
    2003-08-10 06:45:04 - Ctx() : Status code:404 request:R(  + /print.jsp + null) msg:null
    --------------schnapp---------------
    und ich erhalte die typische 404 Seite. (perl scripts, php und andere requests an den Apache laufen weiterhin tadellos)

    Anscheindend reduziert sich das Problem nur noch darauf, Tomcat und /oder Apache mitzuteilen, wie er jsps zu interpretieren hat.

    1. hallo ebenfalls,

      bin nun einen Schritt weiter gekommen:
      Tomcat läuft nicht mehr als root, sondern vom user webadmin.

      Das ist schonmal was wert.

      @Christoph: die verschiedenen Ports sind okay, da der Indiander und die Katze über ajp13 worker kommunizieren. Ich kenne mich da nicht so gut aus, aber es scheint, als ob es ausreicht, in der httpd.conf mod_jk.conf zu includen:
      Include /opt/hpapache2/tomcat/conf/jk/mod_jk.conf

      Das "reicht aus", um dem Apache zu sagen, daß er mit Tomcat zusammenarbeiten und dafür das von "mod_jk.conf" angesprochene Modul benutzen soll.

      Dort ist dann folgendes vermerkt:

      Sieht bei mir geringfügig anders aus (Pfade sind anders).

      Wenn ich nun die Datei print.jsp aufrufe, [...] erhalte die typische 404 Seite.
      Anscheindend reduziert sich das Problem nur noch darauf, Tomcat und /oder Apache mitzuteilen, wie er jsps zu interpretieren hat.

      Eigentlich nicht. Es sieht eher so aus, als ob deine verschiedenen Pfade nicht ganz korrekt sind.

      Grüße aus Berlin

      Christoph S.

      1. Danke Christoph für die Hilfe,

        jsps laufen nun, dank der Doc. Allerdings nur im pfad unter Tomcat_home /webapps
        Unter diesem Ordner kann ich ohne Probleme weitere Ordner für Webapplikationen erstellen.
        Gibt es auch eine Möglichkeit, über die Tomcat_Home hinauszugehen und JSPs beispielsweise unter /opt/web/applikationen anzulegen?

        Der Hintergrund ist, dass unsere perl-Skripte alle unter
        /opt/web/coe/ (usw)... liegen.

        Tomact hat sein Revier jedoch unter /opt/hpapache2/tomcat/webapps eingerichtet und es scheint, als ob ich nur in diesem Bereiche meine JSPs anlegen darf.

        Kennt sich da jemand aus? Es wäre übersichtlicher, JSPs im ähnlichen Pfad anlegen zu können, wo unsere Perl Skripte auch liegen.

        Besten Dank,
        Holger

        1. hallo Holger,

          Gibt es auch eine Möglichkeit, über die Tomcat_Home hinauszugehen und JSPs beispielsweise unter /opt/web/applikationen anzulegen?

          Dein Wunsch ist mir zwar verständlich, allerdings habe ich dafür noch keine Notwendigkeit gesehen und weiß nur, was ich probieren würde. Obs funktioniert, mußt du herausfinden.

          Prinzipiell kannst du in der httpd.conf (Apache) mit Aliases beliebige Verzeichnisse deines Server-Rechners dem Apache zur Verfügung stellen. Für Tomcat kannst du in der server.xml beliebige virtuelle hosts definieren, denen du dann mit
            <Host name="virthost"
               appBase="/Pfad"
          ein solches Verzeichnis, für das es in der httpd.conf einen Alias gibt, als "JSP-DocumentRoot" zuweisen kannst.

          Eventuell klappt es auch, das Verzeichnis, in dem die Perl-Scripts liegen, nach tomcat_home zu verlinken.

          Grüße aus Berlin

          Christoph S.