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

8.4 Der JSP Life Cycle

Describe the purpose and event sequence of the JSP page life cycle: (1) JSP page translation, (2) JSP page compilation, (3) load class, (4) create instance, (5) call the jspInit method, (6) call the _jspService method, and (7) call the jspDestroy method.

8.4.1 Die 7 Phasen eines JSP Lebenszyklus

Eine JSP Seite durchläuft folgende 7 Phasen

PhaseBeschreibung
ÜbersetzungDie JSP Seite wird geparst und es wird daraus eine Java-Datei mit dem entsprechenden Servlet erzeugt
KompilierenDie erzeugte Datei wird compiliert
Klasse einladenDie compilierte Klasse wird eingeladen
InstantiierungEs wird eine Instanz eines Servlets erzeugt
jspInit()Diese Methode ermoeglicht die Initialisierung des Objekts
_jspService()Diese Methode wird für jede Anfrage ausgeführt
jspDestroy()Diese Methode wird aufgerufen, bevor der Container die Instanz dieses Servlet zerstört

Die Übersetzung

Zunächst wird überprüft, ob sich die JSP seit der letzten Übersetzung geändert hat. Falls ja finden einige Überprüfungen statt, und es werden die Direktiven ausgewertet. Das Ergebnis ist eine Datei mit Java Code. Der Name der Klasse ist abhängig vom verwendeten Container.

Kompilieren

Die erzeugte Java Klasse wird mit einem normalen Java Compiler compiliert.

Laden und Instantiieren

Die geladene Instanz sollte (falls Http verwendet wird) das folgende Interface HttpJspPage erfüllen:

Die Methode jspInit()

Diese Methode wird direkt nach der Instaniierung, auf jedenfall vor der ersten Anfrage ausgeführt. Man kann diese Methode als Skriplet in die JSP Seite deklarieren.

Beachte man ist nicht gezwungen, diese Methode zu deklarieren. Sie existiert schon in der Basisklasse.

Die Methode jspDestroy()

Diese Methode wird aufgerufen, wenn der Container entschlossen hat, das entsprechende Servlet auszuladen. Auch diese Methode muss nur dann deklariert werden, wenn man sie wirklich benötigt.

Die Methode _jspService()

Diese Methode wird automatisch bei jeder Anfrage aufgerufen. Diese Methode wird bei der Übersetzung der JSP in das Servlet automatisch generiert. Es führt zu einem Fehler wenn der Programmierer versucht diese Methode zu deklarieren.

8.4.2 Translatation Unit

Mit Hilfe der include Direktive kann man den Inhalt einer anderen Seite (statisch oder wieder eine JSP) einbinden. Es wird nicht nur die aktuelle Seite, sondern auch die eingebundenen Seiten in ein einziges Servlet übersetzt. Die Menge an Seiten die in ein einziges Servlet übersetzt werden, wird Translation Unit genannt.

Für eine Translation Unit gilt einige Regeln:

8.4.3 Übersetzung einer JSP im Detail

Beachte einige Besonderheiten:

Beispiel:

Das Beispiel ergibt kein Fehler obwohl die Deklaration von pi erst nach der Benutzung erfolgt.

Dieses Beispiel scheitert in der Zeil String s = s1+s2;. Das Problem liegt nicht in der Varialbe s1, da diese in einer Deklaration ist, und in eine Instanzvariable übersetzt wird. Das Problem liegt in der lokalen Variablen s2, die zu spät deklariert und definiert wird.

Man sollte darauf achten dass bei Schleifen, immer in Skriplets immer die Klammern gesetzt werden, auch dann wenn man scheinbar nur eine Anweisung hat.

Siehe z.B folgenden JSP-Code:

Dies wird folgendermassen übersetzt:

Der Anwendername wird auch angegeben, wenn isUserLoggedIn den Wert false hat.

So wäre es richtig:

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