1框架基本介绍
框架的本质就是“扩展”(需要建立良好的扩展机制):
一个软件框架必须符合如下要素:
Inversion of Control 反转控制 | 应用的流程不是由应用控制的,而是由框架控制的。 |
Default Behavior 默认行为 | 框架会定义一系列默认的行为。 |
Extensibility 扩展性 | 应用可以扩展框架的功能,也可以修改框架的默认行为。 |
Non-modifiable Framework Code 框架本身不可更改 | 框架在被扩展时,自身的代码无须被改变。 |
基础框架:
纵观开源的Web框架,做得比较好的框架,都有一个共性 —— 它们并不是简单地实现Web应用所需要的功能(诸如Action、模板、表单验证等),而是把框架建立在另一个基础框架之上。这个基础框架的作用是:组装模块;提供扩展机制。建立在这种基础上的Web框架有很好的适应性和扩展性,可以应对Web应用不断变化和发展的需求。
层次化:
设计良好的模块,应该是层次化。
层次之间有如下的关系:
上层定义规则,下层定义细节;(上层、下层也可称为内层、外层)
上层是抽象的,下层是具体的;
越上层,越稳定(越少改变);越下层,越易变。
依赖倒转(Dependency Inversion)。下层(具体)依赖上层(抽象),而不是上层依赖下层。
下层扩展上层时,不需要修改到上层的任何代码和配置。即符合开闭原则(Open-Closed Principle简称OCP – Open for extension, Closed for modification)。
每一层均可被替换。
层次化的设计,使软件中的每一个部分都可被增强或替换。
设计一个层次化的组件,可以从下面几方面来考虑:
切分功能。每个组件专心做一件事。
分析哪些会改变,哪些不会改变。不变部分固化在组件中,可能会改变的部分抽象成接口,以便扩展。
考虑默认值和默认扩展。默认值和默认扩展应该是最安全、最常用的选择。对于默认值和默认扩展,用户在使用时不需要额外的配置。
Webx鼓励层次化的模块设计,而SpringExt提供了创建和配置层次化组件的机制。
2 webx框架基本介绍
Webx是一套基于Java Servlet API的通用Web框架。
webx建立在SpringExt的基础上,具有超强的扩展能力。你可以使用全部的Webx,也可以使用部分Webx。你也可以比较容易地用SpringExt做出自己的可扩展组件。
Webx的优势:
成熟可靠性
开放和扩展性:
对Spring的直接支持 —— Spring是当今主流的轻量级框架。Webx 3.0和Spring MVC一样,完全建立在Spring框架之上,故可运用Spring的所有特性。
扩展性 —— Webx 3.0对Spring做了扩展,使Spring Bean不再是“bean”,而是升级成“组件”。一个组件可以扩展另一个组件,也可以被其它组件扩展。这种机制造就了Webx的非常好的扩展性,且比未经扩展的Spring更易使用。
开放性 —— Webx被设计成多个层次,层次间的分界线很清晰。每个层次都足够开放和易于扩展。你可以使用全部的Webx,也可以仅仅使用到Webx的任何一个层次。
Webx还缺少什么?
和目前快速发展的开源框架相比,Webx似乎不够时髦,因为它还缺少对很多流行功能的直接支持 —— 并非不支持,而是没有方便的方法来直接完成。例如:
目前Webx只支持服务端的表单验证,而没有直接支持客户端的JS验证。
目前Webx没有直接支持AJAX编程。
目前Webx没有直接支持REST编程。
目前Webx没有直接支持Web Flow。
2.1webx的层次
三个大层次:
SpringExt:基于Spring,提供扩展组件的能力。它是整个框架的基础。
Webx Framework:基于Servlet API,提供基础的服务,例如:初始化Spring、初始化日志、接收请求、错误处理、开发模式等。Webx Framework只和servlet及spring相关 —— 它不关心Web框架中常见的一些服务,例如Action处理、表单处理、模板渲染等。因此,事实上,你可以用Webx Framework来创建多种风格的Web框架。
Webx Turbine:基于Webx Framework,实现具体的网页功能,例如:Action处理、表单处理、模板渲染等。
2.2Webx Framework的任务
初始化Spring容器
初始化日志系统
增强request/response/session的功能
提供pipeline流程处理机制
异常处理
开发模式
一、初始化spring容器,在web.xml中添加监听器:
<listener>
<listener-
class
>com.alibaba.citrus.webx.context.WebxContextLoaderListener</listener-
class
>
</listener>
|
WebxContextLoaderListener用于初始化Spring,搜索WEB-INF目录下的子应用配置文件,为每个子应用创建Spring容器
WebxContextLoaderListener是从spring的ContextLoaderListener派生出来的。ContextLoaderListener我们还是比较熟悉的,在使用spring的时候会在web.xml中配置。 |
二、初始化日志系统
<listener>
<listener-
class
>com.alibaba.citrus.logconfig.LogConfiguratorListener</listener-
class
>
</listener>
|
LogConfigurationListener用于初始化日志系统(使用配置文件log4j.xml或logback.xml)
三、webx响应请求
当Webx Framework接收到一个来自WEB的请求以后,实际上它主要做了两件事:
首先,它会增强request、response、session的功能,并把它们打包成更易使用的RequestContext对象。
其次,它会调用相应子应用的pipeline,用它来做进一步的处理。
假如在上面的过程中出现异常,则会触发Webx Framework处理异常的过程。
四、pipeline流程控制
Pipeline的意思是管道,管道中有许多阀门(Valve),阀门可以控制水流的走向。Webx Framework中的pipeline可以控制处理请求的流程的走向
五、异常处理机制
当应用发生异常时,Webx Framework可以处理这些异常。
六、开发模式工具
Webx Framework提供了一个开关,可以让应用运行于“生产模式(Production Mode)”或是“开发模式(Development Mode)” 。
<services:webx-configuration>
<services:productionMode>${productionMode:
true
}</services:productionMode>
</services:webx-configuration>
|
productionMode:true表示开发模式启动 在生产模式和开发模式下有一些不同的地方,具体的内容见官方文档。 |