1、类关系
几个重要的概念
Server: 服务器类
Container:容器,用于存放父对象和子对象之间的关系。
RelationShip:父子对象关系
Handler:处理HTTP消息的句柄。
Connector:连接的抽象,SelectChannelConnector实现Connector。
LifeCycle:生命周期的抽象。Server,Container,Handler,Connector都继承自LifeCycle。
下面采用Jetty学习【一】 中的第一个HelloWorld例子作为演示。
2、Server初始化
/* ------------------------------------------------------------ */
/** Convenience constructor
* Creates server and a {@link SelectChannelConnector} at the passed port.
*/
public Server(int port)
{
// 更新server
setServer(this);
// 设置连接
Connector connector=new SelectChannelConnector();
connector.setPort(port);
setConnectors(new Connector[]{connector});
}
第一步,更新server。具体步骤如下所示,
@Override
public void setServer(Server server)
{
// 获取旧的server
Server old_server=getServer();
// 如果旧的server和新的server是同一个
if (server==old_server)
return;
// 如果服务器已经启动,则抛出异常
if (isStarted())
throw new IllegalStateException(STARTED);
// 更新Abstacthandler中的_server,同时更新server的container中的bean,删除旧的server,添加新的server
super.setServer(server);
// 获取handler,如果不为空则更新handler中的_server。
Handler h=getHandler();
if (h!=null)
h.setServer(server);
// 更新server的container中的关系 'handler'
if (server!=null && server!=old_server)
server.getContainer().update(this, null,_handler, "handler");
}
其实大体上就是更新container中的内容,而container主要用于保存父对象和子对象之间的关系。比如server中的_handler和server的关系就是"handler"。
/* ------------------------------------------------------------ */
/** Container.
* This class allows a containment events to be generated from update methods.
* 该类允许使用update函数完成包含事件。
* The style of usage is: <pre>
* public void setFoo(Foo foo)
* {
* getContainer().update(this,this.foo,foo,"foo");
* this.foo=foo;
* }
*
* public void setBars(Bar[] bars)
* {
* getContainer().update(this,this.bars,bars,"bar");