Unterschiede zwischen ServletResponse und HttpServletResponseWrapper?
Ich bin neu auf servlet und Lesen von text zu filtern und Wrappern. Ich kann verstehen, Filter, aber verwirrt über Wrapper. In dem Buch, der Autor gibt ein Beispiel:
Falls kein Deckblatt:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
String name = request.getParameter("name").trim();
try {
chain.doFilter(request, response);
PrintWriter out = response.getWriter();
if (name.length() == 0) {
out.println("Some message");
out.println("</body>");
out.println("</html>");
out.close();
}
} catch (Throwable t) {
}
}
Im Falle der wrapper:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
String name = request.getParameter("name").trim();
HttpServletResponse httpRes = (HttpServletResponse) response;
HttpServletResponseWrapper resWrapper = new HttpServletResponseWrapper(httpRes);
try {
chain.doFilter(request, response);
PrintWriter out = resWrapper.getWriter(); //why dont we just use response.getWriter();
if (name.length() == 0) {
out.println("<h3>Some message");
out.println("</body>");
out.println("</html>");
out.close();
}
} catch (Throwable t) {
}
}
Warum müssen wir HttpServletResponseWrapper
wir können zwar tun die gleiche Sache mit ServletResponse
im Fall 1? Kann mir jemand ein klares Beispiel dafür, dass wir verwenden HttpServletResponseWrapper
statt ServletResponse
? Ich habe versucht zu google, fand aber kein Glück.
InformationsquelleAutor der Frage ipkiss | 2011-08-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
BalusC s Antwort ist gut, aber es könnte ein wenig überwältigend sein, wenn Sie gerade erst anfangen.
Einfach ausgedrückt: SerlvetResponse und seine Erweiterung, HttpServletResponsesind Schnittstellen zu sagen, welche Methoden zur Verfügung stehen, um den Anruf zu tun, die Dinge, die Sie benötigen. Im normalen Verlauf der Arbeit mit Filtern, Servlets, et al., verwenden Sie HttpServletResponse oft zu sagen, Ihre app, wie Sie auf Anfragen reagieren.
HttpServletResponseWrapper ist eine spezielle Umsetzung von HttpServletResponse, die Ihnen eine bequeme Möglichkeit zum wickeln einer vorhandenen Antwort mit einigen Logik Ihrer eigenen, ohne zu schreiben, eine völlig neue Implementierung der Schnittstelle. Es hat eine viel von Methoden, also das ist wirklich schön. Als ein triviales Beispiel, angenommen, Sie möchten, dass Anrufe zu Antwort.flushBuffer(). Dieser code, mit HttpServletResponseWrapper, wird das tun:
Die typische Art und Weise zu nutzen, wie ein wrapper wäre einen filter zu erstellen, wie diese:
Beachten Sie, dass wir wickeln die Antwort kommt in den filter mit einer Instanz der eigenen wrapper. Dann übergeben wir den wrapper nach unten zum nächsten Element in der Filterkette. Also alles, was nach diesem filter wird eine Ausnahme ausgelöst, wenn Sie fordert, flushBuffer (), weil es den Aufruf auf unser wrapper. Die wrapper, der aufgrund seiner Standard-Verhalten, delegieren jedem anderen Aufruf die verpackte Antwort, die ist die echte, also alles außer Anrufe an, dass eine Methode funktioniert in der Regel.
InformationsquelleAutor der Antwort Ryan Stewart
Dass ist wirklich ein blödes Beispiel, das zeigt nicht den nutzen des request/response-wrapper. Eigentlich ist der ganze filter-Beispiel ist schlecht. Emittierende HTML getan werden sollte, von einer JSP oder am höchsten ein servlet (aber auch das ist noch schlechter). Gehen Sie durch unsere Filter wiki-Seite einige Ideen bekommen, was ein filter kann verwendet werden, für.
Ein Antwort wrapper ist nützlich, wenn Sie möchten, ändern Sie die Antwort, die das Verhalten oder wollen einfach nur, um Informationen zu sammeln über die Antwort während ist es verwendet worden in der Anfrage-Antwort-Kette. Das geänderte Verhalten nimmt dann Platz, wenn einige servlet-oder JSP-Aufrufe einer bestimmten Methode auf die Antwort. Wenn Sie überschrieben, es in Ihre wrapper-Klasse, dann wird dieser hier genannt wird, statt. Sie verändern könnten, das Verhalten oder Informationen zu sammeln, die es gibt.
Hier auf Stackoverflow finden Sie einige Beton Beispiele von nützlichen
HttpServletResponseWrapper
Implementierungen.InformationsquelleAutor der Antwort BalusC