3.1 HttpServletResponse類
調用service()
您的 servlet 方法後,Web 容器將根據HttpServletResponse
. 所以如果你想以某種方式影響對客戶端的響應,那麼你應該修改這個對象。
服務器響應由三部分組成:
- 狀態行(例如:200 OK)
- 標頭
- 響應體
而類方法HttpServletResponse
也分為3組?幾乎:
方法 | 描述 | |
---|---|---|
1個 | void setStatus(int sc) |
設置響應狀態代碼。 |
2個 | void sendError(int sc) |
使用指定代碼向客戶端發送錯誤。 |
3個 | void sendError(int sc, String msg) |
向客戶端發送帶有指定代碼的錯誤和消息。 |
4個 | void addHeader(String name, String value) |
將標頭添加到響應標頭列表。 |
5個 | void setHeader(String name, String value) |
更改響應標頭列表中的標頭。 |
6個 | boolean containsHeader(String name) |
檢查標題是否已經存在。 |
7 | void addCookie(Cookie cookie) |
將 Cookie 添加到響應中。 |
8個 | void sendRedirect(String location) |
將客戶端重定向到不同的 URL。 |
9 | String encodeRedirectURL(String url) |
對指定的 URL 進行編碼以在 sendRedirect 方法中使用。 |
10 | String encodeURL(String url) |
對指定的 URL 進行編碼,包括會話 ID。 |
十一 | void setContentType(String type) |
設置結果的 MimeType。 |
12 | void setContentLength(int len) |
設置響應主體的長度。 |
13 | void setCharacterEncoding(String charset) |
設置響應編碼集。 |
14 | void setBufferSize(int size) |
設置響應主體的緩衝區大小。 |
15 | boolean isCommitted() |
檢查緩衝區是否已寫入響應。 |
16 | void flushBuffer() |
將緩衝區的內容寫入響應。 |
17 | void reset() |
重置存儲在緩衝區、標頭和響應代碼中的所有數據。 |
18 | void resetBuffer() |
清除響應緩衝區。 |
這裡的方法非常簡單。但我會在下面給你一些重點。
緩衝區。您的 servlet 的響應被寫入緩衝區,而不是立即發送給用戶。因此,在某個階段(例如,如果發生錯誤),您可以重置(擦除)寫入緩衝區的所有內容。您甚至可以調用 reset() 方法,不僅可以清除緩衝區的內容,還可以清除帶有響應代碼的標頭。
3.2 重定向()
第二個要點是重定向。如果您的 servlet 決定將客戶端重定向到另一個 URL,那麼您需要以某種方式將此 URL 發送到客戶端。這可以使用sendRedirect
.
但是有一個重要的細微差別。URI 可以包含比響應正文中允許的字符範圍更廣的字符。因此,在調用該方法之前,必須先將 URL 編碼為有效的字符集sendRedirect()
。為此有一個特殊的方法encodeRedirectURL(String url)
。用它。
重定向示例:
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()方法
現在我們將學習如何將文本編寫為響應正文。為此,該類有一個返回對象的HttpServletResponse
特殊方法。如果有人忘記了,這是名稱為 的字段類型。getWriter()
PrintStream
System.out
為了將一些文本寫為 servlet 響應,您需要:
- 通過調用 獲取 PrintStream 對象
response.getWriter()
。 - 將您認為必要的任何內容寫入 PrintStream 對象(所有數據都將寫入緩衝區)。
close()
通過調用PrintStream 上的方法將緩衝區發送給用戶。
讓我們編寫一個 servlet,將兩個數字相加a
並將b
結果返回給用戶:
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