Jetty源码学习2-应用服务器架构

引言 java

该文主要参考了玄霄的分享,感受他分享的比较细。 web

应用服务器目录结构 服务器


因为须要用到jetty的websocket开发,所以选用的版本是8.1.7,从上图能够看到,主要有下面几个主要目录: websocket

一、bin目录 架构

启动脚本的目录,也包括了start.jar,主要是用来起引导做用的,引导资源加载和服务的启动。 app

二、etc目录 eclipse

配置文件的目录,也包括了start.ini,这份配置文件是用来指导start.jar的加载顺序和加载模块的,这个后面会有详解。 webapp

三、lib目录 socket

库文件目录,若是须要调试jetty的话,能够下载源码加到eclipse中,客户端远程调试便可,命令: java -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8090 -DEOS_DEBUG=true -jar start.jar  学习

四、webapps目录

应用部署目录

应用服务器启动流程

一、【流程图】


二、【start.jar】

能够看到,最后将server启动起来了,而jetty最核心的即server类,学习jetty的同窗不防直接从server类的doStart()或者handle(...)入手。

三、【server.start

这几段代码说明了一个服务器最重要的几个模块分别是:


都很抽象了有木有,那咱们来点实际的,看看jetty服务器是如何的,下面是jetty.xml的配置:


其实服务器的架构大同小异,最基本的4个组件老是不可或缺的,最后一个deployService是用来管理和部署应用的,他管理能够部署的工程类型,并管理着每一个工程部署的生命周期。

四、【deployService】


管理了三类工程的部署,扫描工程的部署目录,匹配部署器,并执行工程的部署,到此,大体流程应如此:

五、【HttpService】

感受该service才是最重要的模块,也是应用服务器设计的瓶颈所在。

顾名思义,为每一个链接起个线程去处理,固然TomCat默认采用BIO,而Jetty默认是NIO,关于JETTY NIO的详细描述见后面的文章。

WebModule

你可曾想过,要实现servlet规范,一个web应用的WebModule须要哪些东西才能正常运做,能够服务用户的请求。

应该须要classloader来加载应用的资源,还须要context来指导server识别本身,还须要servlet,还须要filter,还须要初始化方法和请求的hanlder方法,最后须要制造request和response的方法等,以下图,所以产生了该web模型:

我的感受是服务器驱动了servlet规范的产生,若是你要更方便理解的话,能够等价于webdefault.xml。

而后一个web部署器管理了一个webModule集:

接下来看看WebModule是如何处理一次请求的:



代码片断以下:

Jetty架构

注:默认的是NIO而不是BIO

相关文章
相关标签/搜索