服务器响应的生成:HTTP状态代码

前面已经看到,来自浏览器的请求,由一个HTTP命令(GET或POST),0或多个请求报头,一个空行以及一些查询数据(POST请求)组成:

GET /servlet/SomeName HTTP/1.1
Host: ...
Header2: ...
...
HeaderN:
(Blank Line空行)

......(查询数据)

web服务器对请求的响应,一般由一个状态行,一些响应报头,一个空行和相应的文档构成,典型的响应形式如下:

HTTP/1.1 200 OK       (状态行
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line  空行)
<!DOCTYPE ...>//输出内容
<HTML>
<HEAD>...</HEAD>
<BODY>
...
</BODY></HTML>

状态行由HTTP版本,一个状态代码(整数)以及一段对应的简短消息组成

通过操作状态行和响应报头,servlet可以执行多种任务,例如,它们可以将用户转送到其他网站;标明附加的文档的类型;告知用户访问该文档需要密码;等等



6.1  状态代码的指定


1)设置任意状态代码setStatus

使用HttpServletResponse的setStatus方法。setStatus方法以整数为参数,为了可读性,一般使用HttpServletResponse中定义的常量。这些常量全部以SC为前缀,常量的名字对应于标准的http消息。


2)设置302和404的状态代码sendRedirect和sendError

HttpServletResponse专用两种常见的状态代码提供了快捷方法,

public void sendRedirect(String url)

状态代码302命令浏览器连接到新的位置,此方法生成302响应

public void sendError(int code, String message)

状态代码404用于服务器没有找到文档的情况此方法发送状态代码int code(一般为404)以及一小段消息String message




6.2 HTTP1.1 状态代码


了解和熟悉一些最重要的状态代码。

100–199
信息性的,标示客户应才去的其他动作
200–299
标示请求成功
300–399
用于那些已移走的文件,指出新的地址
400–499
表明由客户引发的错误
500–599
表明由服务器引发的错误


HttpServletResponse中一般用常量来代表状态码,常量名可以看出状态的涵义,例如使用response.setStatus(response.SC_NO_CONTENT)而不是response.setStatus(204)。


一些常见的状态代码的含义,略,




6.3  示例:将用户重定向到相关的页面


下列清单读取报头User-Agent的内容,根据不同的浏览器类型,将用户转到不同的页面。

package coreservlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class WrongDestination extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String userAgent
= request.getHeader("User-Agent");
if ((userAgent != null) &&
(userAgent.indexOf(
"MSIE") != -1)) {//IE用户的User-Agent报头的特征
response.sendRedirect("http://home.netscape.com");//重定向
} else {
//其他浏览器用户转到另一个页面
response.sendRedirect("http://www.microsoft.com");
}
}
}




6.4  示例:各种搜索引擎的一个前端(302和404状态代码一起使用的例子)  略

这一章主要要理解服务器对请求的响应,响应的格式,状态代码及其含义,怎么使用,,,这些问题

posted @ 2011-04-11 21:48  jinmengzhe  阅读(1463)  评论(0编辑  收藏  举报