对于企业选择或者设计HTTP服务器,需要考虑很多因素,主要的因素有:稳定性,安全性,执行效率,易用性,可扩展性等。笔者对当前业界中较为流行的HTTP服务器按照常用指标进行了分析和对比,如表1。
HTTP服务器支持服务页运行平台安全性执行效率易用性
MS IISASPMS Windows一般一般容易
MS IISISAPIMS Windows一般好容易
ApacheCGIMS Windows,
UNIX,Linux好一般一般
Tomcat
JSPMS Windows,
UNIX,Linux好好不易
表1:HTTP服务器对比
通过表1我们可以知道,MS IIS只能运行在MS Windows平台下,且由于IIS的体系设计很大程度上依赖于Windows系统,由于MS Windows系统存在一定的漏洞,从而导致IIS体系的安全性能也比较低。但是IIS安装使用比较简单,适用于对安全性和扩展性要求不高的Windows用户。
对于Apache和Tomcat(都由Apache Software Foundation研究开发)这两款当前互联网上比较流行的HTTP服务器,不仅可以支持MS Windows平台,也可以支持当前所有主流非Windows平台(例如:Linux,各种UNIX操作系统),并且安全性能较IIS强。但是对于一般的用户而言,Apache和Tomcat的配置使用较为复杂一些。所以Apache和Tomcat适用于专业的,对系统安全性和扩展性要求较高的用户。
另外需要考虑的因素是HTTP服务器的执行效率。在表1中,ASP和CGI都采用即时调用模式,即当客户端请求该资源时,服务器端会即时解释并执行该模块,执行完毕之后即时释放该模块,每次获取请求时都必须解释和执行该模块,这样过多地与磁盘系统进行交互,会造成系统的执行效率的降低。
对于ISAPI而言,其执行模块是作为动态
链接库(DLL)模块的形态进行调用,初次调用完毕后该模块将存在于内存中。后续再收到客户端请求时直接从内存中调用执行该模块,从而效率较高。但这种情形可能带来代码更新的
问题。当修改本地代码时,必须从内存中清空该动态链接库模块,即需要先关闭服务器后才能更新本地代码,否则服务器内存中执行的还是旧的代码模块。
而对于Tomcat系统而言,这样的问题都得到了避免。Tomcat将初次执行的Java类模块载入到内存,后续调用时,直接从内存中调用执行模块,减少了与磁盘系统的交互。同时通过自动判断本地代码是否受到修改而更新载入内存中旧的类模块。从而不仅执行效率较高,且修改本地代码也比较方便。
基于上述的研究分析,笔者拟采用扩展性和安全性良好的Java体系来实现一款支持JSP服务页的HTTP服务器,其功能实现基本覆盖Tomcat,并在其基础上增强对CGI的支持和易用性的提高。
一、设计过程
1.搭建HTTP服务器框架
1.1 设计思路
通过建立TCP套接字(端口为80)向客户端提供HTTP服务。分析客户端请求(GET,POST请求等),建立请求资源与本地资源的映射关系,实现请求应答。以下是本HTTP服务器的设计构架图:
JSP Hander
图1:HTTP服务器设计构架图
1.2 设计要点
(1)客户端请求的多线程支持。
(2)客户端请求的分析。
(3)请求资源与本地资源映射以及本地资源的应答。 [Page]
(4)对CGI以及JSP类似请求的接受分析与处理返回。
(5)扩展服务以及特殊指令。
1.3 实施前准备
(1)确定JDK版本并
下载JDK
考虑到JDK1.4.2的稳定性,我们考虑使用版本为1.4.2或以上的JDK。从SUN的网站上(http://java.sun.com/javase/downloads/index.jsp)
下载当前平台支持的JDK。&n