3.1 Klasa HttpServletResponse

Po wywołaniu service()metody serwletu kontener WWW wygeneruje odpowiedź dla klienta na podstawie pliku HttpServletResponse. Jeśli więc chcesz w jakiś sposób wpłynąć na odpowiedź klienta, powinieneś zmodyfikować ten obiekt.

Odpowiedź serwera składa się z trzech części:

  • Linia stanu (na przykład: 200 OK)
  • Nagłówki
  • Ciało odpowiedzi

A metody klas HttpServletResponsesą również podzielone na 3 grupy? Prawie:

Metody Opis
1 void setStatus(int sc) Ustawia kod stanu odpowiedzi.
2 void sendError(int sc) Wysyła błąd do klienta z określonym kodem.
3 void sendError(int sc, String msg) Wysyła błąd z określonym kodem i komunikatem do klienta.
4 void addHeader(String name, String value) Dodaje nagłówek do listy nagłówków odpowiedzi.
5 void setHeader(String name, String value) Zmienia nagłówek na liście nagłówków odpowiedzi.
6 boolean containsHeader(String name) Sprawdza, czy nagłówek już istnieje.
7 void addCookie(Cookie cookie) Dodaje plik cookie do odpowiedzi.
8 void sendRedirect(String location) Przekierowuje klienta do innego adresu URL.
9 String encodeRedirectURL(String url) Koduje określony adres URL do użycia w metodzie sendRedirect.
10 String encodeURL(String url) Koduje określony adres URL, w tym identyfikator sesji.
jedenaście void setContentType(String type) Ustawia MimeType wyniku.
12 void setContentLength(int len) Ustawia długość treści odpowiedzi.
13 void setCharacterEncoding(String charset) Ustawia zestaw kodowania odpowiedzi.
14 void setBufferSize(int size) Ustawia rozmiar buforu dla treści odpowiedzi.
15 boolean isCommitted() Sprawdza, czy bufor został już zapisany w odpowiedzi.
16 void flushBuffer() Zapisuje zawartość bufora do odpowiedzi.
17 void reset() Resetuje wszystkie dane przechowywane w buforze, nagłówki i kody odpowiedzi.
18 void resetBuffer() Czyści bufor odpowiedzi.

Metody tutaj są dość trywialne. Ale poniżej przedstawię kilka najważniejszych.

Bufor . Odpowiedź serwletu jest zapisywana w buforze, a nie natychmiast wysyłana do użytkownika. Dlatego na pewnym etapie (jeśli np. wystąpi błąd) można zresetować (wymazać) wszystko, co jest zapisane w buforze. Możesz nawet wywołać metodę reset() i skasować nie tylko zawartość bufora, ale także nagłówki z kodem odpowiedzi.

przekierowanie 3.2()

Drugim ważnym punktem jest przekierowanie. Jeśli twój aplet zdecyduje się przekierować klienta na inny adres URL, musisz w jakiś sposób wysłać ten adres URL do klienta. Można to zrobić za pomocą sendRedirect.

Ale jest ważny niuans. Identyfikator URI może zawierać szerszy zakres znaków niż dozwolony w treści odpowiedzi. Dlatego przed wywołaniem metody należy najpierw zakodować adres URL w poprawnym zestawie znaków sendRedirect(). Jest na to specjalna metoda encodeRedirectURL(String url). Użyj tego.

Przykład przekierowania:


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 Metoda getWriter().

A teraz nauczymy się pisać nasz tekst jako treść odpowiedzi. Aby to zrobić, klasa HttpServletResponsema specjalną metodę getWriter(), która zwraca obiekt PrintStream. Gdyby ktoś zapomniał, jest to typ pola o nazwie System.out.

Aby napisać jakiś tekst jako odpowiedź serwletu, potrzebujesz:

  • Pobierz obiekt PrintStream, wywołując metodę response.getWriter().
  • Napisz wszystko, co uważasz za konieczne do obiektu PrintStream (wszystkie dane zostaną zapisane w buforze).
  • Wyślij bufor do użytkownika, wywołując metodę close()w PrintStream.

Napiszmy serwlet, który dodaje dwie liczby ai bzwraca wynik użytkownikowi:



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();
        }
    }
}