2013-05-10 19 views
6

Da ich Servlet Programmierung neu bin, ist es möglich, dass ich eine grundlegende Frage stelle.Wrapper, Filter und Servlet

Ich schreibe eine Anwendung, wo ein Filter die Antwort von einem Servlet erhält und einige Berechnungen damit ausführt. Ich habe herausgefunden, dass ich eine Wrapper-Klasse brauche, um die Antwort zu bekommen.

Meine Frage ist jetzt, warum der Wrapper benötigt wird? Danke im Voraus!

+0

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

+0

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? –

+0

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

Antwort

12

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.

+1

Super! Danke Ravi :)! Das war klar und verständlich. –

+0

Sie sind willkommen, Mysia. Prost ! –

+0

Anforderung möglicherweise ein Wrapper-Konzept, das heißt https://www.javacodegeeks.com/2012/07/anti-cross-site-scripting-xss-filter.html –

Verwandte Themen