Inhalt Abbildung PDF Source SCWCD
 |<    <     >    >|  Generated by CoCoDiL

5.2 scopes

For the fundamental servlet attribute scopes (request, session, and context): write servlet code to add, retrieve, and remove attributes; given a usage scenario, identify the proper scope for an attribute; and identify multi-threading issues associated with each scope.

5.2.1 Überblick

Innerhalb von Web-Applikationen kommunizieren verschiedene Servlets miteinander. Sie benötigen dazu einen gemeinsamen Bereich, mit dem sie Daten lesen bzw. austauschen können. Die Servlet Spezifikation definiert dazu 3 verschiededen Scopes, die es erlauben Attribute zu speichern und zu lesen.

Ihre Interfaces sind jeweils identisch, die Scopes unterscheiden sich lediglich in der Lebensdauer.

requestGültig für eine einzige Anfrage (i.a. an ein Servlet). Ein Servlet kann mittels RequestDispatcher die Anfrage an mehreren anderen Servlets weiterleiten. Dann sind die Attribute, die in dem request gespeichert werden, auch in diesen anderen Servlets sichtbar. Wurde eine Anfrage abgearbeitet, so verliert man den Zugriff auf diese Attribute
sessionEine Session wird von einem einzigen Anwender in einem Browser angestossen, und ist solange gültig bis sich der Anwender explizit abmeldet, oder der Servlet Container die Session von sich aus beendet hat (z.B. falls lange keine Interaktion in dieser Session gemacht wurde). I.a. geht eine Session von einem einzigen Browser aus, es sei denn der Anwender öffnet aus diesem Browser aus einen 2. Fenster. (Wenn der Anwender dann noch Cookies verbietet funktioniert das Session Management nicht mehr)
contextDie Servlets einer Webapplikation teilen sich alle einen gemeinsamen ServletContext. Alle Anfragen aller Anwender dieser Webapplikationen können auf die Attribute des ServletContext zugreifen

5.2.2 Das Interface

Die folgende Tabelle zeigt, wie der Programmierer die verschiedenen Scopes erreicht.

requestHier sind die Attribute an ein (Http)ServletRequest Instanz gebunden, die in der doService() Methode eines HttpServlets als Parameter mitgegeben wird
sessionVon einer Instanz einer HttpServletRequest aus, bekommt man die aktuelle HttpSession durch die Methode getSession() bzw. getSession(true)
contextZu dem Context eines Servlets gelangt man vom HttpServlet aus, durch die Methode getServletContext()

Das Interface um Attribute zu speichern, lesen und löschen sind für alle scopes identisch.

Für die Attributnamen gibt es Konventionen:

5.2.3 Überlegungungen zum Umgang mit Threads

Ein WebServer wird i.a. paralell mit Anfragen bombadiert. Dabei kann es zu Problemen kommen, wenn ein Thread ein Attribut ändert, das gerade ein anderer Thread in Bearbeitung hat.

Da ein Benutzer i.a. nicht hunderte von Browser geöffnet hat, ergibt sich dadurch aus Sicht der Performance keinen Flaschenhals.

5.2.4 Verhalten in einer verteilten Umgebung

Bei grösseren Anwendungen sind die Servlets auf mehreren Rechnern verteilt. So kann z.B. ein ServletContainer auf mehreren Maschinen mit verschiedenen Java Virtuellen Maschinen (JVM) arbeiten. Dies hat folgende Vorteile

Verteilte Anwendungen sind alles andere als trivial und wirken sich auf die Programmierung aus. D.h. Eine Applikation entwickelt für eine Maschine mit einer JVM kann nicht ohne groesseren Aufwand umkonfiguriert werden, so dass sie auf mehreren Maschinen läuft

Verhalten von Servlet Context

Für jede Webapplikation gibt es pro virtuelle Maschine genau einen ServletContext. In einer verteilten Anwendung, gibt es aber i.a. mehrerer JVM und deshalb mehrere ServletContexte pro Webapplikation.

Verhalten von Http Session

Eine Session kann zu einem Zeitpunkt immer auf genau einer JVM laufen. Allerdings ist es erlaubt eine Session von einer JVM zu einer anderen zu migrieren.

Inhalt Abbildung PDF Source SCWCD
 |<    <     >    >|  Generated by CoCoDiL