|
. o) x3 D. l2 d5 _2 w
HTTP 请求和 HTTP 响应消息的格式是类似的,结构如下:初始状态行 + 回车换行符(回车+换行)零个或多个标题行+回车换行符一个空白行,即回车换行符一个可选的消息主体,比如文件、查询数据或查询输出 6 s0 u# d2 y6 F/ s
例如,服务器的响应头如下所示:HTTP/1.1 200 OKContent-Type: text/htmlHeader2: ......HeaderN: ...
& u% [) d6 K n- p (Blank Line)...... 4 N$ B$ G( A3 b( D8 R
状态行包括 HTTP 版本(在本例中为 HTTP/1.1)、一个状态码(在本例中为 200)和一个对应于状态码的短消息(在本例中为 OK)。 ) l% j- b$ k. z9 R; n
以下是可能从 Web 服务器返回的 HTTP 状态码和相关的信息列表:代码消息描述100Continue只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求101Switching Protocols。 ; k- ]5 D# c2 P' a% p9 g. L2 O
服务器切换协议200OK请求成功201Created该请求是完整的,并创建一个新的资源202Accepted该请求被接受处理,但是该处理是不完整的203Non-authoritative Information。
; m4 E7 b b& s# T5 m- d2 G 204No Content205Reset Content206Partial Content300Multiple Choices链接列表用户可以选择一个链接,进入到该位置最多五个地址301Moved Permanently。 4 A" H5 Z: m9 r m+ P3 w
所请求的页面已经转移到一个新的 URL302Found所请求的页面已经临时转移到一个新的 URL303See Other所请求的页面可以在另一个不同的 URL 下被找到304Not Modified305 5 ^0 k, ?8 u$ ~
Use Proxy306Unused在以前的版本中使用该代码现在已不再使用它,但代码仍被保留307Temporary Redirect所请求的页面已经临时转移到一个新的 URL400Bad Request。 % F4 h4 N( b, |; q. S8 V) L6 e
服务器不理解请求401Unauthorized所请求的页面需要用户名和密码402Payment Required您还不能使用该代码403Forbidden禁止访问所请求的页面404Not Found服务器无法找到所请求的页面。
! m' G9 ? @+ \) {# A .405Method Not Allowed在请求中指定的方法是不允许的406Not Acceptable服务器只生成一个不被客户端接受的响应407Proxy Authentication Required。 : }% @+ A- M7 n) R& W( j. W
在请求送达之前,您必须使用代理服务器的验证408Request Timeout请求需要的时间比服务器能够等待的时间长,超时409Conflict请求因为冲突无法完成410Gone所请求的页面不再可用411
9 D @, t2 O0 h6 X. i8 O Length Required"Content-Length" 未定义服务器无法处理客户端发送的不带 Content-Length 的请求信息412Precondition Failed请求中给出的先决条件被服务器评估为 false。
+ e6 n9 W7 X! H7 [9 C/ V 413Request Entity Too Large服务器不接受该请求,因为请求实体过大414Request-url Too Long服务器不接受该请求,因为 URL 太长当您转换一个 "post" 请求为一个带有长的查询信息的 "get" 请求时发生。
# N' V* u; S9 p6 C% X1 d# X 415Unsupported Media Type服务器不接受该请求,因为媒体类型不被支持417Expectation Failed500Internal Server Error未完成的请求服务器遇到了一个意外的情况。 & x4 a3 {! O; O
501Not Implemented未完成的请求服务器不支持所需的功能502Bad Gateway未完成的请求服务器从上游服务器收到无效响应503Service Unavailable未完成的请求服务器暂时超载或死机。 9 s/ V5 | I8 v' v" d, T' {# g
504Gateway Timeout网关超时505HTTP Version Not Supported服务器不支持"HTTP协议"版本设置 HTTP 状态代码的方法下面的方法可用于在 Servlet 程序中设置 HTTP 状态码。
/ p! M9 N6 U( x W$ r) [5 t s 这些方法通过 HttpServletResponse 对象可用序号方法 & 描述1public void setStatus ( int statusCode )该方法设置一个任意的状态码setStatus 方法接受一个 int(状态码)作为参数。
+ B# t/ |3 Q. y- R 如果您的反应包含了一个特殊的状态码和文档,请确保在使用 PrintWriter 实际返回任何内容之前调用 setStatus2public void sendRedirect(String url)该方法生成一个 302 响应,连同一个带有新文档 URL 的 Location 头。 - T1 g& `# x2 j8 U, B; i* o8 { F
3public void sendError(int code, String message)该方法发送一个状态码(通常为 404),连同一个在 HTML 文档内部自动格式化并发送到客户端的短消息HTTP 状态码实例 3 u, G( g$ v1 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 {. j( d! A+ L# {5 O
// 处理 GET 方法请求的方法
3 U8 D$ }3 c# d! U9 z5 _ public void doGet(HttpServletRequest request,
" t1 K* r. [* J8 S& d HttpServletResponse response); U1 A6 p( K& q) J- Y0 O$ m% y, W- D
throws ServletException, IOException
6 ?7 N4 Y5 d' s' l {3 S" Z3 \& D4 X4 V9 G
// 设置错误代码和原因
1 r1 n" J" d7 p6 g& ?: }7 F$ `7 p: o response.sendError(407, "Need authentication!!!" );6 l. o3 }; `2 q( |
}7 F9 }7 y9 N( @. s+ C/ Z
// 处理 POST 方法请求的方法
( W( \& C! [! d, I! Y$ R) a public void doPost(HttpServletRequest request,
5 N9 ?5 ?; ]" ?$ [5 z H HttpServletResponse response)
) a" l$ O- f5 q A$ t throws ServletException, IOException {& S# [& f4 d1 |5 Y8 Z
doGet(request, response);" h/ V* ]4 V/ u' Y
}}。
1 j' M2 V( k S" s& P4 O1 T 现在,调用上面的 Servlet 将显示以下结果:HTTP Status 407 - Need authentication!!!type Status reportmessage Need authentication!!!
, B+ z/ z+ w ~+ W0 }7 J description The client must first authenticate itself with the proxy (Need authentication!!!).Apache Tomcat/5.5.29 ' W5 c! q3 }# x8 V1 h9 R6 K6 o
- g# b% G r* K/ R# I0 `* }+ ] R
9 {% L# {, ~/ ^5 J, t
0 m- J5 k" o0 }$ _ \$ O& r& D8 r9 B" F' g! S7 U3 Y( m
|