3.1 HttpServletResponse-Klasse

Nach dem Aufruf service()Ihrer Servlet-Methode generiert der Webcontainer eine Antwort an den Client basierend auf der HttpServletResponse. Wenn Sie also die Antwort an den Client irgendwie beeinflussen möchten, sollten Sie dieses Objekt ändern.

Die Serverantwort besteht aus drei Teilen:

  • Statuszeile (zum Beispiel: 200 OK)
  • Überschriften
  • Antwortkörper

Und Klassenmethoden HttpServletResponsesind auch in 3 Gruppen unterteilt? Fast:

Methoden Beschreibung
1 void setStatus(int sc) Legt den Antwortstatuscode fest.
2 void sendError(int sc) Sendet einen Fehler mit dem angegebenen Code an den Client.
3 void sendError(int sc, String msg) Sendet einen Fehler mit dem angegebenen Code und einer Nachricht an den Client.
4 void addHeader(String name, String value) Fügt einen Header zur Liste der Antwortheader hinzu.
5 void setHeader(String name, String value) Ändert den Header in der Liste der Antwortheader.
6 boolean containsHeader(String name) Überprüft, ob der Header bereits vorhanden ist.
7 void addCookie(Cookie cookie) Fügt der Antwort ein Cookie hinzu.
8 void sendRedirect(String location) Leitet den Client zu einer anderen URL um.
9 String encodeRedirectURL(String url) Codiert die angegebene URL zur Verwendung in der sendRedirect-Methode.
10 String encodeURL(String url) Kodiert die angegebene URL, einschließlich der Sitzungs-ID.
elf void setContentType(String type) Legt den MimeType des Ergebnisses fest.
12 void setContentLength(int len) Legt die Länge des Antworttextes fest.
13 void setCharacterEncoding(String charset) Legt den Antwortkodierungssatz fest.
14 void setBufferSize(int size) Legt die Puffergröße für den Antworttext fest.
15 boolean isCommitted() Überprüft, ob der Puffer bereits in die Antwort geschrieben wurde.
16 void flushBuffer() Schreibt den Inhalt des Puffers in die Antwort.
17 void reset() Setzt alle Daten zurück, die im Puffer, in den Headern und in den Antwortcodes gespeichert sind.
18 void resetBuffer() Löscht den Antwortpuffer.

Die Methoden hier sind recht trivial. Aber ich werde Ihnen unten ein paar Highlights nennen.

Puffer . Die Antwort Ihres Servlets wird in einen Puffer geschrieben und nicht sofort an den Benutzer gesendet. Daher können Sie irgendwann (wenn beispielsweise ein Fehler auftritt) alles zurücksetzen (löschen), was in den Puffer geschrieben wird. Sie können sogar die Methode reset() aufrufen und nicht nur den Inhalt des Puffers, sondern auch die Header mit dem Antwortcode löschen.

3.2 Redirect()

Der zweite wichtige Punkt ist die Weiterleitung. Wenn Ihr Servlet beschließt, den Client zu einer anderen URL umzuleiten, müssen Sie diese URL irgendwie an den Client senden. Dies kann mit der erfolgen sendRedirect.

Aber es gibt eine wichtige Nuance. Der URI kann einen größeren Bereich an Zeichen enthalten, als im Antworttext zulässig ist. Daher muss die URL vor dem Aufruf der Methode zunächst in einen gültigen Zeichensatz kodiert werden sendRedirect(). Hierfür gibt es eine spezielle Methode encodeRedirectURL(String url). Benutze es.

Beispiel für eine Weiterleitung:


public class RedirectServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String newUrl = "http://google.com?q=Learn to google!";
        String redirectUrl = response.encodeRedirectURL(newUrl);
        response.sendRedirect(redirectUrl);
    }
}

3.3 getWriter()-Methode

Und jetzt lernen wir, wie wir unseren Text als Antworttext schreiben. Zu diesem Zweck HttpServletResponseverfügt die Klasse über eine spezielle Methode getWriter(), die ein Objekt zurückgibt PrintStream. Falls jemand es vergessen hat: Dies ist der Feldtyp mit dem Namen System.out.

Um Text als Servlet-Antwort zu schreiben, benötigen Sie:

  • Rufen Sie das PrintStream-Objekt auf, indem Sie die response.getWriter().
  • Schreiben Sie alles, was Sie für notwendig halten, in das PrintStream-Objekt (alle Daten werden in den Puffer geschrieben).
  • Senden Sie den Puffer an den Benutzer, indem Sie die Methode close()im PrintStream aufrufen.

Schreiben wir ein Servlet, das zwei Zahlen addiert aund bdas Ergebnis an den Benutzer zurückgibt:



public class CalculatorServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
         // Getting the parameter “a” and “b” from request
        String a = request.getParameter("a");
        String b = request.getParameter("b");
 
        try {
            // Convert strings to numbers and calculate sum
            int sum = Integer.parseInt(a) + Integer.parseInt(b);
 
            // Print HTML as a response for browser
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
 
            out.println("<html>");
            out.println("<head> <title> CalculatorServlet </title> </head>");
            out.println("<body>");
            out.println("<h1> Sum == " + sum + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}