gewusst wie: löschen Inhalt eines PrintWriter nach dem schreiben
Guten Abend, ich möchte wissen, wie das löschen der Daten schriftlich zu einem PrintWriter, d.h. ist es möglich, die Daten entfernen, die von einem PrintWriter nach dem Druck?
hier in diesem servlet, die ich drucken Sie text, um die Antwort, und an der Linie gekennzeichnet durch # ich wollen, entfernen Sie alle zuvor gedruckten Daten und drucken neue Sachen:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
String uName = request.getParameter("uName");
String uPassword = request.getParameter("uPassword");
if (uName .equals("Islam")) {
out.println("Valid-Name");
if (uPassword !=null) {
if (uPassword .equals("Islam")) {
//# clear the writer from any printed data here
out.println("Valid-password");
} else {
out.println("");
out.println("InValid-password");
}
}
} else {
out.println("InValid-Name");
}
}
Hinweis: ich versuchte es.flush (), aber der alte gedruckte text bleibt
- flush sollte den trick tun, gefolgt von schließen.
- Servlet ist spec bietet eine Möglichkeit, dies zu tun. Bitte siehe die Antwort unten
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie eine in-memory -
PrintWriter
mit einemStringWriter
. Sie können die zugrunde liegenden Puffer ausStringWriter
und deaktivieren Sie es, wenn Sie benötigen.HttpServlteResponse.resetBuffer()
wird klar, dass der gepufferte Inhalt. Aber ja, wenn die Antwort bereits geleert, an den client wird es werfenIllegalStateException
. Weil es illegal ist, klar, nach dem partial-response an den client gesendet wird.Referenzen:
Ursache des Servlet 's' Antwort Bereits Begangen'
Können Sie nicht mit der ursprünglichen
PrintWriter
bekommen Sie von der Reaktion, wie das ist, unterstützt durch die tatsächlicheOutputStream
entsprechend der client-Verbindung. Was Sie da schreiben geht direkt an den browser über den Draht (nach Pufferung), so kann man nicht "nehmen Sie es zurück".Was Sie tun können, ist schreiben Sie Ihre Nachricht in einige
StringBuilder
und sobald Sie wissen, es ist gut zu gehen, schreiben Sie es auf diePrintWriter
.Wenn Sie wollen, dass diese Logik angewendet werden, in mehreren Orten (transparent), die Sie betrachten können, schreiben Sie einen filter, der umschließt die original-Antwort in einem
HttpServletResponseWrapper
das gibt einen "fake"OutputStream
oderPrintWriter
und führt diese Prüfung vor, um tatsächlich senden Sie es über den Draht.Was schließlich für mich arbeiten, war die Umstellung der Logik, wie ich die Ausgabe meiner Daten.
Dies ist die Daten-Struktur, die ich war, die Ausgabe, die gespeicherten Ergebnisse einer Suche mit dem text aus einem html-Formular als Eingabe.
So, ich war der Iteration über den Inhalt dieser Datenstruktur und drucken Sie es aus auf html.
Löschen der Daten Struktur hat Super geklappt mit meinem servlet-setup.
Hier war mein main serverlet-loop-Logik: