上善若水
In general the OO style is to use a lot of little objects with a lot of little methods that give us a lot of plug points for overriding and variation. To do is to be -Nietzsche, To bei is to do -Kant, Do be do be do -Sinatra
posts - 146,comments - 147,trackbacks - 0

概述

Server类是Jetty中最核心的是类,它即包含Connectors数据,有包含了Handler的集合,即它是Jetty中用于连接Connector和Handler的类。同时它还包含了一个Container,用于存储Jetty中核心类实例的关系发生变化时触发事件的Listener,接收者可以注册一个Listener以获取Jetty中某个类的关系发生变化。
Server的实现

Server继承自HandlerWrapper,因而它默认是一个Handler容器,另外它也包含一个Container字段,以及Connector数组字段,ThreadPool字段,另外它还包含了一些配置字段,如:attributes、sessionIdManager、sendServerVersion、sendDateHeader、stopAtShutdown(注册shutdown hook)、maxCookieVersion、dumpAfterStart、dumpBeforeStop等,这些只是用于配置信息,而且名称本身已经很清楚它的含义了。

 

在使用Server时,我们需要向其添加Connector以及Handler,从而在启动时,它会首先注册ShutdownThread,即在JVM退出时会首先调用它的stop方法;如果没有手动设置ThreadPool,使用QueuedThreadPool初始化ThreadPool字段;然后启动所有Handler以及Connector。在stop时,它先close所有Connector,然后设置所有实现了Graceful接口的类的shutdown为true,并等待graceful时间后,stop所有Connector以及Handler。

 

Server中有两个handle方法在HttpConnection请求解析完成后调用,其中handle方法用于在非ASYNC状态下的调用,它只是从HttpConnection中取得Request、Response实例以及PathInfo作为target,传递给Handler的handle方法;而handleAsync方法则是在ASYNC状态下调用,它的baseRequest从HttpConnection中获取,但是会将其原有的RequestURI、QueryString、ContextPath设置到其Attribute(javax.servlet.async.*)中,而将他们对应的属性包括PathInfo更新为当前AsyncContext中Request的值,并且request、response实例则是从AsyncContext中获取,然后调用Handler的handle方法。

Container的实现

Container用于生成父实例和子引用的关系发生变化时生成的时间,以提供其注册的Listener接收到相应的事件。Container通过内部接口Listener可以触发如下事件:

    public interface Listener extends EventListener {
        public void addBean(Object bean);
        public void removeBean(Object bean);
        public void add(Container.Relationship relationship);
        public void remove(Container.Relationship relationship);
    }

其中Relationship表示一个父实例和一个子引用的关系,如handler、threadPool、errorHandler等。每当一个关系发生变化时,可以调用Container的update方法,而update方法内部会触发相应的remove和add事件。

posted on 2014-05-24 22:40 DLevin 阅读(2156) 评论(4)  编辑  收藏 所属分类: Jetty

FeedBack:
# re: 深入Jetty源码之Server和Container
2014-05-25 08:11 | nieyong
亲,北京优酷最近在招移动后端JAVA攻城师,有需要或者可以推荐的,可以发送邮件到 yongboyATgmail.com  回复  更多评论
  
# re: 深入Jetty源码之Server和Container
2014-05-26 11:49 | 手机赚钱网-手机赚钱软件排行,手机赚钱平台http://www.9izhuanqian.com
手机赚钱网-手机赚钱软件排行,手机赚钱平台!!http://www.9izhuanqian.com  回复  更多评论
  
# re: 深入Jetty源码之Server和Container
2014-05-26 11:50 | 手机赚钱网-手机赚钱软件排行,手机赚钱平台http://www.9izhuanqian.com
手机赚钱网-手机赚钱软件排行,手机赚钱平台 http://www.9izhuanqian.com  回复  更多评论
  
# re: 深入Jetty源码之Server和Container
2014-05-28 13:11 | IT前线
从来没有用过jetty,觉得还是直接写servlet好啊
http://www.itqx.net  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: