jetty主要組件的類圖
整個 Jetty 的核心是圍繞着 Server 類來構建。
Server 類繼承實現了Handler各Container,關聯了 Connector 。
- Container是管理 Mbean的容器。
- Connector接受各種http連接請求
- Handler 處理請求並作出響應
- 使用lifeCycle做生命週期管理
Jetty 的啓動過程
- 通過new,set向Container提交lifeCycle對象
public Server(@Name("threadpool") ThreadPool pool)
{
_threadPool = pool != null ? pool : new QueuedThreadPool();
//把_threadPool提交到Container中
addBean(_threadPool);
}
public void setConnectors(Connector[] connectors)
{
Connector[] oldConnectors = getConnectors();
//向容器中提交新的Connector,移除老的
updateBeans(oldConnectors, connectors);
}
public void setHandler(Handler handler)
{
Handler old = _handler;
_handler = handler;
//向容器中提交新的handler,移除老的
updateBean(old, _handler, true);
}
- 通過Server的doStart方法,觸發Container各對象的生命週期
//ContainerLifeCycle
protected void doStart() throws Exception
{
//遍歷Container的所有對象
for (Bean b : _beans)
{
//有生命用期的對象拿出來玩
if (b._bean instanceof LifeCycle)
{
LifeCycle l = (LifeCycle)b._bean;
switch (b._managed)
{
//如果對象已裝載則啓動
case MANAGED:
if (l.isStopped() || l.isFailed())
start(l);
break;
//自動模式
case AUTO:
if (l.isStopped())
{
manage(b);
start(l);
}
else
{
unmanage(b);
}
break;
default:
break;
}
}
}
}
- 所有的對象準備好了,最終發佈Connector
//Server
protected void doStart() throws Exception{
//如果第二步沒有異常
if (mex.size() == 0)
{
for (Connector connector : _connectors)
{
try
{
connector.start();
}
catch (Throwable e)
{
mex.add(e);
}
}
}
}