Java Reference
In-Depth Information
Egal, zu welchem Zeitpunkt ein Servlet-Objekt erzeugt wird, nach dem Erzeugen wird eine
Initialisierungsmethode auf das Servlet-Objekt angewendet. In der Basisklasse gibt es zwei
überladene Methodenvarianten mit dem Namen init. Wenn das Servlet eine Methode
namens init mit einem ServletConfi g-Parameter überschrieben hat, wird diese Methode auf-
gerufen. Falls es eine solche Methode nicht gibt, wird die parameterlose Variante der Init-
Methode aufgerufen, sofern vorhanden.
Wenn die Web-Komponente deinstalliert wird oder der Web-Server heruntergefahren wird,
dann wird kurz davor die Methode destroy auf allen existierenden Servlet-Objekten einer
Web-Anwendung aufgerufen. Die Methode destroy gibt es allerdings nur in der parameter-
losen Version. Durch die Methoden init und destroy wird ein einfacher Lebenszyklus für
Servlets realisiert. Zusammen mit doGet und doPost sind dies die Methoden, die vom Kom-
ponenten-Framework auf den Komponentenobjekten aufgerufen werden.
Umgekehrt können natürlich auch die Komponenten Dienste des Komponenten-Frame-
works nutzen. Einige der Dienste stehen über ein ServletContext-Objekt zur Verfügung.
Ähnlich wie sich ein Applet über die geerbte Methode getAppletContext Zugriff auf den
AppletContext beschaff en kann, erbt ein Servlet die Methode getServletContext und erhält
damit eine Referenz auf ein ServletContext-Objekt (AppletContext und ServletContext sind
übrigens Schnittstellen, keine Klassen). Zu jeder Web-Anwendung existiert genau ein Serv-
letContext-Objekt. Das heißt, allen Servlets derselben Web-Komponente wird durch get-
ServletContext eine Referenz auf dasselbe Objekt zurückgegeben, während Servlets unter-
schiedlicher Anwendungen auch unterschiedliche ServletContext-Objekte erhalten. Eine
Funktionalität, welche ein ServletContext bereitstellt, ist eine Hash-Tabelle. Mit der Methode
setAttribute der Klasse ServletContext kann ein beliebiges Objekt unter einem anzugeben-
den Namen in die Tabelle eingetragen werden. Durch Angabe des Namens kann man diesen
Eintrag mit getAttribute auslesen und mit removeAttribute wieder löschen. Alle in der
Tabelle eingetragenen Namen kann man mit getAttributeNames erfragen. Durch diese
Hash-Tabelle eines ServletContexts wird ein gemeinsamer Speicher für alle Servlets dersel-
ben Web-Anwendung realisiert.
Ein Web-Server kann in der Regel gleichzeitig mehrere Kommandos entgegennehmen. Ent-
sprechend werden die Aufrufe von doGet und doPost auf den Servlet-Objekten durch unter-
schiedliche Threads realisiert. Es ist also Parallelität vorhanden, auch wenn diese im Pro-
grammcode der Web-Komponenten nicht off ensichtlich ist. Das heißt also, dass die Methode
doGet der Klasse HelloServlet aus Listing 12.1 mehrfach parallel ausgeführt werden kann.
Dazu kann es sein, dass die Methoden doGet und doPost anderer Servlets parallel dazu
aufgerufen werden. Aus diesem Grund muss der Zugriff auf gemeinsam genutzte Daten
synchronisiert werden. Dies gilt insbesondere auch für die Hash-Tabelle des Servlet-
Contexts.
Weitere Aspekte von Servlets wie z. B. das wichtige Thema Sessions werden in diesem Buch
nicht behandelt. Die Leserinnen und Leser seien hierzu auf spezielle Verö ff entlichungen
verwiesen (s. auch das Literaturverzeichnis dieses Buchs). Dasselbe gilt auch für die weiter-
führenden Themenbereiche Java Server Pages und Java Server Faces.
 
Search WWH ::




Custom Search