基于JAVA的WEB服务器工作机制(1)

原创 2004年01月20日 21:04:00

基于JAVA的WEB服务器工作机制(1)

一个WEB服务器也被称为一个HTTP服务器,因为它使用HTTP协议和它的客户进行通讯,而这些客户通常是浏览器。 一个基于JAVA的WEB服务器使用了两个重要的类:java.net.Socket和java.net.ServerSocket,并且是通过HTTP消息进行通讯的。本文开头将讨论HTTP和这两个类,后面,将解释一个简单WEB服务器应用程序的工作机制。

超文本传输协议 (HTTP)

HTTP协议允许服务器和客户机通过INTERNET接收和发送数据。它是个请求和回应协议----客户机发送请求,服务器对请求给出回应。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请求的范例:

请求的第一行就是method-URI-Protocol/Version。

请求的是POST方法,后面的 /servlet/default.jsp 表示一个URL地址,HTTP/1.1表示协议的版本。

HTTP标准规范定义了一些请求方法,用来给每个HTTP请求所使用。HTTP 1.1支持7中请求方法: GET, POST, HEAD, OPTIONS, PUT, DELETE, 和 TRACE。 GETPOST 在INTERNET的应用程序中是使用最普遍的两个方法。

URI完整的指明了一个INTERNET资源。一个URI通常是相对于服务器的根目录被解释的。 因此,它总是使用符号(/)开头。一个URL实际是一个URI类型。协议版本表示当前正在使用的HTTP协议的版本。

请求包头(request header)包含了一些有用的客户机环境的信息和请求的实体(entity body)信息。比如,它可以包含浏览器使用的语言和实体的长度等等。每个请求包头都被CRLF(回车换行)序列所分离。

在先前的HTTP请求中,实体是下面简单的一行:

在一个典型的HTTP请求中,这个实体能够很容易地变得更长。

HTTP响应(Responses)

和请求类似,一个HTTP响应也包含三个部分:

  • 协议状态 代码描叙(Protocol-Status code-Description)
  • 响应包头(Response headers)
  • 实体(Entity body)

下面是HTTP响应的一个简单范例:

第一行的响应包头和上面的请求包头很相似。 第一行告诉我们,协议是使用的HTTP1.1,响应请求已成功(200表示成功),一切已OK。

响应包头和请求包头相似,也包含一些有用的信息。响应的实体是HTML那一部分的内容。包头和实体也都是被CRLF序列分离开的。

Socket

套接字(socket)是网络连接的一个端点。它使得应用程序能够通过网络进行读和写的操作。 通过在连接上发送和接受字节流,两个位于不同计算机的软件程序能够彼此相互通讯。为了发送一个消息到另一个程序,你需要知道对方机器的IP地址和socket端口号。在JAVA中,一个socket是由java.net.Socket类所表示的。

为了创建一个套接字,你可以使用Socket类的构造函数来完成。 这些构造函数接受主机名和端口:

host表示远程计算机名或者IP地址,port表示该远程应用的端口号。比如,要在80端口连接到yahoo.com,你需要构造下面的socket:

一旦你成功创建了一个Socket类的实例,就可以使用它来发送和接受字节流了。 要发送字节流,必须首先调用Socket类的getOutputStream 方法来获得一个java.io.OutputStream对象。要发送一个文本到远程应用程序,经常要构造一个从OutputStream对象返回的java.io.PrintWriter对象。要接收连接另一端的字节流,要调用Socket类的getInputStream方法,该方法是从 java.io.InputStream返回的。

下面的程序段创建了一个socket,和本地HTTP服务器(127.0.0.1代表本地)进行通讯,发送一个HTTP请求,然后从服务器接收一个响应。它创建了一个StringBuffer 来保存响应,并将它打印到控制台。

要从服务器得到一个确切的响应,你需要发送一个遵循HTTP协议规则的HTTP请求。如果你阅读了上面的那段"超文本传输协议(HTTP)" ,那么你就应该能够理解刚才上面建立socket的代码。

Translated by Willpower,2003.11.23

通过一个Socket例子理解Http协议(实战Java Web服务器--使用HTTP协议和JAVA类实现)

Web服务器与客户端的通信使用HTTP协议(超文本传输协议),所以也叫做HTTP服务器。用Java构造Web服务器主要用二个类,java.net.Socket和java.net.ServerSocke...
  • rongwenbin
  • rongwenbin
  • 2015年08月31日 17:42
  • 3618

【web开发原理】B/S架构原理分析

Web的工作原理 1.工作过程:如下图所示描述了Web的工作原理。   (1) 用户打开计算机(客户机),启动浏览器程序,并在浏览器中指定一个URL(Uniform Resource Locator...
  • moshenglv
  • moshenglv
  • 2016年07月08日 19:22
  • 6364

利用socket自己实现基于HTTP协议的Web服务器

在开发网站的过程中,首先我们需要配置一个web服务器,一般会使用Apache这个开源的服务器软件,扩展性高,支持性也很好。实际上如果是windows系统的话那么也可以使用windows操作系统提供的I...
  • bobopeng
  • bobopeng
  • 2014年01月14日 11:26
  • 2659

No1_Web的工作机制

1、C/S结构与B/S结构的区别 a、硬件环境方面。C/S结构是建立在局域网基础上的,而B/S结构是建立在广域网的基础之上的。 b、软件重用性方面。C/S程序的软件重用性没有B/S程序中软件的重用...
  • u012959829
  • u012959829
  • 2014年09月04日 11:03
  • 714

深入分析java web 的ClassLoader工作机制(一)

一、ClassLoader简介: ClassLoader是类加载器, 责任1.将Class加载到JVM中, 责任2.审查每个类应该由谁加载, 责任3.将Class字节码重新解析成JVM...
  • Darrensty
  • Darrensty
  • 2017年11月30日 22:29
  • 20

java web中IBATIS的工作原理(1)

这段时间闲来无事重新研究下SSH和SSI的模型,以前写过一篇关于Hibernate对JDBC的封装的文章,这不就再来写一篇Ibatis的。 相对于Hibernate的一站式ORM解决方案而言,Iba...
  • chen861201
  • chen861201
  • 2012年05月29日 21:35
  • 6405

基于H.264的流媒体服务器的工作机制和实现方法

  • 2013年06月17日 10:34
  • 255KB
  • 下载

atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php

atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php   1. 环境:::项目java web,需要打...
  • attilax
  • attilax
  • 2014年10月06日 08:02
  • 4801

java web基础1Tomcat服务器基本知识

一.Tomcat安装 (1)先安装JDK,并配置环境变量JAVA_HOME。Tomcat服务器的配置需要JDK的JAVA_HOME环境变量。 并在系统path变量添加%JAVA_HOME%/bin...
  • THATISPAN
  • THATISPAN
  • 2016年09月02日 23:13
  • 189

Java Socket搭建一个简单地Web服务器(1)

今天突然想写一个简单地Web服务器,根据我对Tomcat的了解,简单总结了一下写一个简单地服务器需要哪些步骤: 1.首先肯定要借助ServerSocket和Socket这两个类。 2.Server...
  • p744174529
  • p744174529
  • 2017年06月27日 21:17
  • 103
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于JAVA的WEB服务器工作机制(1)
举报原因:
原因补充:

(最多只允许输入30个字)