一个web服务器也被称为一个http服务器,因为它使用http协议和它的客户进行通讯,而这些客户通常是浏览器。 一个基于java的web服务器使用了两个重要的类:java.net.socket和java.net.serversocket,并且是通过http消息进行通讯的。本文开头将讨论http和这两个类,后面,将解释一个简单web服务器应用程序的工作机制。
超文本传输协议 (http)
http协议允许服务器和客户机通过inte.net接收和发送数据。它是个请求和回应协议----客户机发送请求,服务器对请求给出回应。http 使用可靠的tcp 连接,默认tcp端口是80。http的第一版是http/0.9,随后被 http/1.0所取代。当前最新的版本是http/1.1,这个在rpc2616规范文档中给出了定义。
这一章节简单讲叙了http 1.1, 对于你理解web服务器应用程序发送的消息还是足够的。如果你很感兴趣,可以参考rfc 2616文档。
使用http,客户端通过建立一个连接和发送一个http请求来初始化事务会话,服务器联系客户端或者回应一个callback连接给客户端。 它们都可以中断连接。比如,在使用web浏览器时,你可以点击浏览器上的stop按钮来停止文件下载进程,就有效的关闭了和这个web服务器的http连接。
http 请求(requests)
一个http request包含三个部分:
方法,url,协议/版本(method-uri-protocol/version)
请求包头request headers
实体包(entity body)
下面给出一个http请求的范例:
post /servlet/default.jsp http/1.1
accept: text/plain; text/html
accept-language: en-gb
connection: keep-alive
host: localhost
referer: http://localhost/ch8/senddetails.htm
user-agent: mozilla/4.0 (compatible; msie 4.01; windows 98)
content-length: 33
content-type: application/x-www-form-urlencoded
accept-encoding: gzip, deflate
lastname=franks&firstname=michael
请求的第一行就是method-uri-protocol/version。
post /servlet/default.jsp http/1.1
请求的是post方法,后面的 /servlet/default.jsp 表示一个url地址,http/1.1表示协议的版本。
http标准规范定义了一些请求方法,用来给每个http请求所使用。http 1.1支持7中请求方法: get, post, head, options, put, delete, 和 trace。 get和post 在inte.net的应用程序中是使用最普遍的两个方法。
uri完整的指明了一个inte.net资源。一个uri通常是相对于服务器的根目录被解释的。 因此,它总是使用符号(/)开头。一个url实际是一个uri类型。协议版本表示当前正在使用的http协议的版本。
请求包头(request header)包含了一些有用的客户机环境的信息和请求的实体(entity body)信息。比如,它可以包含浏览器使用的语言和实体的长度等等。每个请求包头都被crlf(回车换行)序列所分离。
在先前的http请求中,实体是下面简单的一行:
lastname=franks&firstname=michael
在一个典型的http请求中,这个实体能够很容易地变得更长。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器