standard源码(standard版本)
本文目录一览:
软件的版本是如何划分的?
常见版本
* * alpha 内部测试版
* * beta 外部测试版
* * demo 演示版
* * Enhance 增强版或者加强版 属于正式版
* * Free 自由版
* * Full version 完全版 属于正式版
* * shareware 共享版
* * Release 发行版 有时间限制
* * Upgrade 升级版
* * Retail 零售版
* * Enterprise 企业版
其他版本
* * Cardware 属共享软件的一种,只要给作者回复一封电邮或明信片即可。
(有的作者并由此提供注册码等),目前这种形式已不多见。
* * Plus 属增强版,不过这种大部分是在程序界面及多媒体功能上增强。
* * Preview 属预览版
* * Corporation Enterprise 企业版
* * Standard 标准版
* * Mini 迷你版也叫精简版只有最基本的功能
* * Premium 贵价版
* * Professional 专业版
* * Express 特别版
* * Deluxe 豪华版
* * Regged 已注册版
* * CN 简体中文版
* * CHT 繁体中文版
* * EN 英文版
* * Multilanguage 多语言版
* * Rip 是指从原版文件(一般是指光盘或光盘镜像文件)直接将有用的内容(核心内容)分离出来,剔除无用的文档,例如PDF说明文件啊,视频演示啊之类的东西,也可以算做是精简版吧…但主要内容功能是一点也不能缺少的!另:DVDrip是指将视频和音频直接从DVD光盘里以文件方式分离出来。
* * trail 试用版(含有某些限制,如时间、功能,注册后也有可能变为正式版)
* * RC 版。是 Release Candidate 的缩写,意思是发布倒计时,该版本已经完成全部功能并清除大部分的BUG。到了这个阶段只会除BUG,不会对软件做任何大的更改。
* * RTM 版。这基本就是最终的版本,英文是 Release To Manufactur,意思是发布到生产商。
original Equipment Manufacturer (OEM)
You may license products through an original Equipment Manufacturer (OEM). These products, such as Windows operating systems, come installed when you purchase a new computer.
OEM软件是给电脑生产厂的版本,无需多说。
* * Full Packaged Product (FPP)–Retail
Physical, shrink-wrapped boxes of licensed product that can be purchased in a local retail store or any local software retailer.
FPP就是零售版(盒装软件),这种产品的光盘的卷标都带有“FPP“字样,比如英文WXP Pro的FPP版本的光盘卷标就是WXPFPP_EN,其中WX表示是Windows XP,P是Professional(H是Home),FPP表明是零售版本,EN是表明是英语。获得途径除了在商店购买之外,某些MSDN用户也可以得到。
* * Volume Licensing for organizations (VLO)
You may enjoy potentially significant savings by acquiring multiple product licenses. Depending on the size and type of your organization.
团体批量许可证(大量采购授权合约),这是为团体购买而制定的一种优惠方式。这种产品的光盘的卷标都带有“VOL“字样,取“Volume“前3个字母,以表明是批量,比如英文WXP Pro的VOL版本的光盘卷标就是WXPVOL_EN,其中WX表示是Windows XP,P是Professional(VOL没有Home版本),VOL表明是团体批量许可证版本,EN是表明是英语。获得途径主要是集团购买,某些 MSDN用户也可以得到。
这种版本根据购买数量等又细分为“开放式许可证”、“选择式许可证”、“企业协议”、“学术教育许可证”等以下5种版本
Open License
Select License
Enterprise Agreement
Enterprise Sub脚本ion Agreement
Academic Volume Licensing
由此可见,平时说的什么select/corp是许可证授权方式,他的出现是为了用若干种不同级别的优惠政策卖同一种软件,通过select/corp许可证授权方式得到的xxx的光盘都是VOL这一种、是并不是有很多种,只不过是相同的VOL光盘配以不同的许可证方式;而Volume Licensing (Product) Keys,即VLK,它所指的只是一个Key(密匙),仅仅是一个为证明产品合法化、以及安装所使用的Key,因为根据VOL计划规定,VOL产品是不需要激活的!
或者说,VLK不是指一种版本,而是指这种版本在部署(deploy)过程中所需要的Key,而需要VLK这种Key的版本应该叫做VOL!只不过在实际中,没有必要强调这种叫法、称呼的准确性,加之很多人的VOL版本光盘是通过企业的选择式许可证、企业协议等方式得到的等等原因,所以才会有很多人叫他为“选择版”等等。
官方网站有一个表格,上面有一句话:“Different products require different Volume Licensing Keys (VLKs). Refer to the table below to make sure you have the correct VLK for your Microsoft product.”,我想这就很好的说明了VLK指的是Key而不是产品了。 很明显的,FPP需要激活,VOL不需要激活。
Tomcat源码解析-容器组件之StandardHost
Container容器用来表示tomcat中servlet容器,负责servelt的加载和管理,处理请求ServletRequest,并返回标准的 ServletResponse 对象给连接器。
Container容器组件
tomcat 将Container容器按功能分为4个组件,分别是 Engine、Host、Context 和 Wrapper。这 4 种容器不是平行关系,而是父子关系。
Lifecycle接口定义tomcat中所有组件的生命周期相关接口方法。Tomcat 定义一个基类LifecycleBase 来实现 Lifecycle 接口,把一些公共的逻辑放到基类中实现。而子类就负责实现自己的初始化、启动和停止等模板方法。
详见 Tomcat架构设计-组件生命周期 Lifecycle
Container接口定义tomcat中所有容器组件的通用接口方法。Tomcat 定义一个基类ContainerBase 来实现Container 接口,把一些公共的逻辑放到基类中实现。
详见 Tomcat架构设计-容器组件基类 ContainerBase
在tomcat中最核心功能就是将一个静态资源目录或一个应用程序部署到容器中。而这个容器就是指得Host容器组件。而静态资源或一个应用程序通过Context容器组件来表示。所谓部署就是加载到Host容器的子组件中。当然虚拟主机除了部署外还又其他功能,包括热部署,懒加载,别名等。
如果想要将一个静态资源目录部署到Tomcat服务器上,tomcat提供了多种部署方式
在server.xml中配置
path表示Context根路径,docBase表示映射静态资源目录
在xmlBase路径下配置xml文件
在$CATALINA_BASE/xmlBase 路径下创建 JavaWebApp.xml,xmlBase配置在Host标签属性中
文件名称表示Context根路径,docBase表示映射静态资源目录
将资源文件拷贝到appBase路径下
appBase路径在Host标签属性中定义,文件名称表示Context根路径。
部署应用程序到appBase目录
appBase是在server.xml文件Host标签appBase属性来定义,appBase可以填写相对路径或者绝对路径,如果是相对路径那么完整路径为 CATALINA_BASE表示tomcat的工作目录
虚拟主机Host可以在设置在使用时在部署静态资源或应用程序。
虚拟主机Host会定期检查appBase和xmlBase目录下新Web应用程序或静态资源,如果发生更新则会触发对应context组件的重新加载
虚拟主机Host可以定义别名。
StandardHost并管理子容器Context组件,以及从父类ContainerBase,LifecycleBase 继承的通用组件。
StandardHost实现了Host接口,在了解StandardHost功能之前我们需要了解
Host接口.
Host接口
StandardHost实现Host接口,Host接口用来对Tomcat中虚拟主机功能配置提供了访问方法。
StandardHost只对虚拟机功能配置做了定义 ,其具体实现由HostConfig来实现。同时负责管理子容器Context组件(下图蓝色),以及从父类ContainerBase(下图红色),LifecycleBase(下图黄色) 继承的通用组件。
tomcat中所有组件都需要经历如下流程。
Tomcat使用Digester解析server.xml,Digester是一款用于将xml转换为Java对象的事件驱动型工具,是对SAX的高层次的封装。相对于SAX,Digester可以针对每一个xml标签设置对应的解析规则。详见 Tomcat相关技术-Digester(二)
Tomcat在Catalina组件初始化阶段调用createStartDigester()创建Digester对象,Digester对象内包含解析server.xml规则,接着通过Digester对象解析server.xml实例化StandardHost,并对部分属性设置值.
server.xml配置
解析Host标签及子标签tomcat使用规则组HostRuleSet,其中定义了解析规则。
CopyParentClassLoaderRule规则
CopyParentClassLoaderRule规则,负责调用次栈顶对象getParentClassLoader获取父类加载,设置到栈顶对象parentClassLoader属性上
LifecycleListenerRule规则
LifecycleListenerRule 规则负责给栈顶对象添加一个生命周期监听器.
接下来初始化开始则进入tomcat组件的生命周期,对于tomcat中所有组件都必须实现Lifecycle,Tomcat 定义一个基类LifecycleBase 来实现 Lifecycle 接口,把一些公共的逻辑放到基类中实现,比如生命状态的转变与维护、生命事件的触发以及监听器的添加和删除等,而子类就负责实现自己的初始化、启动和停止等模板方法。为了避免跟基类中的方法同名,我们把具体子类的实现方法改个名字,在后面加上 Internal,叫 initInternal、startInternal 等。
StandardHost父类对容器的初始化、启动和停止等模板方法进行的了默认实现。子类容器只需要重写父类实现即可实现扩展。
StandardEngine其他生命周期实现均从父类ContainerBase继承。
为添加的子容器设置生命周期监听器MemoryLeakTrackingListener
每一个容器组件都有一个 Pipeline 对象,Pipeline 中维护了 Valve 链表,默认时每一个Pipeline存放了一个默认的BasicValue,
这里每一个Value表示一个处理点,当调用addValve 方法时会将添加Vaule添加到链表头部,Pipeline 中没有 invoke
方法,请求处理时Pipeline只需要获取链表中第一个Valve调用incoke去执行,执行完毕后当前Value会调用
getNext.invoke() 来触发下一个 Valve 调用
每一个容器在执行到最后一个默认BasicValue时,会负责调用下层容器的 Pipeline 里的第一个 Valve
对于StandardHost容器来说默认情况存在三个Value(阀门),分别是 AccessLogValve (构建时读取server.xml时), StandardHostValve (构建实例化时), ErrorReportValve (启动时)。
记录访问日志,这里是一个通用组件,后续会由专题讲解
高通 ap_standard_oem test_device的区别是什么
ap_standard_oem带源码,可以自己修改代码编译镜像;
test_device是高通发布的编译好的镜像。