Brauchen Sie Hilfe beim erstellen einer benutzerdefinierten HttpServletResponse
Plötzlich stecken, generieren von eigenen servlet-Antwort. Ich will zu ersetzen, die servlet-Antwort mit vordefinierten:
public class MyCustomResponse extends HttpServletResponseWrapper {
private String customOutput;
public MyCustomResponse(String customOutput, HttpServletResponse response) {
super(response);
//PrintWriter and Outputstream should stream this variable as output
this.customOutput = customOutput;
}
//
//Below I need to override something
//
}
- und filter-code snipped wie folgt:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//
//
MyCustomResponse customResponse = new MyCustomResponse("Hello world!", (HttpServletResponse) response);
chain.doFilter(request, customResponse);
}
Schande über mich, aber ich bin wirklich stecken auf die Kodierung dieser einfachen Aufgabe 🙁
Jede mögliche Hilfe würde geschätzt.
UPDATE:
Alles was ich will ist die Implementierung von benutzerdefinierten Antwort-wrapper, die, sobald es in die filter-Kette, würde immer eine Antwort mit einem vordefinierten text. Ich weiß, wie zu schreiben, benutzerdefinierte Daten innerhalb der doFilter () - Methode, aber ich will MyCustomResponse
verantwortlich zu sein für die, die - einfach nur instanzieren und in die Kette. Jede gut begründete Antworten "kannst Du nicht, weil..." sind auch willkommen.
InformationsquelleAutor Osw | 2011-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zitiert in einem Ihrer Kommentare :
Für Sie, dass Sie müssen Ihre eigene Implementierung für getWriter() & getOutputStream() durch überschreiben.
ja, aber ich habe vorausgesetzt, sample-code, so es benötigt definitiv einige änderungen, aber die Idee dahinter bleibt dieselbe.
InformationsquelleAutor Nayan Wadekar
Tut mir Leid, aber
problem. Sie code geschrieben, so? Es
funktioniert nicht? was genau funktioniert nicht?
und, ich BIN eigentlich ERWARTET zu ersetzen-Anfragen/ - Antworten mit meinem eigenen Implementierungen, das ist der Grund, warum servlet-Filter und Wrapper-Klassen existieren.
InformationsquelleAutor AlexR
Deine Antwort-wrapper unbrauchbar ist, da es nur speichert einen string in der Java-Objekt-Modell die tatsächlichen HTTP-Antwort.
Dem eigentlichen HTTP-Antwort, die der client erhält, wird der Strom von bytes (resp. Zeichen) gesendet die über den output-stream (resp. Schriftsteller) HttpServletResponse-Objekt (und die Header, cookies, etc. gespeichert in das HttpServletResponse-Objekt).
Wenn Sie möchten, senden Sie eine benutzerdefinierte Ausgabe-string an den client, nutzen Sie einfach Antwort.getWriter().print("Hallo Welt!").
Weitergabe der Antwort an den rest der Filterkette ist fraglich, da der rest der Kette wird wahrscheinlich wollen, fügen Sie Ihre eigenen Daten in den response stream.
Wenn Sie wollen, hart-code der Antwort an den client gesendet werden, um Ihre benutzerdefinierten Ausgabe, aber können passieren noch die Antwort auf die Kette und ignorieren, was der rest der Kette stellt in der Antwort, Sie könnten versuchen, fügen Sie den folgenden, um Ihre wrapper :
Ich habe nicht gesagt, dass Ihr filer war nutzlos. Ich sagte, dass Ihre Antwort-wrapper wurde. Sie hat nicht überschreiben weder getOutputStream(), noch getWriter(). So konnte Sie erklären, was Sie wirklich wollen, zu tun mit dieser wrapper? Warum nicht Sie schreiben Sie einfach Ihre benutzerdefinierte output-stream-writer?
einverstanden, meine Frage mag ein wenig ungenau oder irreführend sind, überschreiben diese Methoden, die war das eigentliche problem, Frage aktualisiert.
Wenn ich das richtig verstehe, wollen Sie die Antwort an den client gesendet, um Ihre benutzerdefinierte Zeichenfolge, aber Sie wollen in der Lage sein zu passieren, die Antwort auf die Kette und stellen Sie sicher, dass alles, was geschrieben, auf die Antwort von dem rest der Kette wird vollständig ignoriert. Wenn das stimmt, dann werde ich update meine Antwort Ihnen sagen, wie ich denke, dass man das tun könnte.
InformationsquelleAutor JB Nizet
Sehe ich nicht den Grund, was Sie tun möchten, aber wenn Sie wollen verwenden Sie Ihre wrapper, mein Vorschlag wäre:
Erstellen Sie Ihre eigenen servlet, verwendet Ihre wrapper und registrieren Sie es in
web.xml
, in so etwas wie dieses:javax.servlet.GenericServlet
ab und setzen dieservice(ServletRequest, ServletResponse)
Methode. Dann verwenden Sie die Template Methode-Muster zu erstellenservice(ServletRequest, ServletResponseWrapper)
. ODERjavax.servlet.HttpServlet
und überschreibenservice(HttpServletRequest, HttpServletResponse)
Methode. Verwenden Sie die Template Methode-Muster zu erstellenservice(HttpServletRequest, HttpServletResponseWrapper)
. Dies erfordert, dass Sie nicht diedoGet
,doPost
,doPut
,doTrace
Methoden bereits vonHttpServlet
aber, erstellen Sie stattdessen Ihre eigenen, die verwendet Ihre wrapper.Hoffe, das hilft.
InformationsquelleAutor Buhake Sindi