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 HttpServletResponse
są 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=Naucz się googlować!";
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 HttpServletResponse
ma 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 a
i b
zwraca wynik użytkownikowi:
public class CalculatorServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
// Pobieranie parametru “a” и “b” od prośby
String a = request.getParameter("a");
String b = request.getParameter("b");
try {
// Konwertuj łańcuchy na liczby i obliczaj sumę
int sum = Integer.parseInt(a) + Integer.parseInt(b);
// Печатаем HTML в качестве ответа для браузера
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();
}
}
}
GO TO FULL VERSION