用 Java 来打造属于自己的Web服务器

很久很久以前,没有web服务器的概念,就知道在windows下配置一下IIS,用来跑asp。到后来的asp.net也还是IIS。接着又接触到java,于是知道了还有apache和tomcat。然后是php,也还是和apache在打交道。直至某一天,我又知道了这个世界上还有俄罗斯人写的优秀的nginx,以及lighttpd等web服务器。

一直以来,我都以为web服务器是一个非常复杂的系统,需要有着高深的理论知识才能去写这么一个软件,它应该是一个团队才可以应付的事情。当然,也想过它的工作原理,无非是绑定一个端口,然后处理web请求并做出相应的响应。不过,始终都认为那应该是一件神奇的事情,不是我等凡夫俗子可以对付得了。

这两天对各种服务器的配置都做了一些了解,对于写web服务器的冲动又一下子涌上心头了。最开始想用c,于是便下载了一个有若干年没有碰过的tc,稍微调试了一番,发现还缺少很多头文件,一时半会还找不全;而对于c++,又觉得过于繁杂,不想去碰它;c#的话,总感觉微软的东东过于庞大臃肿,也不想理会;于是,自然而然就想到了java。

很简单地,最开始肯定是用socket绑定一个端口,接下来试着从浏览器访问这个端口。没想到,还真能将请求发到这个socket里头来,把请求内容输出以后,发现正是http协议的标准写法,熟悉的GET / HTTP/1.1\r\n 映入了眼帘。在这一刻,我似乎对于web这一回事又有了一个更深刻的认识。浏览器只不过按照http协议的要求,把请求封装成标准格式,打包发送到web服务器上。web服务器将请求收集起来,按照http协议的规定将请求解析,然后把对应的内容找到,又一次按照http协议的要求封装起来,返回给浏览器端。浏览器接下来把这些返回的内容解析,并渲染出来。这些流程,以前也有很多次见识过,不过,总还是感觉有些抽象。不过,今天这样随便一写,却感觉这一切都变得那么具体和熟悉起来。

对于请求的处理,需要涉及到多线程,因此干脆从网上搜索了一篇文章:WebServer.java 用JAVA编写Web服务器,并对其进行了相应的修改,使得扩展性和可读性更强。在这篇文章的基础上,加入了两个新类——PageRequest和PageResponse,分别用来处理请求和响应。

Code



posted @ 2008-10-08 01:12  Ronie Deng  阅读(3436)  评论(0编辑  收藏  举报