最新的jetty版本是jetty 9,但下面这个jetty源码阅读系列都是基于jetty8进行的,所以可能有些地方和最新的源码对不上。
jetty服务器由一个或多个connector核心组件以及一系列handler组件和一个线程池组成。结构图如下:
三个组件的职责:connector负责接收客户端连接请求,而handler组件则负责处理请求并给予响应,前两个组件需要的线程资源都直接从线程池ThreadPool中获取。
Jetty Server可以同时配置多个不同connector在不同的端口进行监听,并可以根据不同的需求配置不同的connector,比如非阻塞的NioConnector,阻塞的SocketConnector等;对于处理请求的handler组件,也可以根据需要配置不同的handler,比如需要Servlet就配置一个ServletHandler,需要Session就配置一个SessionHandler,当然如果都不需要则不配置这些handler就可以了。
Jetty提供了一个Server类来协调和控制上线核心组件进行工作,Server是应用的起始点,它负责创建并初始化Connector Handler和ThreadPool,然后调用
start方法启动它们,让它们处于待命状态。值得注意的是Server类本身也是一个Handler。
1.组件的生命周期
Jetty中的关键组件,比如Connector、ThreadPool、Handler等都有生命周期的概念,这些组件的生命周期定义都是通过实现LifeCycle接口来进行控制。当然有些组件不是直接实现的LifeCycle而是通过继承LifeCycle的子类来定义的生命周期管理。下面是描述它们关系的类图:
上面说到Server本身也是一个Handler,同时它也是启动和协调其它组件工作的类,通过LifeCyle可以控制其它组件的生命周期,可以通过start()来启动Server,通过stop()来停止Server。
LifeCycle的定义如下,可以看到比较重要的关于生命周期的方法其实就是start()和stop()。其它还有一些判断组件运行状态和添加移除事件监听器的方法。
public interface LifeCycle
{
public void start()
throws Exception;
public void stop()
throws Exception;
public boolean isStarted();
public boolean isStarting();
public boolean isStopping();
public boolean isStopped();