前面说过了 restlet 组件和 help 的关系,参见http://blog.csdn.net/teamlet/article/details/7726308
这里就分头详细描述一下 help 这个分支的内容。
一、Help 是 Restlet Help的顶级类
Help是一个抽象类,没有实现任何的方法。
二、RestletHelper 是与 Restlet 对应的Help
RestletHelper<T>是 Help 的子类之一,也是个抽象类。
RestletHelper主要定义了 Map<String, Object> attributes 和 T helped 两个属性:
attributes 是用来保存在 Engine 和 Restlet API 之间需要交换的属性。
helped 用来保存对应的 Restlet 组件。
除了通过helped提供一些方法外,还有一个比较重要的方法就是 handle(Request request, Response response)
这个方法与Restlet中的 handle(Request request, Response response) 类似,不同的是,这里不需要调用启动(start)方法,
因为每个Restlet在handle调用的时候都需要启动,而help则不需要在handle()中启动。
RestletHelper 同时定义了start()、stop()、update()抽象方法,供子类实现。
三、CompositeHelper
CompositeHelper 是RestletHelper的子类,因为没有实现RestletHelper 中声明的 start() 等抽象方法,所以CompositeHelper也是一个抽象类。
CompositeHelper 定义了 操作Filter的指针:包括firstInboundFilter、firstOutboundFilter、lastInboundFilter、lastOutboundFilter
以及入口的Restlet组件 inboundNext 和出口的Restlet组件 outboundNext 。
同时,与Restlet类和其子类实现的调用关系一样,CompositeHelper 覆写了 RestletHelper 的 handle(Request request, Response response)方法,
方法中首先调用父类的handle方法 —— super.handle(Request request, Response response),然后调用firstInboundFilter.handle()方法处理Filter队列;
四、ComponentHelper
ComponentHelper 是 CompositeHelper的子类,与其对应的 Restlet组件是 Component .
ComponentHelper 实现了RestletHelper定义的 start() stop() update()方法。
在start()方法中,调用了非常重要的方法 boolean checkVirtualHost(VirtualHost host) ,这个方法也是在 ComponentHelper这个类中实现的。
首先,start()方法先调用 checkVirtualHost()方法依次检查 Compoennt中的 defaultHost 和 hosts 。
如果 defaultHost和hosts不为空,并且下一个组件是 Application 则开始解析并组装这个 Application,然后启动这个 Application .
Application 启动后,创建 inboundFilter 和 outboundFilter ,并把 包含Component的 ServerRouter 实例 设置为 outboundNext .
当Component 类实例调用 start() 方法时,其中startHelper() 方法就是来调用 ComponentHelper 的 start()。
这里需要备注一下:就是ComponentHelper执行 start()方法会启动application .
componentHelper.start() --->checkVirtualHost(VirtualHost host) ----> application.start()
《待续》