webx2.0-框架初始化

类图

171252_8f8N_947581.jpg

流程

由于web.xml中配置的请求webxCntrollerServlet,因此容器会先创建servlet的实例,servlet在初始化时会调webxControllerServlet的configure创建一个webxController实例并进行初始化,下面是时序图:

171330_FhlU_947581.jpg

流程详解

2.1 取得日志目录
     1、ServletContex参数的定义是在整个程序中且独立于各个单独的servlet的,同时也提供给程序中的所有servlet;而ServletConfig中的参数是只提供给定义它的Servlet的,同一程序中的其他servlet是无法使用的;也就是说ServletContext相当于全局变量,ServletConfig相当于局部变量。
     2、先取当前servlet的参数,找不到再找全局,还是找不到就用默认参数;最后生成日志目录。
2.2 创建引导资源加载器,其实是new一个具体的类来加载资源文件
2.3 取得系统的属性配置(由jvm取得),并将loggingRoot、localHost、localAddress参数赋予属性集合中。
2.4 配置log4j日志系统:装在log4j的配置文件,根据后缀名解析该配置文件。
2.5 取得scheme的实现:搜索schema的实现类,并取得shcema实现类的实例。
2.6 取得规格化的servletPaths,啥玩意?
2.7 取得webx的配置文件
     1、找$applicationRoot/WEB-INF/webx.xml,自然没有
     2、取得读取webx配置文件的configuration类
     3、读取webx.xml并存储在主configuration中
     4、查找并装入所有组件的配置文件
          (1)基于web.xml中的init参数查找所有的组件名
          (2)为每一个组件生成一个引导资源加载器(其实是原加载器维持了一份map)
          (3)读取每个组件目录下的webx.xml并合并在主configuration中
2.8 设置默认的services和配置项(经典的webx方案)
     1、先试图查找WEB-INF/webx-default.xml,如果找到,则装载并作为默认配置文件,合并到configuration中
     2、装在TURBIE的配置文件,合并到configuration中
2.9 初始化serviceManager
     1、取得DefaultWebxServiceManager并实例化
     2、将configuration和引导资源加载器传给该manager
     3、初始化
          (1)创建service名称和service配置的映射,这个映射是根据配置文件中的设置产生的
               ①根据configuration中的key取得所有instanses的名称
               ②取得所有instances的instanceConfiguration保存在map中
               ③遍历configuration中的class,实例化service instance,保存在map中:services.put(instanceKey, instance)
               ④采用set来取得service names,再加上Resourceloaderservice
               ⑤将未声明的service补全,包括main和instance的?
          (2)初始化ResourceLoaderService
          (3)初始化那些earlyInit=true的service instances
2.10 将webx controller实例设置到servlet context中,以便外部系统可以使用
2.11 如果指定了initAllServices,则强制初始化所有services。这里调用各个Service的默认实现的init方法

四、一些感悟1、首先,容器启动时,将初始化 WebxControllerServlet       WebxControllerServlet 将判断当前的 ServlerContext中有没有名为webx.context的属性 (该属性保存的是WebxController,webx M-V-C框架 的入口)如果是初次启动,WebxController是不存在的。   因此WebxControllerServlet将通过 WebxLoader装载和初始化webx中的 services,它负责完成主要的初始化操作, 然后将框架的配置保存在 WebxController中,以后处理请求的时候就可以直接通过该对象完成 。       WebxLoader用来加载并完成框架的初始化; WebxController则是用来保存框架初始化好之后的信息。
 2、WebxLoader初始化时将创建一个WebappStarpResourceLoaderService负责读取webx 的配置文件.   对于多 car结构的应用将从根WebappBootStartpResourceLoaderService(InstanceNamenull) 中再为每个 car分别实例化一个WebappBootStartpResourceLoaderService对象( 在初始化每个carDefaultResourceLoaderService 时完成)   该对象中保存 car实例的名称(WebappBootStartpResourceLoaderService.instanceName) ,取资源时将把该名称加入到资源路径,例如 WEB-INF/webx.xml将会变为WEB-INF/ instanceName/webx.xml.
   webx初始化的时候,将两次为每个 car生成WebappResourceLoaderService ,一次是在读取每个carwebx.xml 文件的时候;一次是初始化每个car对应的DefaultResourceLoaderService 的时候,两次都是通过 BootstarpResourceLoaderService.getInstance())。 

3、initMapping()完成的主要工作是:
  分析应用包含的 car的数量(Instance) Service的数量.  解析属于每个 Instance的配置信息和InstanceContext信息,并为每个 Service分别创建一个ServiceInstance(这个对象中包含 Service的类名以及配置信息等,将用于创建 Service对象,每个 Service只会被初始化一次,初始化的次数通过 ServiceInsatnce的控制,注意的是一个Service不管是上文提及 4种类型中的哪一种,都将为每个 Componentmain-instance 创建一个 ServiceInstacne,有些ServiceInstacne并不会被真正使用到 )



转载于:https://my.oschina.net/tryUcatchUfinallyU/blog/288012

该文档为官方webx框架文档,对webx进行了全面的讲解,非常实用,并附学习的Demo 为什么要用Webx而不是其它的开源框架? 现在有很多Java的Web框架可供选择,并且它们也都是免费的。例如: • Struts • Webwork • Tapestry • Spring MVC 以上框架都是非常优秀的。说实话,如果阿里巴巴网站在2001年开始,就有这么多可选择的话,无论选择哪一个都不会有问题。因为这些年来,所有的开源Web框架都在互相学习、并趋于相似。Webx也不例外,它吸收了其它框架的很多想法。因此,当你使用Webx的时候,你会觉得在很多方面,它和其它开源的框架非常类似。我并不是说所有的框架都一样好,而是说只要假以时日,所有的框架在发展过程中,必然会积聚好的方面,淘汰坏的方面,从而变得足够好。从这个角度看,的确没有特别明显的理由来选择Webx,但也没有明显的理由不选择Webx。 另一方面,由于每一种框架采用不同的设计,必然会有各自的优势。Webx也是如此 —— 它在某些方面有一些独到的设计,超越了同类框架Webx有哪些优势呢? Webx的优势 成熟可靠性 这个优势主要是针对阿里巴巴及属下网站而言。因为Webx在阿里巴巴和淘宝用了很多年。对于这种超大访问量的电子商务网站,Webx经受了考验,被证明是成熟可靠的。 开放和扩展性 • 对Spring的直接支持 —— Spring是当今主流的轻量级框架Webx 3.0和Spring MVC一样, 完全建立在Spring框架之上,故可运用Spring的所有特性。 • 扩展性 —— Webx 3.0对Spring做了扩展,使Spring Bean不再是“bean”,而是升级成“组件”。一个组件可以扩展另一个组件,也可以被其它组件扩展。这种机制造就了Webx的非常好的扩展性,且比未经扩展的Spring更易使用。 • 开放性 —— Webx被设计成多个层次,层次间的分界线很清晰。每个层次都足够开放和易于扩展。你可以使用全部的Webx,也可以仅仅使用到Webx的任何一个层次。 引言 ............................................................................................................................... ix 1. 阅读向导 ............................................................................................................. ix 2. Webx是什么? .................................................................................................... ix 3. Webx的历史 ....................................................................................................... ix 4. 为什么要用Webx而不是其它的开源框架? ............................................................. x 5. Webx的优势 ........................................................................................................ x 5.1. 成熟可靠性 ................................................................................................ x 5.2. 开放和扩展性 ............................................................................................. x 6. Webx还缺少什么? .............................................................................................. x 部分 I. Webx框架概览 ......................................................................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值