一 HTTP响应的格式
web服务器对客户端的响应一般包含:一个状态行,一些响应报头,一个空行和相应的文档构成。
1,状态行:
状态行由HTTP版本,一个状态代码以及一段对应状态代码的简短消息组成,表示请求是否被理解或被满足。HTTP版本由服务器决定。状态码一般由系统自动设置为200。也可以用Servlet设置状态码。消息巍峨自定义。
2,响应报。
3,空行
4,文档
二 如何设置状态代码
在向客户程序发送任何文档内容之前调用方法设置状态代码。
使用HttpServletResponse接口的setStatus,sedRedirect或sendError方法设置状态码。
状态代码由3位数字组成,第一个数字定义了响应的类别,后面两位数字没有具体的分类。
在servlet中使用HttpServletResponse中定义的常量来引用状态代码。
1 设置任意状态代码:setStatus(int)方法
在用PrintWriter实际返回如何内容之前调用setstatus方法。
参数可以为int类型状态代码,也可以为HttpServletResponse中定义的常量。
2 设置302和404状态代码:sendRedirect(String url)和sendError(int code,String msg)方法。 二者抛出IOException。
状态代码302命令浏览器连接到新的url。sendRedirect方法生成302响应及Location报头,给出新的url放入Location报头之前,系统自动将相对url转换为绝对url。
状态代码404用于服务器没有找到文档的情况。sendError方法发送状态代码及小段简短信息,信息被自动安排在HTML文档中发送给用户。
三 状态代码的作用
- 1,HTTP1.1中可用的特定状态码
- 100-199:信息性的标示用户应该采取的其他动作。
- 200-299:表示请求成功。
- 300-399:用于那些已经移走的文件,常常包括Location报头,指出新的地址。
- 400-499:表明客户引发的错误。
- 500-599:由服务器引发的错误。
- 2,Servlet与客户端交互使用的重要状态代码。
- 100(Continue,继续):表示客户端程序在询问是否可以在随后的请求中向服务器发送附加文档。服务器使用100(SC_CONTINUE)表示继续,417(SC_EXPECTATION_FAILED)表示不接受该附件。
- 200(OK, 一切正常):200(SC_OK)表示一切正常。
- 202(Accepted,已经接受):202(SC_ACCEPTED)请求已经接受,但处理没有完成。
- 204(No Content,没有新文档):204(SC_NO_CONTENT)由于没有新的文档供显示,继续显示之前的文档。
- 205(Rest Content,重置内容):205(SC_REST_CONTENT)表示没有新的文档,但浏览器应该重置文档视图。用来指示浏览器清除表单的字段。
- 301(Moved Permanently,被永久移动):301(SC_MOVED_PERMANENTLY)表示所请求的文件已经被移动到别处。文档的新URL在Location响应报头中给出,浏览器应该重新连接到新URL。
- 302(Found,找到):302(SC_MOVED_PERMANENTLY)。301和302等同,区别在302将Location报头中给出的URL看作是非永久性的临时替代。浏览器自动重新连接到Location响应报头中给出的URL。
- 304(Not Modified,未发生更改):304(SC_NOT_MODIFIED)表示缓存的版本是否为最新。是的话客户端就应该使用它,否则服务器应该返回所请求的文档,设置正常状态码。
- Servlet不应该直接使用这个状态代码,应该实现getLastModified方法,由默认的Service方法来处理。
- 307和303区别:接收到303响应则继续进行get和post请求的重定向,接受到307,对于get请求继续重定向,而post则不再继续。
- 400:表明客户请求中含有语法错误。
- 401:表客户程序试图访问密码保护的页面。
- 403:表示服务器拒绝提供相关的资源,不管是否授权。
- 404:(SC_NOT_FOUND)没有如何资源供访问。
- 405:这个资源不容许使用请求方法访问。
- 415:服务器不知道如何处理请求附加文件类型。
- 417:回应100,告诉浏览器不接受该附件。
- 500:表示服务器运行混乱。由CGI程序或Servlet崩溃或返回不正确格式的报头引起。
- 501:表示服务器不支持该客户程序发送的命令。
- 503:由于维护或超负荷工作引起服务器不能做出响应。
- 505:表示服务器不支持请求行中给出的HTTP版本。
四 重新连接,重定位,刷新的区别:
重新连接不显示任何中间页面。
刷新的时候浏览器会临时显示一个中间页面。
重定位由另外的Servlet或网页生成结果,而非该ServletB本身。
重定位作用:
预先知道目的地,可以验证相关数据后再转送到相关目的地。 通过自己的网站公布用户需要访问的网站链接,跟踪用户的行为,统计访问等。得到相关信息后,再将用户重定向到实际需要访问的网站。
五 进行重新定位和跳转到错误页面
使用sendRedirect(String url)方法向浏览器发送302状态代码,浏览器自动重新连接到Location响应报头中sendRedirect方法给出的URL,重新定位到相关页面。
使用sendError(response.SC_NOT_FOUND,String msg)方法设置输出的错误提示信息。
六 根据浏览器的不同将用户重新定位到相关页面的Servlet。
获取User-Agent请求报头区分不同的浏览器类型,使用sendRedirect(String url)方法向浏览器发送302状态代码,浏览器自动重新连接到Location响应报头中sendRedirect方法给出的URL,重新定位到相关页面。