3.1 HttpServletResponse-klass
Efter att ha anropat service()
din servletmetod kommer webbbehållaren att generera ett svar till klienten baserat på HttpServletResponse
. Så om du på något sätt vill påverka svaret till klienten, bör du ändra detta objekt.
Serversvaret består av tre delar:
- Statusrad (till exempel: 200 OK)
- Rubriker
- Svarskropp
Och klassmetoder HttpServletResponse
är också indelade i 3 grupper? Nästan:
Metoder | Beskrivning | |
---|---|---|
1 | void setStatus(int sc) |
Ställer in svarsstatuskoden. |
2 | void sendError(int sc) |
Skickar ett felmeddelande till klienten med den angivna koden. |
3 | void sendError(int sc, String msg) |
Skickar ett felmeddelande med angiven kod och ett meddelande till klienten. |
4 | void addHeader(String name, String value) |
Lägger till en rubrik i listan med svarsrubriker. |
5 | void setHeader(String name, String value) |
Ändrar rubriken i listan med svarsrubriker. |
6 | boolean containsHeader(String name) |
Kontrollerar om rubriken redan finns. |
7 | void addCookie(Cookie cookie) |
Lägger till en cookie i svaret. |
8 | void sendRedirect(String location) |
Omdirigerar klienten till en annan URL. |
9 | String encodeRedirectURL(String url) |
Kodar den angivna URL:en för användning i sendRedirect-metoden. |
10 | String encodeURL(String url) |
Kodar den angivna webbadressen, inklusive sessions-ID. |
elva | void setContentType(String type) |
Ställer in MimeType för resultatet. |
12 | void setContentLength(int len) |
Ställer in längden på svarskroppen. |
13 | void setCharacterEncoding(String charset) |
Ställer in svarskodningsuppsättningen. |
14 | void setBufferSize(int size) |
Ställer in buffertstorleken för svarskroppen. |
15 | boolean isCommitted() |
Kontrollerar om bufferten redan har skrivits till svaret. |
16 | void flushBuffer() |
Skriver innehållet i bufferten till svaret. |
17 | void reset() |
Återställer all data som är lagrad i bufferten, rubriker och svarskoder. |
18 | void resetBuffer() |
Rensar svarsbufferten. |
Metoderna här är ganska triviala. Men jag ska ge dig några höjdpunkter nedan.
Buffert . Din servlets svar skrivs till en buffert, skickas inte omedelbart till användaren. Därför kan du i något skede (om t.ex. ett fel uppstår) återställa (radera) allt som skrivs till bufferten. Du kan till och med anropa metoden reset() och radera inte bara innehållet i bufferten utan även rubrikerna med svarskoden.
3.2 omdirigering()
Den andra viktiga punkten är omdirigeringen. Om din servlet bestämmer sig för att omdirigera klienten till en annan URL, måste du på något sätt skicka denna URL till klienten. Detta kan göras med hjälp av sendRedirect
.
Men det finns en viktig nyans. URI:n kan innehålla ett större antal tecken än vad som är tillåtet i svarstexten. Därför måste URL:en först kodas till en giltig teckenuppsättning innan metoden anropas sendRedirect()
. Det finns en speciell metod för detta encodeRedirectURL(String url)
. Använd den.
Omdirigeringsexempel:
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()-metoden
Och nu ska vi lära oss hur vi skriver vår text som en svarskropp. För att göra detta har klassen HttpServletResponse
en speciell metod getWriter()
som returnerar ett objekt PrintStream
. Om någon har glömt, är det här typen av fält med namnet System.out
.
För att skriva lite text som ett servletsvar behöver du:
- Hämta PrintStream-objektet genom att anropa
response.getWriter()
. - Skriv vad du tycker är nödvändigt till PrintStream-objektet (all data kommer att skrivas till bufferten).
- Skicka bufferten till användaren genom att anropa metoden
close()
på PrintStream.
Låt oss skriva en servlet som lägger till två siffror a
och b
returnerar resultatet till användaren:
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();
}
}
}