http指定状态码
Http状态代码
1、指定状态码:
setStatus
HttpServletResponse的setStatus方法。如果响应的状态代码比较特殊,并且伴有相关的文档内容,那么一定要在用PrintWriter实际返回任何内容之前调用setStatus,因为没有明确规范规定servlet一定要一个空行、因此,必须在使用PrintWriter之前设置状态代码,或者在设置状态代码时,仔细核实缓冲区尚未被清楚,内容尚未实际发往浏览器。
setStatus最好不要直接设置明确的数字,而使用HttpServletResponse中定义的常量。
sendRedirect和sendError
HttpServletResponse专为两种常见的情况提供了快捷方法。两个方法都抛出IOException。
public void sendRedirect(String url)
状态码302命令连接到新的位置。sendRedirect生成302响应以及Location报头
public void sendEoor(int code, String message)
状态码404用于服务器没有找到文档的情况。sendError方法发送状态代码以及一段简短的消息,这段消息被自动安排到HTML中发送给客户。
2、状态码
100-199:10~199间的代码都是信息性的,标示客户应该采取的其他动作
200-299:200~299间的值表示成功
300-399: 300~399间的值用于那些已经移走的文件,常常包括Location报头,指出新的地址
400-499: 400~499间的值标示由客户引发的错误
500-599:500~599表示由服务器引发的错误
常见码:
100:Continue继续
200:OK,一切正常
202:Accepted,已接受
204:No Content,没有新文档
205:Reset Content,重置内容
301:Moved Permanently,被永久移动
302:Found,找到
有一个专门的方法,sendRedirect,用response.setStatus(),以及response.setHeader("Location",url)相比,使用response.sendRedirect(url)有许多优点。首先,他更简短,使用也更容易。其次,使用sendRedirect(url)时,servlet自动构建含有链接的页面,引导那些不能自动跟重定向信息的老版本浏览器。最后sendRedirect还可以处理相对URL,自动将它们转换成对应的绝对URL。
技术上一般认为仅当最初的请求为GET时,浏览器才应自动执行重定向。
303:See Other,检查其他文档
304:Not Modified,未发生更改
307:Temporary Redirect,临时重定向
400:Bad Request,错误请求
401:Unauthorized,未授权
403:Forbidden,资源不可用
404:Not Found,未找到
405:Method Not Allowed,方法不允许
415:Unsupported Media type不支持的媒体类型
417:Expectation Failed,期望不能满足
500:Internal Server Error,服务器内部错误
501:Not Implemented,未实现
503:Service Unavailable,服务不可用
505:Http Version Not Supported,不支持的HTTP版本
3、将用户重定向到浏览器相关页面的servlet
Http响应报头的生成:
最通用的方法是HttpServletResponse.setHeader方法
setHeader(String headerName, String headerValue)
除了通用的setHeader方法之外,HttpServletResponse还有两个专门的方法,用来设置含有日期和整数的报头:
setDateHeader(String header, long milliseconds)
setIntHeader(String header, int headerValue)
HTTP允许相同的报头多次出现,有时候我们希望加入新的报头,而非替换已有的同名报头。可以使用containsHeader进行检查。
HttpServletResponse还提供许多方便的方法来指定常用的报头:
setContentType
setContentLength
addCookie
sendRedirect
理解Http响应报头:
allow:指定服务器支持的请求方法
cache-control:这个报头告诉浏览器或其他客户,什么环境可以安全地缓存文档
public 文档可以缓存