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 HttpServletResponse
is 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 HttpServletResponse
van 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 b
az 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();
}
}
}
GO TO FULL VERSION