Webx学习笔记(一)webx基础简介

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的层次

     三个大层次:

                       Webx学习笔记(一)webx基础简介_第1张图片

  1. SpringExt:基于Spring,提供扩展组件的能力。它是整个框架的基础。

  2. Webx Framework:基于Servlet API,提供基础的服务,例如:初始化Spring、初始化日志、接收请求、错误处理、开发模式等。Webx Framework只和servlet及spring相关 —— 它不关心Web框架中常见的一些服务,例如Action处理、表单处理、模板渲染等。因此,事实上,你可以用Webx Framework来创建多种风格的Web框架。

  3. 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表示开发模式启动
在生产模式和开发模式下有一些不同的地方,具体的内容见官方文档。

你可能感兴趣的:(学习笔记)