首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

jetty源码分析七-server

2013-11-09 
jetty源码分析7-server1.概述jetty的server是结合connector,threadpool和handler的一个核心类,但是本身的

jetty源码分析7-server
1.概述

jetty的server是结合connector,threadpool和handler的一个核心类,但是本身的内容不多,他继承自HandlerWrapper,结构如下:

?


jetty源码分析七-server
?

2.启动过程

a. 初始化ThreadPool,如果有设置,就用设置的,否则new一个QueuedThreadPool

b.初始化addBean中加入的bean,调用其start方法
c.如果_sessionIdManager不为空,调用其start
d.调用threadpool的start
e.调用super.start,初始化handler
f.调用conneters的start

3.停止过程

a.如果调用了setGracefulShutdown(int timeoutMS),就先调用_connectors的close方法(避免接收新的连接)和实现了Graceful的handler的setShutdown方法改变handler状态(避免接收新的request),但已经接收的请求会继续处理,直到timeoutMS后再继续执行后续动作。
b.一次调用connector,handler,threadpool,add的bean的stop方法,和start正好相反。


因此,connector,handler,threadpool以及add的bean的生命周期和server的生命周期是一样的。

4.其他说明

4.1 ?Container主要是维护Server中除connector,handler外的其他bean的容器,这些bean只要实现了lifecycle并加入到server中,就会在合适的时候被调用(start,stop..),从而使得server可以引入很多”插件“。同时会维护各个bean的关系(包括connector,handler),并在关系改变的时候通知对应的listener。listener可以自己定义,典型的有MBeanContainer。MBeanContainer会在addBean的时候动态生成mbean并注册到mbeanServer。细节会在jmx一张再讲

4.2. SessionIdManager是SessionManager中用来管理sessionId的,但是为啥要放在server中呢?避免多个SessionManager使用了同样的id?因为一般SessionManager是在SessionHandler中new出来的

4.3 attributes主要存放一些属性信息,目前用到的主要是org.eclipse.jetty.webapp.configuration,org.eclipse.jetty.webapp.systemClasses两个属性,在WebAppContext用到.

?

热点排行