tomcat7的web.xml的xml片段与注解资源的发现处理逻辑

1、metadata-complete 属性

Servlet 3.0 的部署描述文件 web.xml 的顶层标签 <web-app> 有一个 metadata-complete 属性,该属性指定当前的部署描述文件是否是完全的。 如果为true,表示部署描述文件,涵盖了所有的内容(即不支持可插的注解支持。),如果为false,除了解析部署描述文件外,还将对相关jar包中含“声明处理的注解”进行解析。

2、web-fragments是通过jarscanner去扫描,然后对应callback去做文件识别和解析。

这个过程中即使不存在“meta-inf/web-fragment.xml”,那么也会产生空webXML的对象。 but why? 这样相当于于标识了所有jar包,为后面扫描class文件(见第三点)做准备,相当于都有一个base path。 而且,metadata-complete=false时,虽然xml片段可能不存在,但还有可能存在响应的注解的实例。

3、ServletContainerInitailizer与@HandlerTypes注解。

通过service load机制,发现对应资源配置文件中希望add的ServletContainerInitailizer的实现,

然后看该sci的有没声明HandlerTypes的注解(希望被扫描注解),然后add sci到context中,

Context.startInternal时,会执行执行一次sci.onstartup(),参数是所有关联的被筛选的class集合。

上一篇:HTML 5 详解之列表标签


下一篇:C语言库函数大全及应用实例二