= Servlet-Tutorial =

Ich habe bereits die eine oder andere Webapplikation in Java
erstellt. Allerdings habe ich dabei immer wieder auf meinen alten
Projekten aufgebaut, diese kopiert und angepasst. Nun wurde es
Zeit, mal von vorne anzufangen und dabei richtig zu dokumentieren,
wie man eine eigene Applikation erstellt. Hilfreich war übrigens
auch dieser Artikel:
http://www.keyboardsamurais.de/mt/archives/000050.html.

Weitere Informationen (unter anderem auch eine schnellere Methode,
echte Eclipse-Webprojekte zu erstellen, gibt es in dem Artikel
WebAnwendungenMitEclipse.

= Schnellstart =

Dabei möchte ich mich möglichst kurz halten, um eine erste laufende
"Hello World"-Applikation zu erzeugen. Auf diesem Wege möchte ich
dennoch erklären, worum es eigentlich geht.

=== Vorab zu installieren: ===

Wir benötigen JavaUnterDebian, die EclipseIDE und
TomcatUnterDebian. Auf diesen Seiten sollten genug
Installationshinweise stehen.

== Wie funktioniert der Tomcat? ==

Zuerstmal eine grundlegende Beschreibung, damit man weiss, was man
da eigentlich tut. Tomcat ist ein Webserver. Dieser Webserver kann
nun Java-Applikationen ausführen. Dazu bietet er diesen eine
standardisierte (nach der Servlet-Spezifikation) Umgebung als ein
sog. '''Container'''. Die Applikation muss auch ganz bestimmte
Ansprüche erfüllen (ebenfalls nach der Servlet Spezifikation).

Also nun von Anfang an: Wenn man den Tomcat startet, liest dieser
eine Datei namens '''server.xml'''. Hier sind grundlegende Objekte
definiert, die den Webserver betreffen. Unter anderem ist hier ein
<Host> definiert, der ein Basisverzeichnis für alle
Applikationen definiert. Dies ist normalerweise ''webapps'' (soll
heissen ''/var/lib/tomcat4/webapps''). Hier kann man jetzt seine
Web-Applikationen einfach hineinwerfen.

== Wie sieht eine Applikation aus? ==

Für den Anfang sind nur ein paar Dinge wichtig: Man erzeugt ein
Verzeichnis. In diesem können nun *.html-Dateien liegen. Diese
werden angezeigt - Fertig! Ich denke, man kann auch einfach Dateien
mit der Endung *.jsp einfügen und damit Java Server Pages benutzen
(eine Art PHP für Java). Die echten Profis wollen aber natürlich
ein eigenes Servlet schreiben. Dazu erstellt man ein Verzeichnis
''WEB-INF''. Dieses bekommt eine Datei ''web.xml'', die eine URL
(die man später im Browser eingibt) einem Servlet zuordnet und
dieses einer Java-Klasse, die die eigentliche Servlet-Klasse ist.
Eine web.xml für den Anfang kann so aussehen:

  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!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>Test-Applikation</display-name>
    <description>
        Winzige Test-Applikation.
    </description>

    <servlet>
        <servlet-name>test</servlet-name>
        <description>
                test
        </description>
       
<servlet-class>de.bayen.TomcatTest</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/test/*</url-pattern>
    </servlet-mapping>

  </web-app>

Nun brauchen wir noch ein Verzeichnis ''WEB-INF/classes'', in das
wir unsere Klassen schreiben und ''WEB-INF/lib'', in das
Bibliotheken kommen. Das eigentliche Servlet ist dann eine Klasse
und kann z.B. so aussehen:

  package de.bayen;
  import java.io.IOException;
  import java.io.PrintWriter;
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  //
  public class TomcatTest extends HttpServlet {
        public void doGet(HttpServletRequest req,
HttpServletResponse res)
                        throws ServletException, IOException {
                PrintWriter out = res.getWriter();
                out.println("Hello, world!");
                out.close();
        }
  }

== Erstellung in Eclipse ==

Wie man sieht, ist obiges keine Hexerei. Wie geht man nun in
Eclipse am sinnvollsten vor? Bei der Erstellung eines neuen
Projektes kann man angeben, wo die übersetzten Klassendateien
hingeschrieben werden sollen. Hier steht normalerweise ''bin''.
Dies ändert man in ''WEB-INF/classes''. Dann kopiert man die
Bibliothek ''Servlet.jar'' in das Vrzeichnis "/lib". Diese muss man
in Eclipse in den Classpath einfügen (in den Projekt Properties).
Natürlich muss man auch ggf. andere Bibliotheken in ''WEB-INF/lib''
in Eclipse in den Classpath einbinden. Der Tomcat findet sie dort
automatisch.

== einbinden unserer Applikation ==

Entweder wir kopieren unser Projektverzeichnis in das
webapps-Verzeichnis des Tomcat oder - was noch eleganter ist - wir
sagen dem Tomcat, wo er unsere Applikation findet. Dazu kommt
folgender Eintrag in den bestehenden <Host>-Eintrag hinein:

        <Context path="/test"
docBase="/home/tbayen/workspace/tomcattest"
                 debug="1" reloadable="true">
         </Context>

Zu beachten ist, daß wir jetzt wiederum ein "test" vor die URL
schieben, d.h. unser Servlet findet sich nun unter
http://localhost:8180/test/test. Nun sollte der Tomcat übrigens
auch von selber merken, wenn wir in Eclipse etwas geändert haben
und die Klassen ggf. neu laden.

Man kann nun ausgehend vom Mini-Servlet eine größere Applikation
erstellen. Voila!

!!Links ins Web

schlanke Alternativen zum Tomcat sind
*[Jetty|http://www.mortbay.org/]
*[Winstone Servlet Container|http://winstone.sourceforge.net/]
*[LiteWebServer™ (LWS)|http://www.gefionsoftware.com/LiteWebServer/]
*[Tiny Java Web Server and Servlet Container|http://tjws.sourceforge.net/]

[{Tag Java Tomcat}]