产生状态响应码
当客户端浏览器请求服务器时,该服务器就会将返回消息封装到HttpServletResponse里进行响应,返回消息中的第一行为状态行:HTTP/1.1 200 OK
。
上面的状态行分为三部分,分别是HTTP版本(HTTP/1.1)、状态响应码(200)以及状态消息(OK),HTTP协议的状态响应码为3位正整数:
- 100-199:表示服务器成功接收请求,但要求客户端继续提交下一次请求才能完成全部处理过程
- 200-299:表示服务器已成功接收请求,并完成了全部处理过程
- 300-399:表示客户端请求的资源已经移到了别的位置,并向客户端提供了一个新的地址,一般这个新地址由HTTP响应消息头的Location字段指定
- 400-499:表示客户端的请求有错误
- 500-599:表示服务端有错误
设置状态响应码有以下几种方法:
- 设置状态响应码setStatus方法
setStatus()方法可以设置HTTP响应消息的任何状态响应码,并生成响应状态行,由于响应状态行中的协议版本和状态消息是由服务端决定的,因此只要设置响应状态码即可:
public void setStatus(int sc);
其中sc表示状态响应码,它可以直接使用整数表示,也可以使用HttpServletRequest中定义的常量,如200的常量为HttpServletRequest.SC_OK
- 302状态响应码的具体应用sendRedirect方法
该状态码可以实现客户端重定向到URL(由HTTP响应消息头的Location字段指定的地址),sendRedirect方法如下:
public void sendRedirect(String location) throws IOException;
通过sendRedirect方法可以将当前的Servlet重定向到其他的URL上,这个URL可以是绝对的,也可以是相对的。
- 400-599状态响应码的具体应用sendError方法
sendError方法用于发送表示错误信息的状态响应码,而且还可以设置状态消息:
public void sendError(int sc) throws IOException;
public void sendError(int sc, String msg) throws IOException;
设置响应消息头
返回信息中状态行下面的内容就是响应消息头,响应消息头由字段和字段值组成,在HttpServletReponse中有很多设置响应消息头的方法,比如addHeader()、setHeader()等等。addHeader()、setHeader()的不同点在于如果name所指的字段名已经存在,setHeader()方法会用value来覆盖旧的字段值,而addHeader()方法会增加一个同名的字段,因为HTTP响应消息头是允许同时存在多个同名的字段的。