Inhalt | Abbildung | Source | SCWCD | |||
|< | < | > | >| | Generated by CoCoDiL |
Die Aufgabe eines Request Dispatchers ist es eine Anfrage an eine andere Ressource (z.B ein Servlet, eine Html Seite oder JSP Datei) weiterzuleiten. Der Servlet Container
Ein RequestDispatcher wird durch eine der folgenden Methoden erzeugt
Die erste Methode aServletContext.getRequestDispatcher(String path) erwartet einen Pfad der mit einem Slash '/' beginnt. Der Pfad ist relativ zum Wurzelverzeichnis des ServletContext. Der Container versucht dann mit den servlet-mapping Regeln die Ressource zu finden. Es wird einen RequestDispatcher der das Zielobjekt umwrappt zurückgegeben, oder falls das Ziel Objekt nicht gefunden wird der null Wert zurückgegeben.
Mit der zweiten Methode aServletContext.getRequestDispatcher(String name) ist es möglich direkt auf eine Ressource zuzugreifen, wenn der Name dem ServletContainer bekannt ist. Auch hier wird ein RequestDispatcher oder der null Wert zurückgegeben.
Mit der dritten Methode aServletRequest.getRequestDispatcher(String path) kann man einen Pfad relative zu der aktuellen Servlet angeben.
Das folgende Code-Fragment zeigt die Benutzung eines Request Dispatchers mit der forward Methode
Die forward Methode leitet die Anfrage an die template.jsp weiter. Mit der forward Methode ist es nicht möglich die Ausgabe der Qúellressource und der Ziel-Ressource zu mischen. Wurde schon vor der forward Anweisung etwas in den response Puffer geschrieben, geht dies verloren.Wurde der Puffer schon committed (ein flush() auf den entsprechenden OutputStream) erzeugt die forward Methode ein IllegalStateException.
Dasselbe Code-Fragment mit der include Methode:
Mit der Include Methode ist es durchaus möglich, die Ausgabe der Quell- und Zielressource zu mischen.
Beispiel:
Die Include Methode hat gegenüber der forward Methode einige Einschränkungen. Die Ziel Ressource kann nicht den Header von response verändern auch kann der Status Code von response nicht verändert werden.
Die Include Methode richtet automatisch in dem HttpServlet Objekt Attribute ein, die für den Fall dass das eingebundene Servlet oder die JSP-Seite diese Daten benötigen, den ursprünglichen Anfragepfad beschreiben. Diese Attribute, auf die die eingebundene Ressource durch Aufrufen von getAttribute auf dem HttpServletRequest zugreifen kann, sind nachfolgend aufgeführt. Diese Attribute müssen aber nicht gesetzt werden, falls der Include mit der getNamedDispatcher Methode ausgeführt wurde
Dasselbe gilt auch für die forward Methode. Auch hier wird der Pfad der original Anfrage als Attribut automatisch eingebunden.
Inhalt | Abbildung | Source | SCWCD | |||
|< | < | > | >| | Generated by CoCoDiL |