|
( q. Q d9 h* B) S& ^, g- R( I
HTTP 请求和 HTTP 响应消息的格式是类似的,结构如下:初始状态行 + 回车换行符(回车+换行)零个或多个标题行+回车换行符一个空白行,即回车换行符一个可选的消息主体,比如文件、查询数据或查询输出 1 C- O% i- Q8 I% V* q& p% @
例如,服务器的响应头如下所示:HTTP/1.1 200 OKContent-Type: text/htmlHeader2: ......HeaderN: ...
p3 y( l2 ?) d0 K9 }6 G/ U% D (Blank Line)...... 5 l& a: S. \7 t' x9 p3 }/ R
状态行包括 HTTP 版本(在本例中为 HTTP/1.1)、一个状态码(在本例中为 200)和一个对应于状态码的短消息(在本例中为 OK)。 9 A+ }+ }- ?0 o2 w
以下是可能从 Web 服务器返回的 HTTP 状态码和相关的信息列表:代码消息描述100Continue只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求101Switching Protocols。
' ?! N# x1 f0 w' n2 g/ f2 _2 ~9 Y 服务器切换协议200OK请求成功201Created该请求是完整的,并创建一个新的资源202Accepted该请求被接受处理,但是该处理是不完整的203Non-authoritative Information。 * Z" m) y; ~1 _* U& M/ q1 |
204No Content205Reset Content206Partial Content300Multiple Choices链接列表用户可以选择一个链接,进入到该位置最多五个地址301Moved Permanently。
; s: A- B& V: q+ ~ 所请求的页面已经转移到一个新的 URL302Found所请求的页面已经临时转移到一个新的 URL303See Other所请求的页面可以在另一个不同的 URL 下被找到304Not Modified305
" R1 i$ K1 T6 `# i; I# X& ~, W) @. N Use Proxy306Unused在以前的版本中使用该代码现在已不再使用它,但代码仍被保留307Temporary Redirect所请求的页面已经临时转移到一个新的 URL400Bad Request。
- L5 A- T- R" | C 服务器不理解请求401Unauthorized所请求的页面需要用户名和密码402Payment Required您还不能使用该代码403Forbidden禁止访问所请求的页面404Not Found服务器无法找到所请求的页面。 ! C/ {1 W) p0 ?: O" \
.405Method Not Allowed在请求中指定的方法是不允许的406Not Acceptable服务器只生成一个不被客户端接受的响应407Proxy Authentication Required。 6 S' h. R) x z2 f' B
在请求送达之前,您必须使用代理服务器的验证408Request Timeout请求需要的时间比服务器能够等待的时间长,超时409Conflict请求因为冲突无法完成410Gone所请求的页面不再可用411
' Y3 m( a+ V' p, G4 O# m4 r0 b Length Required"Content-Length" 未定义服务器无法处理客户端发送的不带 Content-Length 的请求信息412Precondition Failed请求中给出的先决条件被服务器评估为 false。 % ~$ n) H: V* m4 M& ]/ b: K$ P2 X
413Request Entity Too Large服务器不接受该请求,因为请求实体过大414Request-url Too Long服务器不接受该请求,因为 URL 太长当您转换一个 "post" 请求为一个带有长的查询信息的 "get" 请求时发生。 ) f: e' L* Y" B( U% V8 H9 f
415Unsupported Media Type服务器不接受该请求,因为媒体类型不被支持417Expectation Failed500Internal Server Error未完成的请求服务器遇到了一个意外的情况。
* _4 B- N4 h' ~/ q7 H2 ], _ 501Not Implemented未完成的请求服务器不支持所需的功能502Bad Gateway未完成的请求服务器从上游服务器收到无效响应503Service Unavailable未完成的请求服务器暂时超载或死机。 f+ L2 j. P; `: K8 G) g9 S3 V
504Gateway Timeout网关超时505HTTP Version Not Supported服务器不支持"HTTP协议"版本设置 HTTP 状态代码的方法下面的方法可用于在 Servlet 程序中设置 HTTP 状态码。 ( g, I$ n0 T& X, m; F
这些方法通过 HttpServletResponse 对象可用序号方法 & 描述1public void setStatus ( int statusCode )该方法设置一个任意的状态码setStatus 方法接受一个 int(状态码)作为参数。 ( m# e1 e! i8 d
如果您的反应包含了一个特殊的状态码和文档,请确保在使用 PrintWriter 实际返回任何内容之前调用 setStatus2public void sendRedirect(String url)该方法生成一个 302 响应,连同一个带有新文档 URL 的 Location 头。 , c! F& v. R4 c- }: C
3public void sendError(int code, String message)该方法发送一个状态码(通常为 404),连同一个在 HTML 文档内部自动格式化并发送到客户端的短消息HTTP 状态码实例 $ j7 M8 p' f5 }/ ^/ q! F V' c$ ^
下面的例子把 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 {
8 _: h! p( }: R // 处理 GET 方法请求的方法
/ {% ?' F8 U* V. h" b E0 Y8 u public void doGet(HttpServletRequest request,
, N( S) |7 C0 N/ D HttpServletResponse response): ]4 P6 K& O' c0 n5 c: P0 R# G
throws ServletException, IOException
- E) U" E; n# z3 o {$ a2 [4 F: Z4 B, ~) L' S3 {
// 设置错误代码和原因
! R8 C7 [% M& c3 I7 X! y* y response.sendError(407, "Need authentication!!!" );
, c& t) e. O" i# X1 b9 i* o }
9 O0 o% h5 e' _5 q6 H // 处理 POST 方法请求的方法
! u# Z- A5 I9 v5 Q- h0 x public void doPost(HttpServletRequest request,4 P, d$ u; Z( X0 l' E
HttpServletResponse response)
- p8 d' x/ t# V; _& @* V$ t4 U0 k n throws ServletException, IOException {
; t$ s: [5 D8 Y8 z; j4 v doGet(request, response); \, ]& |* S4 S4 }8 I
}}。
+ c8 q- @ _" A0 N8 z 现在,调用上面的 Servlet 将显示以下结果:HTTP Status 407 - Need authentication!!!type Status reportmessage Need authentication!!!
& o+ ~/ b. M a7 [) R3 x description The client must first authenticate itself with the proxy (Need authentication!!!).Apache Tomcat/5.5.29
- d$ k+ r9 h9 j" R) X \2 j3 ?* C7 H9 n+ O) c* m" N6 Z
, g' g( J" h1 M( o$ P/ F4 J7 _
1 `. ?9 B0 k6 L
8 u$ n5 _) I p5 B' g% L
|