5.1.1 产生响应状态行
HTTP响应消息的响应状态行分为三部分:HTTP版本、状态码和状态信息,如下所示:
HTTP/1.1 200 OK
其中HTTP版本可以是HTTP/1.1或HTTP/1.0,这由Web服务器所支持的HTTP版本决定。状态信息的内容和状态相关,如404状态码所对应的HTTP1.1规范中的状态信息是Not Found。由于HTTP版本一般是基本固定的,而状态信息是随着状态码的变化而变的。因此,在HTTP响应状态行中,只有状态码是经常需要变化的。
HTTP的状态响应码可分为如下五类:
l 100 ~ 199:表示服务端成功接收HTTP请求,但要求客户端继续提交下一次HTTP请求才能完成全部处理过程。
2 200 ~ 299:表示服务端已成功接收HTTP请求,并完成了全部处理过程。
3 300 ~ 399:表示客户端请求的资源已经移动了别的位置,并向客户端提供一个新的地址,一般这个新地址由HTTP响应消息头的Location字段指定。
4 400 ~ 499:表示客户端的请求有错误。
5 500 ~ 599:表示服务端出现错误。
HttpServletResponse接口定义了一些可以修改HTTP状态码的方法,这些方法的描述如下:
1. setStatus方法
setStatus方法可以设置状态码,并生成响应状态行。由于响应状态行中的协议版本和状态信息是由Web服务器设置的,因此,只需设置响应状态码就可以了。setStatus方法的定义如下:
public void setStatus(int sc);
其中sc参数表示响应状态码,该参数值可以直接使用整数形式,也可以使用在HttpServletResponse接口中定义的常量(建议使用这种方式)。如状态码200的常量为HttpServletResponse.SC_OK。
2. sendRedirect方法
虽然setStatus方法可以随意设置响应状态吗,但HttpServletResponse接口还定义了一个sendRedirect方法,该方法可以更方便地将响应状态码设置成302。在300 ~ 399区间内的状态码需要客户端重定向URL(由HTTP响应消息头的Location字段指定的地址)。sendRedirect方法的定义如下:
public void sendRedirect(String location) throws IOException;
通过sendRedirect方法可以将当前的Servlet重定向到其他的Web资源上,这个URL可以是绝对路径(如http://www.csdn.net),也可以是相对路径(如/samples/test.html)。
3. sendError方法
sendError方法用于设置表示错误消息的状态码(也就是400 ~ 599之间的状态码)。而且还可以设置状态消息。sendError方法的定义如下:
public void sendError(int sc) throws IOException;
public void sendError(int sc, String msg) throws IOException;
其中sc参数表示响应状态码(一般是404,但也可以是其他的状态响应码,如500)、msg表示状态消息。