3.1 HttpServletResponse osztály

A servlet metódus meghívása után service()a webtároló választ generál az ügyfélnek a HttpServletResponse. Tehát ha valamilyen módon befolyásolni szeretné az ügyfélnek adott választ, akkor módosítania kell ezt az objektumot.

A szerver válasza három részből áll:

  • Állapotsor (például: 200 OK)
  • Fejlécek
  • Választest

És az osztálymetódusokat HttpServletResponseis 3 csoportra osztják? Majdnem:

Mód Leírás
1 void setStatus(int sc) Beállítja a válasz állapotkódját.
2 void sendError(int sc) Hibát küld a kliensnek a megadott kóddal.
3 void sendError(int sc, String msg) Hibaüzenetet küld a megadott kóddal és egy üzenetet a kliensnek.
4 void addHeader(String name, String value) Hozzáad egy fejlécet a válaszfejlécek listájához.
5 void setHeader(String name, String value) Módosítja a fejlécet a válaszfejlécek listájában.
6 boolean containsHeader(String name) Ellenőrzi, hogy a fejléc már létezik-e.
7 void addCookie(Cookie cookie) Cookie-t ad a válaszhoz.
8 void sendRedirect(String location) Átirányítja az ügyfelet egy másik URL-re.
9 String encodeRedirectURL(String url) Kódolja a megadott URL-t a sendRedirect metódusban való használatra.
10 String encodeURL(String url) Kódolja a megadott URL-t, beleértve a munkamenet-azonosítót.
tizenegy void setContentType(String type) Beállítja az eredmény MimeType-ját.
12 void setContentLength(int len) Beállítja a választörzs hosszát.
13 void setCharacterEncoding(String charset) Beállítja a válaszkódolási készletet.
14 void setBufferSize(int size) Beállítja a választörzs pufferméretét.
15 boolean isCommitted() Ellenőrzi, hogy a puffert már beírták-e a válaszba.
16 void flushBuffer() A puffer tartalmát a válaszba írja.
17 void reset() Visszaállítja a pufferben tárolt összes adatot, a fejléceket és a válaszkódokat.
18 void resetBuffer() Törli a válaszpuffert.

A módszerek itt meglehetősen triviálisak. De az alábbiakban bemutatok néhány kiemelést.

Puffer . A szervlet válaszát egy pufferbe írják, és nem küldik el azonnal a felhasználónak. Ezért egy bizonyos szakaszban (ha például hiba történik) visszaállíthat (törölhet) mindent, ami a pufferbe van írva. Akár a reset() metódust is meghívhatja, és nem csak a puffer tartalmát törölheti, hanem a válaszkóddal ellátott fejléceket is.

3.2 átirányítás()

A második fontos pont az átirányítás. Ha a szervlet úgy dönt, hogy átirányítja az ügyfelet egy másik URL-re, akkor valahogy el kell küldenie ezt az URL-t az ügyfélnek. Ezt a sendRedirect.

De van egy fontos árnyalat. Az URI a választörzsben megengedettnél szélesebb karaktertartományt tartalmazhat. Ezért az URL-t először érvényes karakterkészletbe kell kódolni a metódus meghívása előtt sendRedirect(). Erre van egy speciális módszer encodeRedirectURL(String url). Használd.

Átirányítási példa:


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 getWriter() metódus

És most megtanuljuk, hogyan írjuk meg szövegünket választörzsként. Ehhez az osztálynak HttpServletResponsevan egy speciális metódusa getWriter(), amely egy objektumot ad vissza PrintStream. Ha valaki elfelejtette, ez a mező típusa a névvel System.out.

Ha szöveget szeretne írni szervlet válaszként, a következőkre van szüksége:

  • Szerezze be a PrintStream objektumot a response.getWriter().
  • Írjon a PrintStream objektumba, amit szükségesnek tart (minden adat a pufferbe kerül).
  • close()Küldje el a puffert a felhasználónak a PrintStream metódusának meghívásával .

Írjunk egy servletet, amely két számot ad hozzá a, és baz eredményt visszaadja a felhasználónak:



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