深入学习Tomcat----自己动手写服务器(附服务器

系统 2056 0

相信大多 Web 开发者对 Tomcat 是非常熟悉的,众所周知 Tomcat 是一款非常好用的开源 Servlet 容器,您一定对这个最流行的 Servlet 容器充满好奇,虽然它并不像一个黑盒子那样让人无法触摸但是 Tomcat 的源码的确让人看起来头疼。笔者就在这里和大家共同分析一个简单的 Web服务器是如何工作的源码 下载地址

Web服务器

Web服务器 是一个复杂的系统,一个 Web服务器 要为一个 Servlet 的请求提供服务,需要做三件事:

1 、创建一个 request 对象并填充那些有可能被所引用的 Servlet 使用的信息,如参数、头部、 cookies 、查询字符串等等。一个 request 对象是 javax.servlet.ServletRequest javax.servlet.http.ServletRequest 接口的一个实例

2 、创建一个 response 对象,所引用的 servlet 使用它来给客户端发送响应。一个 response 对象是 javax.servlet.ServletRequest javax.servlet.http.ServletRequest 接口的一个实例。

3 、调用 servlet service 方法,并传入 request response 对象。这里 servlet 会从 request 对象取值,给 response 写值。

在正式展示代码之前还需要了解一些必须额 HTTP 的知识(如果您对此非常熟悉您可以直接看下面分析代码)

HTTP

HTTP 的定义不知道的童鞋可以自己去度娘,这里主要要说的就是 HTTP 协议的格式

HTTP 请求包括三部分

1 、方法、统一资源标识符( URI )、协议 / 版本

2 、请求的头部

3 、主题内容

下面是一个 HTTP 请求的例子


第一行表明这是 POST 请求方法, /examples/default.jsp URI HTTP/1.1 是协议以及版本。其中 URI 指明了一个互联网资源,这里通常是相对服务器根目录解释的,也就是说这个 HTTP 请求就是告诉服务器我需要这个文件目录如下:根目录 / examples/default.jsp

最后一行是 HTTP 的主题内容, Servlet 会处理请求的主题内容,然后返回给客户端 HTTP 响应。

类似于 HTTP 请求,一个 HTTP 响应也包括上面三个部分。

1 、方法、统一资源标识符( URI )、协议 / 版本

2 、响应的头部

3 、主题内容

下面是一个 HTTP 响应的例子


第一行告诉协议版本,以及请求成功( 200 表示成功)

响应头部和请求头部一样,一些有用的信息。响应的主体就是响应本身 HTML 内容。

好了基本知识介绍完毕,下面开始解释代码

部分相关代码


HttpServer 类代表一个 web 服务器。首先提供一个 WEB_ROOT 所在的目录和它下面所有的子目录下静态资源。其次定义了一个中止服务的命令,也就是说当得到的请求后面跟 /shutdown 的时候停止服务,默认是把服务设置为开启。下面就是进入 main 函数了,首先实例化一个 HttpServer 类,然后就是通过 await 方法等待客户端发来的请求。如果客户端输入的 URL 不是 http://localhost:8080/SHUTDOWN 则表示不停止服务器,然后就是继续执行 await 方法中的内容,在 await 方法中最重要的就是定义两个对象,一个是 request 一个是 response ,下面就来说说 Request Response 类。


首先调用 InputStream 对象中的 read 方法获取 HTTP 请求的原始数据,然后在 parseUri 方法中获得 uri 也就是要请求的静态资源。说白了 Request 类的主要作用就是告诉服务器用户要的是什么也就是在 http://localhost:8080 后面出现的东西。


Response 类代表一个 HTTP 响应。首先 Response 接收一个 OutputStream 对象,然后通过 sendStaticResource 方法对接收的 Request 进行处理,整个处理过程就是根据请求在服务器端进行寻找对应静态资源的过程。找到所需要的资源后发送给客户端然后让客户端显示出来。

运行程序

运行上面的 HttpServer 类,然后在浏览器的地址栏中键入下面的地址: http:localhost:8080/index.jsp ,然后你会在浏览器中看到 index.jsp 页面。

深入学习Tomcat----自己动手写服务器(附服务器源码)

在控制台可以看到类似于下面的 HTTP 请求



小结

上面自己动手写的这个所谓的服务器仅仅有三个类组成,从功能上来说他只能显示一些静态的资源,并不是全部功能。一个优秀的服务器还有很多细节要做,但是出于学习的目的大家现在有这些了解就足够了,后面还会有对服务器的详细介绍,敬请期待。

深入学习Tomcat----自己动手写服务器(附服务器源码)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论