Poprzednio pisałem o interfejsach związanych z requestem, przyszła kolej na HttpServletResponse.

Section 1: The Servlet Technology Model

  • Using the HttpServletResponse interface, write code to set an HTTP response header, set the content type of the response, acquire a text stream for the response, acquire a binary stream for the response, redirect an HTTP request to another URL, or add cookies to the response.

Nagłówki

Podobnie jak w przypadku HttpServletRequest interfejs response zawiera cały zestaw metod związanych z obsługą nagłówków:

  • void addHeader(String name, String value) - dodaje do odpowiedzi odpowiedzi nagłówek o zadanej nazwie i wartości.

I w tym przypadku udostępnione są metody, które pomagają w ustawianiu nagłówków określonych typów:

  • void addDateHeader(String name, long date),
  • void addIntHeader(String name, int value).

Poza metodami addHeader w interfejsie znajduje się jeszcze zestaw odpowiadających im metod setHeader:

  • void setHeader(String name, String value),
  • void setDateHeader(String name, long date),
  • void setIntHeader(String name, int value).

Zestawy metod różnią się drobnym szczegółem, otóż wywołanie setHeader ustawia nagłówek (nadpisując ewentualną, istniejącą wartość), natomiast metoda addHeader dodaje nagłówek (umożliwiając wysłanie odpowiedzi zawierającej kilka wartości dla nagłówka, wartości oddzielone są przecinkami).

W interfejsie znajduje się także pomocnicza metoda, sprawdzająca czy nagłówek o podanej nazwie został już dodany do odpowiedzi:

  • boolean containsHeader(String name).

Nagłówki mogą być również ustawiane przy pomocy innych metod “opakowujących” mechanizm nagłówków np. addCookie czy setContentType. Za pomocą tej drugiej metody ustawiany jest typ MIME generowanej odpowiedzi. Dzięki tej informacji przeglądarka obsługująca odpowiedź wie w jaki sposób ma “serwować” użytkownikowi przysłaną odpowiedź.

Niezmierne ważne jest ustawienie nagłówków odpowiedzi przed rozpoczęciem pisania do strumieni wyjściowych. Nie stosowanie się do tej reguły może skutkować błędem.

Strumienie

Z obiektu implementującego inrefejs ServletResponse możemy pobrać strumienie, do których możemy wpisać zawartość odpowiedzi. W zależności której metody użyjemy dostaniemy strumień binarny bądź tekstowy:

  • ServletOutputStream getOutputStream(),
  • PrintWriter getWriter().

Są to standardowe strumienie z pakietu java.io (ServletOutputStream dziedziczy po java.io.OutputStream), pełny zestaw dostępnych metod znajduje się w javadocu (:

Ciasteczka

Podobnie jak w przypadku requesta ciasteczka możemy ustawiać na dwa sposoby:

  • void setHeader(String name, String value) - dodać nagłówek do odpowiedzi (Set-Cookie),
  • void addCookie(Cookie cookie) - dodać obiekt ciasteczka do odpowiedzi.

Przekierowania

Obiekt implementujący interfejs HttpServletResponse ma możliwość przekierowania użytkownika na do innego zasobu. Możliwe jest to dzięki metodzie:

  • void sendRedirect(String location).

Ważne jest aby nie wywoływać tej metody po pisaniu do strumienia odpowiedzi (ani nie pisać do strumienia po wysłaniu przekierowania). Złamanie tej zasady doprowadzi do otrzymania wyjątku IllegalStateException.

Podobne posty