3.1 Clasa HttpServletResponse
După apelarea service()
metodei dvs. de servlet, containerul web va genera un răspuns către client pe baza HttpServletResponse
. Deci, dacă doriți să influențați cumva răspunsul către client, atunci ar trebui să modificați acest obiect.
Răspunsul serverului constă din trei părți:
- Linie de stare (de exemplu: 200 OK)
- Anteturi
- Corpul de răspuns
Și metodele de clasă HttpServletResponse
sunt, de asemenea, împărțite în 3 grupuri? Aproape:
Metode | Descriere | |
---|---|---|
1 | void setStatus(int sc) |
Setează codul de stare a răspunsului. |
2 | void sendError(int sc) |
Trimite o eroare clientului cu codul specificat. |
3 | void sendError(int sc, String msg) |
Trimite o eroare cu codul specificat și un mesaj către client. |
4 | void addHeader(String name, String value) |
Adaugă un antet la lista de anteturi de răspuns. |
5 | void setHeader(String name, String value) |
Schimbă antetul din lista de anteturi de răspuns. |
6 | boolean containsHeader(String name) |
Verifică dacă antetul există deja. |
7 | void addCookie(Cookie cookie) |
Adaugă un cookie la răspuns. |
8 | void sendRedirect(String location) |
Redirecționează clientul către o adresă URL diferită. |
9 | String encodeRedirectURL(String url) |
Codifică adresa URL specificată pentru a fi utilizată în metoda sendRedirect. |
10 | String encodeURL(String url) |
Codifică adresa URL specificată, inclusiv ID-ul sesiunii. |
unsprezece | void setContentType(String type) |
Setează MimeType al rezultatului. |
12 | void setContentLength(int len) |
Setează lungimea corpului răspunsului. |
13 | void setCharacterEncoding(String charset) |
Setează setul de codificare a răspunsului. |
14 | void setBufferSize(int size) |
Setează dimensiunea tamponului pentru corpul răspunsului. |
15 | boolean isCommitted() |
Verifică dacă tamponul a fost deja scris în răspuns. |
16 | void flushBuffer() |
Scrie conținutul buffer-ului în răspuns. |
17 | void reset() |
Resetează toate datele care sunt stocate în buffer, anteturi și codurile de răspuns. |
18 | void resetBuffer() |
Șterge tamponul de răspuns. |
Metodele de aici sunt destul de banale. Dar vă voi oferi mai jos câteva puncte importante.
tampon . Răspunsul servlet-ului dumneavoastră este scris într-un buffer, nu trimis imediat utilizatorului. Prin urmare, la un moment dat (dacă, de exemplu, apare o eroare), puteți reseta (șterge) tot ceea ce este scris în buffer. Puteți chiar să apelați metoda reset() și să ștergeți nu numai conținutul buffer-ului, ci și anteturile cu codul de răspuns.
3.2 redirecționare()
Al doilea punct important este redirecționarea. Dacă servletul dvs. decide să redirecționeze clientul către o altă adresă URL, atunci trebuie să trimiteți cumva această adresă URL către client. Acest lucru se poate face folosind sendRedirect
.
Dar există o nuanță importantă. URI-ul poate conține o gamă mai largă de caractere decât cea permisă în corpul răspunsului. Prin urmare, adresa URL trebuie mai întâi codificată într-un set de caractere valid înainte de a apela metoda sendRedirect()
. Există o metodă specială pentru aceasta encodeRedirectURL(String url)
. Foloseste-l.
Exemplu de redirecționare:
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().
Și acum vom învăța cum să scriem textul nostru ca corp de răspuns. Pentru a face acest lucru, clasa HttpServletResponse
are o metodă specială getWriter()
care returnează un obiect PrintStream
. Dacă cineva a uitat, acesta este tipul de câmp cu numele System.out
.
Pentru a scrie un text ca răspuns la servlet, aveți nevoie de:
- Obțineți obiectul PrintStream apelând fișierul
response.getWriter()
. - Scrieți orice credeți că este necesar obiectului PrintStream (toate datele vor fi scrise în buffer).
- Trimiteți buffer-ul utilizatorului apelând metoda
close()
pe PrintStream.
Să scriem un servlet care adaugă două numere a
și b
returnează rezultatul utilizatorului:
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();
}
}
}