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” и “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);
// Печатаем HTML в качестве ответа для браузера
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