首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

jetty源码分析三-WebAppContext

2013-11-09 
jetty源码分析3-WebAppContext?1.概述jetty的web工程主要完成servlet中context的管理,war包中web.xml中文

jetty源码分析3-WebAppContext


?1.概述

jetty的web工程主要完成servlet中context的管理,war包中web.xml中文件的解析和加载,类加载器等一些功能。

?

2. 类图和解释


jetty源码分析三-WebAppContext
?

webAppContext是中心,其中包括classloader,configuration和metadata三个主要的内容,classloadee后面再说,configuration主要是对一些配置的应用,比如调用加载器加载jar包,根据web.xml中的配置初始化servlet等等。metadata主要是元数据的定义和处理,展开类图如下:


jetty源码分析三-WebAppContext
?

其中descriptor主要完成xml文件的解析,这里包括web.xml,webdefault.xml,web-fragment.xml等,然后DescriptorProcessor主要是将解析好的文件转换为需要使用的数据结构,或者设置context等的一些相应的值。

?

3.启动过程

?
jetty源码分析三-WebAppContext
?

?

server,connector,handler等都继承了abstractLifeCycle(实现LifeCycle接口)。

    server的dostart过程包括:启动threadPool,启动handler,启动connector(分别调用它们的doStart方法)hanlder(webappContext)的doStart方法又包括如下步骤:

    ?

    其中=_context.isSystemClass(name)方法是查看是否为systemclass,systemclass都通过正则的方式定义在context中了(通过解析配置systemclass名称的字符串得到)

    也可以通过配置文件来定义。

    ?

    通过上面的代码可以看到,一个类被判断为systemclass时,就会委托给系统类加载器,如果是serverclass,就一定会勇webxppClassLoader加载,由于WEB-INF/lib中并没有org.jetty.类,而且由于以下的代码,保证server类不会委托给系统类加载器,所以如果WEB-INF/lib没有,就会报ClassnotFound,从而达到了容器类对于应用不可见的目的。

    (测试时,可以在pom中引入jetty的容器类,但定义为provided,或者直接用class.forname之类的方式来测)

    ?

热点排行