1) Läßt zuerst verstehen, wie Request
und Request Filter
Arbeit:
Wenn läßt, sagen Client eine Anfrage an Servlet machen, geht es durch den Behälter. Der Container entscheidet, welches Servlet Request
weitergeleitet werden soll. Das heißt, der Container hat die volle Kontrolle.
Container Steuerung macht Anfrage Filter einfache Implementierung, weil wir einfach Container wissen lassen, dass die Request
-Filter zuerst und dann Servlet gehen sollte. Weil der Container die volle Kontrolle hat. So ist die Implementierung Anfrage Filter ist einfach.
2) kann nun verstehen, wie Response
und Response Filter
Arbeit:
Wenn Container Servlet-Service-Methoden aufrufen, es geht 2 Objekte zu den Methoden, Request
und Response
.
Das bedeutet einfach, dass Servlet die totale Kontrolle hat, die Antwort an den Client zu senden. Wie ?
Da Response
Objekt die Zeiger zu Output Stream Writer
Objekt hat. Das bedeutet, sobald das Servlet die Bearbeitung der Anfrage beendet hat, schreibt es die Response
direkt zurück an den Client unter Verwendung von Zeiger bis Output Writer Stream
Objekt. Servlet wird also nicht auf irgendjemanden warten (Mittelmänner wie Filter) und den Kunden direkt bedienen. Mit der Zeit wird es zu spät sein, um einzugreifen.
Also, was sind die Lösungen?
Wrapper
ist unsere Lösung.
Wie funktioniert Wrapper?
Also, bevor Behälter die wirklichen Request
und Response
Objekte zu Servlets geht, werden wir unser Response
Objekt wickeln und dann die Real Request
und Wrapped Response
Objekte an die Servlet-Service Methoden senden.
Jetzt hat Servlet Zeiger auf unsere Wrapped Output Stream Writer
Objekt und nicht die Real Response Output Stream Writer
Objekt. Also, wenn Servlet die Anfrage beendet, wird es die Antwort auf unsere Wrapped Stream
schreiben und dann unsere Wrapped Response Object
wird zurückschreiben an Real Response Writer Stream
.
Moral der Geschichte: Verwendung wrapper
, wenn sie mit Response
tun.Request
benötigt kein Wrapper-Konzept.
Nur Sie können diese Frage beantworten, da Sie bereits herausgefunden haben, dass Sie eine Wrapper-Klasse benötigen :-) Was wollen Sie erreichen? Und nein, ein Wrapper (Request/Response) ist nicht immer notwendig ... – home
Soweit ich es verstanden habe, wenn ich die Servlet-Antwort abfangen und etwas damit in meinem Filter machen will, brauche ich einen Wrapper. Ist das korrekt? Was ist mit diesem Fall: Ich habe ein Formular, wo ein Benutzer Benutzername und etwas Text eingeben kann. Dies sollte dann auf einer anderen Seite angezeigt werden. Ich weiß, dass ein Servlet die Eingabeparameter übernehmen und zu einer anderen Seite weiterleiten kann. Kann ich dasselbe mit einem Filter erreichen? –
1. Nein, wer hat dir das gesagt (ein Beispiel könnte hier helfen)? 2. Ich würde lieber keine Geschäftslogik in einem Filter implementieren, warum Sie meinen, ein Filter ist die bessere Wahl? – home