=Web-Anwendung mit Eclipse und eigenem Dateilayout erstellen =

Bevor ich mit den "Web Standard Tools" von Eclipse gearbeitet habe,
habe ich auch schon Webanwendungen erstellt. Hierbei wird einem
nicht die meiste Arbeit von Eclipse abgenommen. Dennoch ist auch
dieser Weg interessant, weil man so vielleicht eher sieht, was
"unter der Haube" passiert. Deshalb habe ich diese Anleitung auf
dieser Seite ausgelagert. Der "modernere" Weg steht nun auf der
Seite WebAnwendungenMitEclipse.

== Dateibaum ==

Ich bin nach der
[http://jakarta.apache.org/tomcat/tomcat-5.5-doc/appdev/index.html
Tomcat-Doku] vorgegangen, die ich jedem als erste Lektüre empfehle
und habe die Verzeichnisse src, docs und web angelegt. in web gibts
ein Unterverzeichnis /web/WEB-INF. Web bildet später das
root-Verzeichnis meiner Anwendung, in dem z.B. auch statische 
HTML-Seiten stehen können. WEB-INF wird vom Tomcat nicht bei
Web-Anfragen ausgeliefert, sondern ist für Konfigurationsdateien
reserviert. Insbesondere kommt dort die Datei web.xml hinein.
Hierzu habe ich die Beispiel-Datei aus den Dokus genommen und
angepasst. Hier steht eine Beschreibung aller Servlets und ein
Mapping, welche URL welches Servlet aufrufen soll.


Die Servlets selber sind Java-".class"-Dateien, die zum Tomcat
kopiert werden müssen. Alle Dateien, die meine Applikation
betreffen, müssen allerdings in einem einzigen Dateibaum
untergebracht sein, wenn Tomcat sie ausführen soll. Zur
Distribution und Installation wird dieser in ein Web-Archiv gepackt
(*.war) und dem Tomcat übergeben. Dies macht allerdings alles unser
Ant-Skript.


== [http://ant.apache.org/ Ant] ==

Ich benötige ein Ant-build-Skript, damit mein Projekt sauber
verpackt und in den Tomcat geschoben werden kann. Dazu habe ich das
recht umfangreiche, aber sehr gut dokumentierte build.xml aus der
Tomcat-Doku genommen. Dieses habe ich erstmal nicht verändert (ist
ggf. für den Einbau von Bibliotheken nötig). Alle Einstellungen
kommen in die Datei "build.properties", die von build.xml
eingelesen wird. (In Eclipse muss man übrigens einstellen, dass
diese 
Datei mit dem "Properties Editor" geöffnet wird und nicht mit dem
"build properties editor", der zwar sehr hübsch, aber für unsere
Zwecke nicht der richtige ist.

Ant kann durch eine Art Plugins erweitert werden. So gibt es auch
eine Bibliothek, die Ant beibringt, direkt den Tomcat zu steuern
(reload etc.). Diese muss allerdings dem Ant bekannt gemacht
werden. Unter Debian funktioniert
das sofort und problemlos, allerdings benutzt Eclipse einen eigenen
Ant, deshalb muss man in Eclipse in den Einstellungen für Ant im
Classpath noch die Datei
''/usr/share/tomcat4/server/lib/catalina-ant.jar'' einfügen, damit
das build.xml auch richtig funktioniert.

Es gibt nun ein build-Skript, mit dem man seine Applikation
erzeugen und installieren kann. Das target '''install''' erzeugt
den o.g. Dateibaum, und installiert diesen in einem laufenden
Tomcat (die Applikation ist nicht dauerhaft installiert). Mit
'''reload''' kann man Änderungen aktualisiert in den Tomcat
schieben. Mit '''dist''' wird ein *.war-Archiv erzeugt, das man
dann in ein Tomcat-Verzeichnis kopiert, um die Applikation
endgültig zu installieren.

Alle diese build-Prozeduren laufen unabhängig vom build-System von
Eclipse ab. Sie erzeugen die Verzeichnisse ''build'' und ''dist'',
die man mit dem Target '''clean''' selbstverständlich auch wieder
löschen kann. Eclipse sollte man ggf. mitteilen, daß diese
Verzeichnisse nicht ins CVS gehören. (''<nowiki>"Team"/"add
to .cvsignore"</nowiki>'')

Ich habe mir übrigens ein paar Kopien der build-Datei gemacht, weil
Eclipse sich dann zu jeder Datei ein Target merken kann, das beim
Starten aufgerufen wird. So habe ich in den Favoriten der externen
Tools die Targets "install" und "reload", die man am häufigsten
benötigt, direkt zugänglich.

== Bibliotheken benutzen ==

Habe ich Bibliotheken benutzt, muss ich diese mit installieren. Das
stellt auch sicher, dass die Lib immer die Version hat, die ich
auch beim Entwickeln hatte. Allerdings kann es Probleme mit dem
Security Manager geben, falls die Bibliothek z.B. auf Dateien oder
aufs Netzwerk zugreifen will, da Tomcat-Applikationen normalerweise
in einer recht restriktiven Sandbox laufen.

Um z.B. die Bibliothek "Oro" mit zu verpacken, kommt in
build.properties eine Zeile mit dem Pfad:

oro.jar=/usr/share/java/oro.jar

und an zwei Stellen in build.xml muss eine Zeile eingefügt werden
(ist dort gut dokumentiert), und zwar, damit der Compiler die
Bibliothek findet (Wenn Ant compiliert, weiss der Compiler nichts
von den Eclipse-Einstellungen für den 
Classpath):

        <pathelement location="${oro.jar}"/>

und damit die Bibliothek in das *.war-File eingebaut wird:      

    <copy todir="${build.home}/WEB-INF/lib"
file="${oro.jar}"/>