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ă HttpServletResponsesunt, 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 HttpServletResponseare 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 breturnează 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();
        }
    }
}