基于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 方法引发服务器插口监听并等待一旦连接就返回一个实例。
自定义类包括 1Http S erver类服务器类 2 ReThead 线程重用类 , 3 HttpProcess 一个接口类 。此外还包括各个类的请求处理类3个 HttpFile 静态文件处理 ,HttpCGI CGI处理 ,HttpException
出错处理 以及数据流处理2个 Http Inputstream 数据输入流和Http Outputstream 数据输出流 。
触碰云怎么样?触碰云是一家成立于2019年的商家。触碰云主营香港/美国 VPS服务器、独立服务器以及免备案CDN。采用的是kvm虚拟构架,硬盘Raid10,Cn2线路,去程电信CN2、移动联通直连,回程三网CN2。最低1核1G带宽1M仅20.8元/月,不过这里推荐香港4核4G15M,香港cn2 gia线路云服务器,仅115.2元/月起,性价比还是不错的。点击进入:触碰云官方网站地址触碰云优惠码:优...
韩国服务器怎么样?韩国云服务器租用推荐?韩国服务器距离中国近,有天然的地域优势,韩国服务器速度快而且非常稳定!有不少有亚洲市场的外贸公司选择韩国服务器开拓业务,韩国服务器因自身的优势也受到不少用户的青睐。目前的IDC市场上,韩国、香港、美国三个地方的服务器几乎占据了海外服务器的百分之九十以上。韩国服务器相比美国服务器来说速度更快,而相比香港机房来说则带宽更充足,占用市场份额非常大。那么,韩国服务器...
imidc对日本独立服务器在搞特别促销,原价159美元的机器现在只需要88美元,而且给13个独立IPv4,30Mbps直连带宽,不限制流量。注意,本次促销只有一个链接,有2个不同的优惠码,你用不同的优惠码就对应着不同的配置,价格也不一样。88美元的机器,下单后默认不管就给512G SSD,要指定用HDD那就发工单,如果需要多加一个/28(13个)IPv4,每个月32美元...官方网站:https:...