0.前言
WebX是基于Servlet的Web开发框架,因此理解Webx的前置条件是弄懂Servlet和Web请求响应原理,这部分不再赘述,本文主要说明WebX启动配置和的执行过程。
1.入口
WebX应用的起点就是这个listener
com.alibaba.citrus.webx.context.WebxContextLoaderListener
监听器的就是实现了一些接口,这些接口在容器初始化和销毁时会被调用
1.1 启动监听器WebxContextLoaderListener
这是一个通过继承自ContextLoaderListener<- ContextLoader,并实现了ServletContextListener<- EventListener的WebX环境加载监听器
代码1-1
1.2 环境初始化contextInitialized()
其方法contextInitialized在容器初始化时会被调用,创建环境加载器初始化Web应用
代码1-2
createContextLoader返回的是一个ContextLoader类的实例。
方法里new出来一个WebxComponentsLoader的实例作为返回值,因此,这个返回值实际上是WebxComponentsLoader类的实例。返回的实例实际上是一个WebxComponentsLoader类的匿名子类的实例,且这个子类覆盖了getDefaultContextClass方法。
所以代码1-1中的init..方法实际是WebxComponentsLoader的
1.3 组件加载器WebxComponentsLoader
而WebxComponentsLoader继承自WebApplicationContext,后者和BeanFactory、ApplicationContext是理解Spring框架的关键。
WebApplicationContext<-ApplicationContext<-BeanFactory是三者的继承关系
BeanFactory就是用来管理springBean生命周期的,WebApplicationContext扩展了web容器相关的内容,而WebApplicationContext实际上只是读取配置文件,真正的初始化方法,在
ContextLoader中
1.4 WebX组件管理
用WebxComponentsContextLoader取代SpringMVC的ContextLoader进行环境加载
新建一个WebxComponentsContext作为根容器,这是SpringMVC默认的XmlWebApplicationContext的派生类;另外,这个根容器默认读取webx.xml作为配置项
除了webx.xml,每个匹配webx-.xml的配置文件,都会对应上述WebxComponentsContext根容器的一个子容器
在webx.xml和webx-.xml中定义的beans将按照Spring容器的方式管理,而Webx自定义的服务,例如pipeline、form等,将使用Webx自定义的解析器解析为对应的bean实例,安装到Webx框架中,以备未来使用
其中自动扫描是这样工作的:扫描WEB-INF目录下所有匹配webx-.xml的文件,其中所代替的字符串为组件名。例如,WEB-INF下有一个名为webx-home.xml的文件,那么它代表一个名为home的组件。
2.请求Webx
2.1 URL过滤器
配置了filter之后,通过doFilter方法,对exclude标签中的url不处理
2.2 请求信任
对于请求是否信任,需要验证。首先判断流程请求是否结束和内部请求,然后验证信任请求,requestContext