一、Web服务器在调用service方法之前,都会创建两个对象,分别是HttpServletRequest和HttpServletResponse对象。其中HttpServletRequest用于封装HTTP请求消息,简称request对象,HttpServletResponse用于封装HTTP响应消息,简称response对象
二、HttpServletResponse接口继承于ServletResponse接口,专门用来封装HTTP响应消息。
三、由于HTTP响应消息分为状态行、响应消息头、消息体三部分,因此,在HttpServletResponse接口中定义了向客户端发送响应状态码、响应消息头、响应消息体的方法。
1. 发送状态码相关的方法
当Servlet向客户端回送响应消息时,需要在响应消息中设置状态码。
(1)setStatus(int status)方法
该方法用于设置HTTP响应消息的状态码,并生成响应状态行。**由于响应状态行中的状态描述信息直接与状态码相关,而HTTP版本由服务器确定,因此,只要通过setStatus(int status)方法设置了状态码,即可实现状态行的发送。**需要注意的是,正常情况下,Web服务器会默认产生一个状态码为200的状态行。
(2)setError(int sc)方法
该方法用于发送表示错误信息的状态码,例如,404状态码表示找不到客户端请求的资源。在response对象中,提供了两个重载的sendError(int sc)方法,具体如下:
public void sendError(int code) throws java.io.IOException
public void sendError(int code, String message) throws java.io.IOException
在上面重载的两个方法中,第一个方法只是发送错误信息的状态码,而第二个方法除了发送状态码外,还可以增加一条用于提示说明的文本信息,该文本信息将出现在发送给客户端的正文内容中。
由于响应状态码是一个三位的十进制数,非常难以记忆,为此,在HttpServletResponse接口中,定义了一系列响应状态码常量,如表所示。
方法声明 | 功能描述 |
---|---|
static int SC_OK | 该常量代表状态码200,表示请求成功 |
static int SC_NOT_FOUND | 该常量代表码状态码404,在HTTP1.1规范中的标准状态信息为Not Found,也就是没有找到资源,是最常见的一种状态码 |
static int SC_MOVED_TEMPORARILY | 该常量代表状态码302,表示临时使用其它资源处理当前请求,但是,之后的请求还应该使用原来的地址。(Servlet API 2.4规范中, SC_FOUND常量用来对应状态码302) |
static int SC_INTERNAL_SERVER_ERROR | 该常量代码状态码500,表示服务器内部发生了错误 |
static int SC_HTTP_VERSION_NOT_SUPPORTED | 该常量代码状态码505,表示服务器不支持或拒绝支持请求行中给出的HTTP版本 |
static int SC_BAD_REQUEST | 该常量代表状态码400,表示客户端发送的请求语法有误 |
static int SC_FORBIDDEN | 该常量代表状态码403,表示服务器接收到请求,但拒绝对请求进行处理 |
static int SC_CONFLICT | 该常量代表状态码409,表示请求的资源与当前状态冲突 |
表中列举的一系列状态码常量中,其中SC_OK和SC_NOT_FOUND是Web应用中最常遇见的,因此,建议大家深刻记忆这两个状态码常量。