www.alexander-merz.com | Alexander Merz

Tomcat&PHP - Installation

PHP unter Tomcat laufen zu lassen, ist bereits seit längerer Zeit möglich. Aber von wenigen Fällen abgesehen, war das wenig sinnvoll. Das Gespann aus dem klassischen Apache-Webserver und PHP funktioniert. Warum also? Eine Artikelserie wird die praktischen Möglichkeiten näher beleuchten.

Mit JSR 223 lohnt es sich die Frage durchaus (erneut) zu stellen. Damit stehen zum ersten Mal unter PHP (und anderen Skriptsprachen) tatsächlich Tomcat-Funktionen zur Verfügung.

Was ist JSR 223?

Der Java Specification Request 223 definiert Mechanismen, um innerhalb von Java Skriptsprachen benutzen zu können und umgedreht innerhalb einer Skriptsprache auf Java-Klassen. Nun ging das mit PHP bereits. Für uns relevant ist vielmehr die Tatsache, dass JSR 223 auch den Betrieb von Skripten innerhalb eines Applikationservers beschreibt.

Dadurch bieten sich neue Szenarien für die Entwicklung von Web-Applikationen an. Z.B. ein bestehendes Unternehmensportal auf JSP-Basis wird schnell und einfach mit PHP erweitert. Oder: ein Java-Backend und ein PHP-Webfrontend? Statt aufwendig Schnittstellen-Protokolle zu definieren und zu implementieren wird das Backend direkt per API eingebunden. Für die Migration von Webanwendungen von JSP zu PHP oder umgekehrt, stellt es eine ideale Plattform dar, denn statt des bisherigen Alles-oder-Nichts-Ansatzes, wird die Umbau Schritt für Schritt möglich.

Installation

Bevor wir uns eigenen Experimenten zuwenden können, müssen wir die Referenz-Implementierung der JSR 223 installieren (und natürlich Tomcat 5.x, wenn das noch nicht geschehen ist). Sie sollten Tomcat mit dem JDK 1.4 benutzen (nicht JRE 1.4). Die Umgebungsvariable JAVA_HOME muss gesetzt sein.

Das Installationsarchiv finden Sie unter http://jcp.org/aboutJava/communityprocess/pr/jsr223/index.html. Sie müssen es entpacken und das darin befindliche Perl-Skript setup.pl ausführen. Das Skript funktioniert unter Linux und Windows, für Windows benötigt es ActivePerl von http://www.activestate.com/. Es werden dabei verschiedene Pfad-Angaben abgefragt.

Achten Sie unter Windows darauf, keine Pfadangaben mit Leerzeichen zu benutzen.

Eine Warnung: wenn Sie das Skript starten und einen aktuellen Tomcat (höher Version 5.18) installiert haben, werden Sie eine Fehlermeldung erhalten. Die Version der DTD für das Format der Tomcat-Konfigurationsdatei web.xml ist in aktuellen Tomcat-Releases 2.4. Das Skript kommt aber nur mit den Versionen 2.2 und 2.3 zurecht. Deswegen schlägt das Schreiben der Konfigurationsdatei fehl. Leider ist nirgendwo dokumentiert, was das Setup-Skript schreiben will. Eine Installation gegen eine ältere Tomcat-Version brachte aber die Lösung: Es handelt sich um Zuordnungen von Datei-Endungen zu entsprechenden Handlern, vergleichbar mit der AddType-Direktive des Apache Webservers.

Um im Fehlerfall die Einträge manuell einzutragen, suchen Sie in der Datei conf/web.xml den Eintrag:

<servlet>
  <servlet-name>jsp</servlet-name>
  <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
  <init-param>
   <param-name>fork</param-name>
   <param-value>false</param-value>
  </init-param>
  <init-param>
   <param-name>xpoweredBy</param-name>
   <param-value>false</param-value>
  </init-param>
  <load-on-startup>3</load-on-startup>
</servlet>

Dahinter ergänzen Sie folgende Zeilen:

<servlet>
  <servlet-name>JSR223Script</servlet-name>
  <servlet-class>com.sun.script.http.ScriptServlet</servlet-class>
  <init-param>
    <param-name>script-blocks</param-name>
    <param-value>js,groovy</param-value>
  </init-param>
</servlet>

Analog schauen Sie nach:

 
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>

Dahinter ergänzen Sie:

<servlet-mapping>

<servlet-name>JSR223Script</servlet-name>

<url-pattern>*.php</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>JSR223Script</servlet-name>

<url-pattern>*.js</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>JSR223Script</servlet-name>

<url-pattern>*.groovy</url-pattern>

</servlet-mapping>

Für uns relevant ist eigentlich nur der Eintrag für PHP. Wenn Sie aber die Test-Skripte der Referenz-Implementierung ausprobieren wollen, sollten Sie diese Einträge erst mal so stehen lassen.

Testen

Um die Testskripte auszuprobieren, starten Sie Tomcat über das startup-Skript im bin-Verzeichnis, und rufen Sie im Browser die URL http://localhost:8080/jsr223samples auf. Wenn Sie genügend rumgespielt haben, können wir beginnen, uns eigenen Entwicklungen zu widmen.

Warnung: Auch unter Windows müssen Sie das startup-Skript benutzen! Ansonsten werden die erforderlichen Einstellungen nicht gesetzt.

Es empfiehlt sich, zumindest die obige Zuordnung für JavaScript-Dateien (*.js) in der web.xml zu löschen bzw. die angegebene Datei-Endung zu ändern. Viele Webanwendungen haben JavaScript-Funktionen in Dateien ausgelagerte und binden diese per Meta-Tag in die HTML-Seite ein. Meistens tragen sie die naheliegende Endung *.js. Mit dem aktuellen Tomcat-Einstellungen werden diese Dateien aber bereits serverseitig ausgewertet und beim Client kommt dann eben meist nur Müll an.

Jetzt haben wir einen laufenden Tomcat und die installierte Referenz-Implementierung. Im nächsten Teil der Serie werfen wir eine genaueren Blick darauf.

2. Teil: Tomcat&PHP - Wie funktioniert es?
3. Teil: Tomcat&PHP - Vordefinierte Variablen
4. Teil: Tomcat&PHP - JSP-Tags in PHP
5. Teil: Tomcat&PHP - Performance