一、HttpServletResponse类的作用
HttpServletResponse
类和 HttpServletRequest
类一样。每次请求进来,Tomcat 服务器都会创建一个 Response
对象传 递给 Servlet 程序去使用。HttpServletRequest
表示请求过来的信息,HttpServletResponse
表示所有响应的信息, 如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse
对象来进行设置。
二、两个输出流
- 字节流:
getOutputStream()
常用于下载(传递二进制数据) - 字符流:
getWriter()
常用于回传字符串(常用)
两个流同时只能使用一个,使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。
三、如何往客户端回传数据
public class ResponseIOServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//往客户端回传字符串数据
PrintWriter writer = response.getWriter();
writer.write("response!");
}
}
解决响应中文乱码
public class ResponseIOServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取当前服务器字符集
System.out.println(response.getCharacterEncoding()); //默认IOS-8859-1
//设置服务器字符集为UTF-8
response.setCharacterEncoding("UTF-8");
//通过响应头,设置浏览器也使用UTF-8字符集
response.setHeader("Content-Type","text/html; charset=UTF-8");
//往客户端回传字符串数据
PrintWriter writer = response.getWriter();
writer.write("中文字符");
// 它会同时设置服务器和客户端都使用 UTF-8 字符集,还设置了响应头
// 此方法一定要在获取流对象之前调用才有效
resp.setContentType("text/html; charset=UTF-8");
}
}
四、请求重定向
请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端新的请求地址。客户端再次发送新的请求到新地址(因为之前的地址可能已经被废弃)。
Response1
类
public class Response1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("response1");
//设置响应码302,表示重定向
response.setStatus(302);
//设置响应头,指明重定向地址
response.setHeader("Location","http://localhost:8080/07_Servlet/response2");
//resp.sendRedirect("http://localhost:8080");
}
}
Response2
类
public class Response2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("response2");
}
}