request 与 response 对象概述
Web 服务器收到客户端的 HTTP 请求,会针对每一次请求分别创建一个代表请求的 request 对象和一个代表响应的 response 对象。要获取客户机提交过来的数据,只需找 request 对象;要向客户机输出数据,只需找 response 对象。
HttpServletResponse 对象代表服务器的响应,其中封装了向客户端发送数据、发送响应头、发送响应状态码的方法。
向客户端发送数据
response 对象提供了两个方法用于向客户端输出数据:
| 方法 | 说明 |
|---|---|
getOutputStream() | 返回 OutputStream 字节流 |
getWriter() | 返回 PrintWriter 字符流 |
发送响应头与状态码
设置响应头的方法:
addDateHeaderaddHeaderaddIntHeadercontainsHeadersetDateHeadersetHeadersetIntHeader
设置状态码的方法:
setStatus(int sc)
Java 中预定义了常用状态码常量,如 SC_OK、SC_NOT_FOUND 等。
1. 使用 OutputStream 流向客户端输出中文数据
使用 OutputStream 输出中文时,服务器端以哪个码表编码输出,就要控制客户端浏览器以相应的码表打开。例如以 UTF-8 编码输出:
String data = "foxdevelop";
OutputStream outputStream = response.getOutputStream();
response.setHeader("content-type", "text/html;charset=UTF-8");
byte[] dataByteArr = data.getBytes("UTF-8");
outputStream.write(dataByteArr);Code language: JavaScript (javascript)
通过 response.setHeader("content-type", "text/html;charset=UTF-8") 控制浏览器以 UTF-8 编码显示数据。
2. 使用 PrintWriter 流向客户端输出中文数据
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
response.setHeader("content-type", "text/html;charset=UTF-8");
out.write("foxdevelop");Code language: JavaScript (javascript)
注意:在服务器端应以字符串形式输出,否则可能出现无法输出或乱码的问题。例如在输出数字时,需将数字与空字符串拼接(
i + ""),否则PrintWriter.write(int)会将数字当作字符编码输出而非数字本身。
完整示例
package cn.bamn.demo;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private int i;
public TestServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
i++;
response.setHeader("content-type", "text/html;charset=UTF-8");
// response.setStatus(response.SC_NOT_FOUND);
response.getOutputStream().write("foxdevelop".getBytes("UTF-8"));
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}Code language: JavaScript (javascript)
Previous: 配置客户端进行输出缓存
Next: 文件下载