Javaweb Servlet核心接口学习记录(4)—HttpServletResponse接口
HttpServletResponse 接口继承自 ServletResponse 接口,主要用于封装 HTTP 响应消息。由于 HTTP 响应消息分为状态行、响应消息头、消息体三部分。因此,在 HttpServletResponse 接口中定义了向客户端发送响应状态码、响应消息头、响应消息体的方法。
javax.servlet.http.HttpServletResponse 接口的定义为 :
public interface HttpServletResponse extends
在 Servlet API 中, ServletResponse 接口被定义为用于创建响应消息,ServletResponse 对象由 Servlet 容器在用户每次请求 Servlet 时创建并传入Servlet 的 service() 方法中。 HttpServletResponse 接口继承自ServletResponse 接口,是专用于 HTTP 协议的子接口,用于封装 HTTP 响应消息。在 HttpServlet 类的 service() 方法中,传入的 ServletResponse 对象被强制转换为 HttpServletResponse 对象来进行 HTTP 响应信息的处理 。
1.HTTP 协议响应报文
一个响应报文信息格式样例:
2.设置响应状态
HttpServletResponse 接口提供了如下设置状态码和生成响应状态行的方法:
方法 | 方法描述 |
---|---|
setStatus(int sc) | 以指定的状态码将响应返回给客户端 |
setError(int sc) | 使用指定的状态码向客户端返回一个错误响应 |
sendError(int sc,String msg) | 使用指定的状态码和状态描述向客户端返回一个错误响应 |
sendRedirect(String location) | 请求的重定向,会设定响应Location报头以及改变状态码 |
演示:
通过设置资源暂时转移状态码和 location 响应头,实现sendRedirect() 方法的重定向功能:
创建SetStatusServlet
package com;
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;
/**
* Servlet implementation class SetStatusServlet
*/
@WebServlet("/SetStatusServlet")
public class SetStatusServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SetStatusServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.sendError(406, "错误信息");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletEx