其实读jetty的代码到现在,对整个jetty服务器的运行以及实现概况都已经有了大体的了解,这篇文章就先对整个jetty的实现设计做一个简单的概述吧。。。。
先来一张图来描述一下整个jetty服务器的整体结构。。。
这里只是只是将一些重要的主线部分给画了出来。。并没有描述一些细节,例如contextListener,sessionHandler什么的。。。
接下来来叙述一下整个http的处理流程。。。。。由于实在不知道该怎么画图。。那就用文字描述一下吧:
(1)首先外部的建立tcp连接的请求被serversocketchannel接收到,然后获取到远程链接,并将其注册到selector上面去(这里就直说nio的了)
(2)selector发现了某个注册的chanel可读了,那么激活这个httpconnection的http处理流程
(3)当一个httpconnection接收到一个完整的http请求之后,会将这个请求交给server来处理
(4)server会将http请求交给内部的handler来处理。。反正最后肯定会交给contextHandlerCollection来处理(同时部署多个web程序),
(5)contextHandlerCollection对请求的路径进行判断,将其路由给对应的WebAppContext来处理。。。
(6)WebAppContext再交由内部的servlethandler来处理(这里一般在前面还有一层sessionHandler,用于处理关联的session)。。。然后servlethandler在将在内部对请求的path再做一些路由,交给对应的servlet来处理。。。(到此为止,请求的处理jetty要做的事情就完成了,剩下的事情就是用户定义的代码做的事情了。。。)
好了,那么到这里整个jetty的大的方面的框框也是我最开始最想要搞懂的东西都算是差不多了。。
那么剩下的可能就是一些细节部分的代码的分析了。。。