Advanced   Java   Services Tomcat Eclipse Integration


Tomcat: Download, Installation, Dokumentation

Download

Man geht zur Startseite von Tomcat und sucht sich in der Spalte ganz links unter Download die aktuelle Release Version (keine Betaversion). Stand März 2016 ist das 8.0.32 . Unter der Rubrik Binary Distributions sucht man sich die zum Betriebssystem passende Zip-Datei aus.


Installation

Man entpackt die Zip-Datei in ein neu angelegtes Verzeichnis, z.Bsp. C:\apache\tomcat. Dabei entstehen im gewählten Verzeichnis u.a. 7 Unterverzeichnisse. Im Verzeichnis /bin befinden sich Batchdateien startup.bat und shutdown.bat zum Starten und beenden von Tomcat. Damit diese arbeiten können müssen die beiden Umgebungsvariablen JAVA_HOME und CATALINA_HOME gesetzt werden. Sie müssen auf das jeweilige /bin-Verzeichnis zeigen und wobei die Pfadangabe am Ende KEIN Semikolon enthalten darf, also z.Bsp.

JAVA_HOME = C:\Program Files (x86)\Java\jdk1.8.0_74
CATALINA_HOME = C:\apache\tomcat

Auf Windowssystemen findet man den Ort zum Eintragen der Umgebungsvariablen unter

Control Panel -> All Control Panel Items -> System -> Advanced System Settings ->
System Properties (neues Fenster) -> Advanced -> Environment Variables -> System variables

Ruft man nun das Startskript auf, sollte sich Tomcat im Browser unter http://localhost:8080 melden.

apache-tomcat.jpg missing


Dokumentation

Hier kann man auf der Startseite von Tomcat in der linken Spalte unter Dokumentation die heruntergeladene Version von Tomcat anwählen und dann unter der Rubrik Reference sich die Javadoc von Servlet, JSP, usw einzeln herunterladen. Viel einfacher ist es jedoch auf der Startseite nochmal Download anzuwählen. Hier findet man unter Binary Distributions und Full documentation eine tar.gz Datei, die ALLE Javadocs enthält. in einem File


In Eclipse eine Instanz von Tomcat anlegen

File -> new -> Other -> Server -> Server

eclipse-tomcat-1.jpg missing

eclipse-tomcat-2.jpg missing

eclipse-tomcat-3.jpg missing

eclipse-tomcat-4.jpg missing

Falls noch keine Web-Projekte existieren kann man den Dialog jetzt beenden. Der Server ist nun angelegt


eclipse-tomcat-5.jpg missing

Mit einem Doppelklick auf den Eintrag 'Tomcat v8.0 Server at localhost' im Servers Fenster erhält man eine Übersicht über die Konfiguration der Eclipse-eigenen Tomcat-Instanz.


eclipse-tomcat-6.jpg missing





Voraussetzungen

Die folgende Anleitung beschreibt die Integration von Apache Tomcat mit der Entwicklungsumgebung Eclipse.


Wie geht man vor

Um Servlets oder Java Server Pages zu entwickeln braucht man in Eclipse ein "Dynamic Web Project". Hier konfiguriert man eine Eclipse-eigene Servletumgebung, die dem Aufbau einer Webapplikation unter Tomcat entspricht. Die folgenden Screenshots werden das zeigen. Wir werden Eclipse im Laufe des Anlegens des Projektes auch den Server (Tomcat) bekanntmachen, ihn dann aber erst später konfigurieren. Das hat den Vorteil, daß im Projekt sofort die beiden ServletPackages bekannt sind.

Ab der Version 4 von Tomcat ist es möglich, mehrere Instanzen von Tomcat anzulegen die in einer einzigen Installation laufen. Jede Instanz arbeitet (zwangsläufig) mit einem eigenen Satz von Ports. Im zweiten Teil werden wir zeigen, wie man in Eclipse eine eigene Serverinstanz anlegt. Man kann übrigens die Reihenfolge auch umdrehen und zuerst die Serverinstanz anlegen und dann die Servletumgebung. In einem dritten Schritt gibt man der Eclipse-eigenen Tomcatinstanz das Servlet bekannt, sodann läßt es sich über das Run-Menu starten und wird dann in einem in Eclipse integrierten Browser angezeigt. Hierfür kann man auch verschiedene Browser auswählen. Auf diese Weise kann man alle Entwicklungsvorgänge mit Eclipse steuern.


Anlegen eines Dynamic Web Projects

Wir wollen eine einfache Hello World Servletanwendung mit Eclipse anlegen. Um alle Schritte deutlich zu sehen, gehen wir dabei von einer frischen Eclipseinstallation und einem leeren workspace-Verzeichnis aus, sodaß noch keine Metadaten angelegt worden sind.





Unter Target Runtime können wir hier bereits den Servernamen eintragen. Die Eintragung des Servernamens sollte man auf alle Fälle vornehmen, da damit gleich die beiden Servletpackages dem Projekt bekanntgemacht werden. Es empfielt sich unbedingt "Create a new local server" anzuhaken, denn dann wird so nebenbei auch noch eine Eclipseeigene Serverinstanz erzeugt. Das geht natürlich auch noch später. Die eigentliche Konfiguration des Servers erfolgt hier nach dem Einrichten des Dynamic Web Projekts.







Hier sehen wir nun die neuen Einträge von Target Runtime ab abwärts. Wir gehen der Neugierde halber auf "Next".



Es gibt aber nichts einzutragen.



Hier setzt man den Haken für die web.xml. Anschließend gehen wir auf "Finish".



Nun erzeugt Eclipse eine ganze Reihe von Verzeichnissen und Dateien.



Hier zunächst die Ansicht in Eclipse. Für die Datei web.xml gibt es zwei verschiedenen Ansichten. Wir sind hier auf das Kontextmenu zum Eintrag "Deployment Descriptor" im Project Explorer gegangen und haben dann mit "Open with" Text Editor gewählt.



Wir sehen, daß im Projekt Explorer auch schon ein Server angezeigt wird. Wird werden ihn später noch konfigurieren müssen.



Und so sieht das auf der Festplatte aus.


Anlegen eines Servlets

Über das Kontextmenu zum Eintrag "HelloWorldServlet" im Projekt Explorer wird uns unter "New" schon eine Auswahl "Servlet" angeboten.



Wir überspringen die Möglichkeit ein Package anzugeben und geben sofort den Klassennamen ein. Da unser Servlet nur das Vorgehen in Eclipse demonstrieren soll brauchen wir hier kein Package.



Wir verzichten auf eine Description und auf Initialisierungsparameter. Um die Möglichkeiten des Mappings zu demonstrieren tragen wir aber einen nicht existierenden Namen ein. Dazu markieren wir den vorhanden Eintrag und gehen dann auf "Edit".



Für unser Servlet brauchen wir weder doGet noch doPost. Wir beschränken uns auf die service-Methode.





Hier das von Eclipse erzeugte Servlet.



Hier das Bild mit den Änderungen im Servletcode.



Weiter unten sehen wir den Server im Projekt Explorer und auf dem dritten Tab neben "Markers" und "Properties" das Tab "Servers", das hier bereits angewählt ist.


Konfiguration der Eclipseeigenen Tomcat Server Instanz

In diesem wichtigen letzten Konfigurationsschritt erstellen wir eine von der Hauptinstanz unabhängige Instanz des Tomcat Servers für Eclipse. Durch einen Doppelclick auf den Eintrag "Tomcat v6.0 Server at localhost [Stopped]" im Tab Server öffnet sich im Hauptfenster ein "Overxxxxx" Dialog. Es werden uns hier bereits die Parameter der Eclips-eigenen Tomcatinstanz gezeigt. Diese Defaulteinstellung hat aber lediglich die Parameter aus der Hauptinstanz übernommen. Wird die Hauptinstanz nicht von Hand gestoppt läßt sich die Eclipseinstanz nicht starten. Um die Eclipseinstanz unabhängig von der Hauptinstanz zu machen müssen wir die drei unter "Ports" angegebenen Ports ändern. Die restlichen Einstellungen brauchen nicht geändert zu werden. Man kann jedoch der Deutlichkeit halber unter "General Information" den Sewrvernamen ändern. (Bemerkung: Da bei mir neben Tomcat auch noch Glassfish läuft, habe ich den Tomcatport von 8080 auf 7070 geändert.)



Hier sind jetzt die neuen Ports eingetragen. Man kann auch andere wählen, nur frei müssen sie sein. Das Speichern der Konfiguration nicht vergessen.



Nun läßt sich der Server problemlos starten und stoppen. Starten mit dem grünen umrandeten weißen Dreieck. Stoppen mit dem kleinen roten Quadrat.






Starten des Servlets

Wir öffnen das kleine Menu über das schwarze Dreieck neben dem linken grünumradneten Dreieck



Im Run on Server Dialog gehen wir neugierdehalber mal auf "Next".



und finden unser bereits eingetragenes Servlet.



"Finish" startet unser Servlet.


Änderungen am Quellcode

Nimmt man Änderungen am Quellcode vor, so wird man beim nächsten Start gefragt ob der Server neu gestartet werden soll. Der Tomcat Manager erübrigt sich also.

Nicht immer realisiert Eclipse Änderungen am Quellcode. Dann muß man einenn neuen Build erzwingen. Hierfür geht man am besten über Clean und wählt das Projekt aus.


Erstellen einer war-Datei

Wenn wir unsere Webapplikation auf einem anderen Servletcontainer starten lassen wollen (anderer Tomcat, Glassfish, JBoss) müssen wir unsere Applikation in eine war-Datei packen. Dazu gibt es das Konsoltool jar.exe, dessen Syntax sich an das Kommando tar der Linuxwelt anlehnt. Aber natürlich kann das auch Eclipse.

Am einfachsten ist es, wenn wir uns im Project Explorer das Kontextmenu zum Eintrag "HelloWorldServlet" holen.



Im Dialog "WAR Export" trägt man die gewünschte Ausstattung ein.


Anlegen eines Dynamic Web Projects (für eine JSP)

Das Anlegen einer JSP verläuft sehr ähnlich zum Anlegen eines Servlets. Zunächst brauchen wir wieder ein Dynamic Web Project. Deshalb gehen wir davon aus, daß die folgenden Screenshots nicht näher erläutert werden müssen.










Anlegen einer Java Server Page








Starten der Java Server Page








Erstellen einer war-Datei

Das Erstellen der war-Datei verläuft genauso wie bei Servlets.


Eine Java Server Page um eine Bean ergänzen

Eine JSP-Bean ist eine Javaklasse die von einer Java Server Page verwendet wird. In der JSP-Datei können Methoden dieser Klasse aufgerufen werden. Eine JSP-Beanklasse muß in einem Packageverzeichnis unterhalb des classes-Verzeichnis des WEB-INF Verzeichnisses liegen, damit sie in der JSP-Datei erkannt wird.

Eclipse legt eine Beanklasse überraschenderweise nicht an diese Stelle, sondern verwaltet diese Datei in einem anderen Verzeichnis. Obwohl die Beanklasse also nicht in einem Verzeichnis unterhalb des classes-Verzeichnisses liegt wird sie von Eclipse beim Start einer JSP-Anwendung richtig zugordnet und von der JSP-Datei erkannt. In einer realen Tomcat-Umgebung muß die Beanklasse jedoch in einem Packageverzeichnis unterhalb des classes-Verzeichnisses liegen. Beim Erstellen einer war-Datei (siehe oben) wird dann von Eclipse die Bean an die richtige Stelle gelegt. Die so erstellte war-Datei kann man dann von Tomcat problemlos entpacken lassen.


Vorgehen

Über das Kontextmenu legt man eine neue Klasse in einem Packageverzeichnis an.



Die Klasse erscheint nicht unter WebContent sondern unter Java Resources, was ein wenig irreführend ist. Als nächstes ergänzen wir die JSP-Datei um ihr die JSP-Bean bekannt zu machen: Man beachte dazu die beiden Einträge vor <html> und den Aufruf der Methode im <body>.



Das nächste Bild zeigt das Ergebnis des Aufrufs der JSP-Datei.


Konfiguration der Eclipseeigenen Tomcat Server Instanz

Bekanntlich wird jede Java Server Page beim ersten Aufruf geparst und vom Servletcontainer in ein Servlet übersetzt. Dieses Servlet wird dann gestartet. Bei der Entwicklung einer Java Server Page kommt es immer wieder vor, daß nach Änderungen auf der Java Server Page das zugehörige Servlet nicht neu angelegt wird. Die Ansicht im Browser liefert dann entweder eine lauffähige, aber alte Fassung oder es erscheinen die alten Fehlermeldungen. Hier hilft nur ein manueller Eingriff, das zugehörige Servlet muß von Hand gelöscht werden, auf diese Weise wird der Servletcontainer gezwungen die JSP-Datei neu zu parsen.

Schon bei Tomcat ist dieses Servlet nicht einfach zu finden, es befindet sich sehr gut vertseckt im sog. work-Verzeichnis. Legt man etwa bei Tomcat eine Java Server Page ( hier hello.jsp) in ein Webapps-Verzeichnis



so befindet sich das zugehörige Servlet unter



Eclipse aber versteckt diese Datei nochmal "etwas" besser indem es das Workverzeichnis in den Metadaten anlegt.



Vom Workverzeichnis geht es dann analog wie bei Tomcat abwärts.



Hier muß man also evtl. eingreifen und die class-Datei von Hand löschen.


Das eclipseeigene Workverzeichnis besser zugänglich machen

Es gibt die Möglichkeit, das gesamte Workverzeichnis an eine andere Stelle zu legen. So bietet es sich etwa an, das Verzeichnis tmp0 an eine besser zugängliche Stelle zu legen, z. Bsp. direkt in den workspace von Eclipse, den man ja auch selbst anlegt. Dazu öffnet man das zum Server gehörende Übersichtsfenster mit einem Doppelclick auf den Servereintrag im Servertab. Hier klickt man auf Open lauch configuration und öffnet das Tab Arguments



Unter VM Arguments sieht man die folgenden vier editierbaren Einträge:

Im ersten und dritten Eintrag könnten wir etwa C:\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
ersetzen durch C:\eclipse-workspace\tmp