|
% S1 e. N6 ^) h7 Y1 s1 g/ m8 ?
HTTP 请求和 HTTP 响应消息的格式是类似的,结构如下:初始状态行 + 回车换行符(回车+换行)零个或多个标题行+回车换行符一个空白行,即回车换行符一个可选的消息主体,比如文件、查询数据或查询输出
# d+ |, Q% h% a( L6 ?' n8 i 例如,服务器的响应头如下所示:HTTP/1.1 200 OKContent-Type: text/htmlHeader2: ......HeaderN: ...
# ~0 _; y# A* @5 c8 q; i7 P# J0 | (Blank Line)......
( Q+ z. \: f) T( l! b. w 状态行包括 HTTP 版本(在本例中为 HTTP/1.1)、一个状态码(在本例中为 200)和一个对应于状态码的短消息(在本例中为 OK)。 # N5 H3 v7 M8 Y; U: y
以下是可能从 Web 服务器返回的 HTTP 状态码和相关的信息列表:代码消息描述100Continue只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求101Switching Protocols。
* z& q6 O% Z F" Z7 G 服务器切换协议200OK请求成功201Created该请求是完整的,并创建一个新的资源202Accepted该请求被接受处理,但是该处理是不完整的203Non-authoritative Information。 ) I2 O: c" p! R
204No Content205Reset Content206Partial Content300Multiple Choices链接列表用户可以选择一个链接,进入到该位置最多五个地址301Moved Permanently。
# F6 ?8 A9 T. X) r1 U" O, c& Y 所请求的页面已经转移到一个新的 URL302Found所请求的页面已经临时转移到一个新的 URL303See Other所请求的页面可以在另一个不同的 URL 下被找到304Not Modified305
' K6 y! [- A. e1 {( h# f/ N! r% {; _ Use Proxy306Unused在以前的版本中使用该代码现在已不再使用它,但代码仍被保留307Temporary Redirect所请求的页面已经临时转移到一个新的 URL400Bad Request。
! n5 H: G$ D8 d P/ L0 t1 F5 h" l 服务器不理解请求401Unauthorized所请求的页面需要用户名和密码402Payment Required您还不能使用该代码403Forbidden禁止访问所请求的页面404Not Found服务器无法找到所请求的页面。 5 m: P& j& ]" _* S7 b
.405Method Not Allowed在请求中指定的方法是不允许的406Not Acceptable服务器只生成一个不被客户端接受的响应407Proxy Authentication Required。 $ F( _9 F5 x! _' k/ D8 c
在请求送达之前,您必须使用代理服务器的验证408Request Timeout请求需要的时间比服务器能够等待的时间长,超时409Conflict请求因为冲突无法完成410Gone所请求的页面不再可用411 6 B% H+ g) w. f9 N) N F
Length Required"Content-Length" 未定义服务器无法处理客户端发送的不带 Content-Length 的请求信息412Precondition Failed请求中给出的先决条件被服务器评估为 false。 8 `6 b2 Z( q1 p' T g
413Request Entity Too Large服务器不接受该请求,因为请求实体过大414Request-url Too Long服务器不接受该请求,因为 URL 太长当您转换一个 "post" 请求为一个带有长的查询信息的 "get" 请求时发生。
. z5 H5 _3 ]* R. x- z+ W. } 415Unsupported Media Type服务器不接受该请求,因为媒体类型不被支持417Expectation Failed500Internal Server Error未完成的请求服务器遇到了一个意外的情况。 2 s. t$ n) ?9 T1 ^
501Not Implemented未完成的请求服务器不支持所需的功能502Bad Gateway未完成的请求服务器从上游服务器收到无效响应503Service Unavailable未完成的请求服务器暂时超载或死机。
$ S' @; L R6 O6 ~3 S 504Gateway Timeout网关超时505HTTP Version Not Supported服务器不支持"HTTP协议"版本设置 HTTP 状态代码的方法下面的方法可用于在 Servlet 程序中设置 HTTP 状态码。
# Q0 T1 T+ [% @1 e) Q6 R% Z8 } 这些方法通过 HttpServletResponse 对象可用序号方法 & 描述1public void setStatus ( int statusCode )该方法设置一个任意的状态码setStatus 方法接受一个 int(状态码)作为参数。
: o% Z6 t2 i! y( N* y5 S6 R 如果您的反应包含了一个特殊的状态码和文档,请确保在使用 PrintWriter 实际返回任何内容之前调用 setStatus2public void sendRedirect(String url)该方法生成一个 302 响应,连同一个带有新文档 URL 的 Location 头。
8 `( m: J4 z+ w2 W3 B& K 3public void sendError(int code, String message)该方法发送一个状态码(通常为 404),连同一个在 HTML 文档内部自动格式化并发送到客户端的短消息HTTP 状态码实例 5 a6 e6 X, D$ [! V
下面的例子把 407 错误代码发送到客户端浏览器,浏览器会显示 "Need authentication!!!" 消息// 导入必需的 java 库import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;@WebServlet("/showError")// 扩展 HttpServlet 类public class showError extends HttpServlet { [9 X9 X( [; W' R8 ?
// 处理 GET 方法请求的方法
7 s8 n4 ]9 z; {7 B" z, G% u7 P! L public void doGet(HttpServletRequest request,
9 c J# ]/ f9 O! X HttpServletResponse response)/ L9 P5 @ Y6 t6 J! `
throws ServletException, IOException
6 m$ \, ]2 G! `7 l {+ j1 {" W5 @$ B
// 设置错误代码和原因
& V. r& H0 [8 q/ I response.sendError(407, "Need authentication!!!" );- Z) w3 E0 S0 k7 p% D+ v) B
}
4 [. B+ E ~6 A' J! R // 处理 POST 方法请求的方法. `& w6 D3 r) Z8 d$ h
public void doPost(HttpServletRequest request,
7 P' A: ]' z+ @1 a. P& H$ f4 m HttpServletResponse response)
9 u/ d/ I6 e+ q, ~ throws ServletException, IOException {7 c- J! T; K1 q3 U9 @) R! t
doGet(request, response);
, h* ?4 C! ~! M" x' d' X }}。 . b/ K" L1 O/ d' S" r/ \
现在,调用上面的 Servlet 将显示以下结果:HTTP Status 407 - Need authentication!!!type Status reportmessage Need authentication!!!
5 g. V" |, Q5 Y4 \ C5 A description The client must first authenticate itself with the proxy (Need authentication!!!).Apache Tomcat/5.5.29 d+ c/ B4 R0 L- a5 c5 ~
! k$ x2 ], {/ L. l' n% ^
' e7 j8 J+ Q* J+ _4 V
3 `1 \- h) s4 `/ B2 J1 E' u. ~ [2 c$ j Z* ]
|