服务器基于java的高效兼容http服务器的研究及实现

java服务器  时间:2021-01-30  阅读:()

基于J ava的高效兼容HT TF服务器的研究及实现

目录

摘要. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1

一、 引言. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4

二、 HTTP服务器模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5

一. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .、超文本传输协议

5

二. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .、 Java API中网络类包简介

6

三. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .、 HTTP客户机与服务器的交互涉及骤

7

四. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .、 HHTP操作的一次事务Transaction

8

五. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .、 HTTP消息

8

三、 HTTP服务器的兼容性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9

四、 Java实现多线程HTTP艮务器设计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10

一. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .、 J av a语言网络编程

10

二. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .、服务器总体设计

12

1、 总体设计的关键点. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12

2、 模块设计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12

3、 HTTP服务器各类之间关系. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14

三. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .、服务器详细设计分析

15

1、 线程重用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15

2、各类和接口的主要功能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15

四. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .、 J av a多线程机制的应用

17

五、 HTTP服务器运行. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23

六、结束语. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24

参考文献. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25

、引言

SUN推出Java语言之后全世界的目光都被这个神奇的语言所吸引 Java语言从一开始就内置了支持网络编程因此更容易编写网络应用程序这也是与其他编程语言不同的地方。 J av a提供了大量类和接口可以处理各种网络协议共享信息并行计算应用程序服务等优秀特点使j av a技术将会得到广泛的应用。 J av a是实现定制客户机和服务器的优秀工具因为它支持多种在网络上发送和接收数据、提供服务、接收数据、调用服务的技术。J av a作为一种面向分布式计算机环境语言提供了完全意义的多线程支持利用多线程编程接口可以方便地写出支持多线程的应用程序这一点也是J av a所特有的。随着In ternet的普及和Web技术的迅速发展客户/服务器结构逐渐转向浏览器/服务器方向 Web文本发布具有简洁、生动、形象等特点适用于发布信息开发基于Brow ser/S erver模式的Web数据库信息检索系统得到广泛应用。 Web服务基于超文本传输协议HT TP协议 。 Java语言所具有的良好兼容性、安全性、健壮性及可扩展的跨平台等特性使得J av a成为开发基于

B/S模式的Web数据库应用的首选计算机语言。本文使用Jav a开发一个高效兼容的HTTP服务器原型。 如图一

该多线程HTTP服务器使用S erverso cket 服务器套接字运行在服务器专用的TCP端口监听接收来自客户端的请求。当远程主机上的客户Socket试图与指定端口建立连接时服务器被激活根据具体情况来确定重用旧线程或生成一个新线程来响应客户端的请求直到该客户退出。服务器的主线程仍然处于监听状态等待新客户请求。

二、HTTP服务器模型

一 、超文本传输协议HTTP,Hypertext Transfer Protocol是Web浏览器与Web服务器之间通信的标准协议是个相当详细的协议。位于TCP/IP协议的应用层具有简单、通用、无状态、灵活、无连接及面向对象等特点是互联网中最核心的协议之一。 HTTP是RPC式的协议。 RPC就是远程调用Remote Procedure Cal 是请求远程机服务和处理机制。 RPC和编程语言中的过程调用相似基于C/S和B/S模型 它建立在请求/响应Request/Response的基础上服务端和客户端可能位于不同的独立系统上客户端通过TCP SOKET向服务器端口 默认为80发送包含请求方法、URL 是对统一资源定位符Uniform Resource Locato用来标识In ternet上资源的位置。URL类是不能再小的最小类它扩展Jav a.lang.Obj ec。 和协议版本信息请求建立Socket连接客户的请求通过Socket被服务器接收服务器

对客户的请求信息参数进行分析处理响应一个状态行对客户的请求服务做出回应把相应的资源文档以流形式通过Socket传给客户浏览器整个过程见图二所示

图二Socket连接

二 、 Java API中网络类包简介

Java API中按类的形式提供了三种不同层次的网络技术机制 ,用URL 统一资源定位符访问网络资源的类,利用S o cket套接字通讯的类以及D ataGr an 数据报类。前两种类方法更能体现J ava作为网络语言的特点支持URL类实际上也是依赖于下层支持S o cket类方法来实现的。相对来讲URL是对WEB勺高层联接。 Socket是一种底层的连接 客户机和服务器通过写入到S o cket的字节流进行通信。 Java系统的网络通信机制如图二所示本文主要讨论基于Socket类的通信机制。

图三JAVA系统的网络通信机制 图四应用程序和T C P/IP核心协议关

协议组TCP/IP的组合,TCP/IP技术的核心部分是传输层TCP和UDP协议,网络层IP协议和物理层面向各种物理硬件技术 ,能实现这三层协议的内核可称之为TCP/IP网络操作系统.TCP/IP协议技术中的中下层协议向外提供的只是原始的编程界面而不是直接的用户服务用户服务要靠核外的应用程序实现•应用程序和TCP/IP核心协议关系如图四所示•

三 、 HTTP客户机与服务器之间的交互涉及下列步骤 1、 HTTP服务器听取请求HTTP服务器打开听取端口通常是端口80,这是在一个线程

中进行的然后线程阻止等待入站的 HTTP请求。 2、 HTTP客户机构造HTTFURLHTTP客户机需要建立与HTTP!艮务器的初始连接。为此要使用URL通常情况下是以http://www.any_server.com的形式。这里HTTP客户机指定HTTP!艮务器上的缺省资源通常是页面index.htm或default.htm。缺省Web页面通常是站点的主页。有时候URL会更加复杂。 3、 HTT P客户机建立连接 HTTP客户机建立发送套接连接Web服务器。发送套接让客户机向服务器提交HTTP请求。 4、HTTP服务器接受连接HTTP服务器生成接受套接从HTTP客户机接受请求。通常接受套接在另一线程中运行提高Web服务器的性能。 5、 HTTP客户机构造一个HTTP请求发送到HTTP!艮务器建立与HTTP服务器的连接之后客户机构造HTTP请求并通过套接将其传递到HTTP月艮务器。 6、 HTTP服务器处理请求HTTP服务器继续听取接受套接中的入站请求。 得到请求时服务器分析入站请求并采取请求要求的操作。

7、 HTTP服务器将HTTPU向应发送给HTTP客户机 HTTP月艮务器构造HTTPU向应有六个部分1 、 HTTP版本 2 、 HTTP状态码 3 、 HTTP状态描述

可选  4 、响应头字段可选  5 、响应体可选  6 、内容长度可选 。服务器通过与HTTP客户机的连接返回响应。 8、 HTTP客户机处理响应 HTTP客户机收到服务器的响应时客户机分析响应 然后处理响应。 9、关闭套接连接 HTTP客户机或服务器关闭连接。

四 、一次HHTP操作称为一次事务Transaction 。 HTTP定义的事务处理由以下四步组成

1、 客户与Web服务器建立连接打开一个称为socket 套接字

的虚拟文件此文件的建立标志着连接成功。

2、 客户通过s o cket向Web服务器提交请求。一般为GET或

POST命令。

3、 通过HTTP协议传送给Web服务器。接纳则进行事务处

理处理结果传回客户端。

4、客户和服务器断开连接。

HTTP采用TCP连接该连接仅在此事务中保持浏览器和服务器都不会记忆上次的连接状态。 HTTP之所以采取这种无状态机制完全是为了提高服务器的工作效率。在WEB中点击一个超链接时浏览器有可能从当前站点转到另一个站点。因此当文档传输完毕时服务器都假定用户要退出对文本服务器上的文档的浏览连接 因而断开连接。 如果继续浏览就再次建立连接。如果用户确实要退出时服务器就不需要执行任何操作因为连接已经断开了。

五 、 HTTP消息包括HTTP请求信息和HTTP响应消息两种一个HTTP请求格式如下图五所示

图五HTTP请求信息格式

HTTP响应信息格式如图六所示

图六HTTP响应信息格式

三、 HTTP服务器的兼容性

一 、 HTTP1.1的兼容性

要实现一个实用高效的HTTP 1.1和CGI兼容HTTP服务器 HTTP 1.1主要通过引入持久连接和更好的缓存验证命令而提高性能而且把HTTP响应代码增加一倍多。能够向上兼容HTTP/1.0 HTTP消息包括请求消息和响应信息两种。

二 、 HTTP1.0的兼容性

HTTP1.0兼容服务器总是要响应请求的HTTP版本可能是

HTTP0.9或HTTP 1.0。 HTTPResquest要检查请求中是否存在版本号。 如果不存在则假设为HTTP0.9。这个版本不用头。其中在HTTP1.0版本里请求头的method可能为GET、 POST或HEAD而在HTTP 1.1版本中增加了PUT和DELETE两种请求。 URL统一资源定位器标明了目的位置。

三 、 与旧版本HTTP的兼容性

HTTP 1.0规范强制要求与HTTP.09的向下兼容性。我们要保证HTTP服务器具有下列功能

1、识别HTTP0.9与HTTP1.0请求的请求行格式。

2、 了解HTTP0.9与HTTP1.0格式的任何有效请求。

3、 响应与客户机使用的相同协议版本消息。

四、 Java实现多线程HTTP服务器设计

一 、 J av a语言网络编程

在j av a的客户/服务器应用中 客户与服务器之间的通讯一般是采用基于

TCP/IP的Socket机制来实现的。当通信数据到达的是

目的主机网络层 IP地址连同端口号一起 提供了对两台机器之间唯一

的无二义性的连接的标识这个连接叫套接字 Socket  。一

对套接字为一标识了每个端口连接 1发送方套接字=源IP地址+源端口号 2接收方套接字=目的IP地址+目的端口号。

Socket类实现基于连接客户插口。我们可以利用Java API中的Java.net包中的插口类提供的套接字功能进行网络编程。

S o cket类套接字类提供的重要函数有getInetAddress   ,getPort

  ,getInputStream  ,和close   。分别产生用于获得信宿机的地址、信宿机端口号、获得输入流、获得输出流、关闭套接字。

S erverSo cket类服务器套接字类的重要函数有 getInetAddres s

  ,getLo calPort   ,accept  和clo se  分别用于获得信宿机的Internet地址、本地端口、监听和关闭套接字。 ServerSocket类实现了TCP月服务器插口。它提供两种构造函数指定服务器插口所用的端口 以便监听到连接请求。利用Accept  方法引发服务器插口监听并等待一旦连接就返回一个实例。

自定义类包括 1Http S erver类服务器类   2 ReThead 线程重用类 , 3 HttpProcess 一个接口类 。此外还包括各个类的请求处理类3个 HttpFile 静态文件处理 ,HttpCGI CGI处理 ,HttpException

出错处理  以及数据流处理2个 Http Inputstream 数据输入流和Http Outputstream 数据输出流 。

ZJI:520元/月香港服务器-2*E5-2630L/32GB/480G SSD/30M带宽/2IP

ZJI发布了一款7月份特别促销独立服务器:香港邦联四型,提供65折优惠码,限量30台(每用户限购1台),优惠后每月520元起。ZJI是原来Wordpress圈知名主机商家:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务。下面列出这款服务器的配置信息。香港邦联四型CPU:2*E5-2...

热网互联33元/月,香港/日本/洛杉矶/韩国CN2高速线路云主机

热网互联怎么样?热网互联(hotiis)是随客云计算(Suike.Cloud)成立于2009年,增值电信业务经营许可证:B1-20203716)旗下平台。热网互联云主机是CN2高速回国线路,香港/日本/洛杉矶/韩国CN2高速线路云主机,最低33元/月;热网互联国内BGP高防服务器,香港服务器,日本服务器全线活动中,大量七五折来袭!点击进入:热网互联官方网站地址热网互联香港/日本/洛杉矶/韩国cn2...

RAKsmart 黑色星期五云服务器七折优惠 站群服务器首月半价

一年一度的黑色星期五和网络星期一活动陆续到来,看到各大服务商都有发布促销活动。同时RAKsmart商家我们也是比较熟悉的,这次是继双十一活动之后的促销活动。在活动产品中基本上沿袭双11的活动策略,比如有提供云服务器七折优惠,站群服务器首月半价、还有新人赠送红包等活动。如果我们有需要RAKsmart商家VPS、云服务器、独立服务器等产品的可以看看他们家的活动。这次活动截止到11月30日。第一、限时限...

java服务器为你推荐
涡轮增压和自然吸气哪个好自然吸气与涡轮增压发动机哪个更好集成显卡和独立显卡哪个好集成显卡和独立显卡那个好?手机浏览器哪个好手机浏览器哪个好用压缩软件哪个好安卓手机哪一款解压缩软件比较好用?谢谢!网络机顶盒哪个好什么牌子的网络机顶盒最好百度空间登录百度空间登陆电信dns服务器地址广西电信应该填什么DNS服务器地址?360云盘网页版360云盘电脑版与网页版有什么区别?如果资料全存在360云盘电脑版里面,那网页版会是空的还是自动同步?假如电脑坏了,或重装了,那电脑版里面的资料如何才能找回不?360云盘下载下载一个360云盘,怎么下载360云盘同步版360云盘同步版整理资料以哪方为准(本地还是云盘)?
中文域名 xenvps isatap gomezpeer 贵州电信宽带测速 火车票抢票攻略 大容量存储 云鼎网络 个人空间申请 炎黄盛世 服务器合租 免费mysql数据库 华为云服务登录 帽子云排名 免费php空间 阵亡将士纪念日 买空间网 中国电信宽带测速 phpinfo godaddy退款 更多