webx概念学习

来源:互联网 发布:svd算法原理 编辑:程序博客网 时间:2024/05/27 20:39

所有的开源框架都在互相学习,并趋于相似。

webx还缺少什么

  • 目前webx只支持服务端的表单验证,而没有直接支持客户端的js验证。
  • 目前webx没有直接支持ajax编程。
  • 目前webx没有直接支持rest编程。
  • 目前webx没有直接支持web  flow。

webx设计理念

框架的本质是“扩展”,纵观开源的web框架,做得比较好的框架,是把框架建立在另一个基础框架之上,这个基础框架的作用是:组装模块、提供扩展机制。一个web框架的好坏,往往不是由它所实现的具体功能的好坏决定 的,而是由其用的基础框架的好坏决定的。webx建立在springext的基础上,sprintext是对spring的扩展。
设计良好的模块,应该是层化的。层次的设计,使软件中的每一个部分都可被增强或替换。webx有三个大层次:
(1)sprintext:基于spring,提供扩展组件的能力,它是整个框架的基础。
(2)webx framework:基于Servlet API,提供基础的服务,只各servlet及spring相关,它不关心web框架中常见的一些服务,因此你可以用webx framework来创建多种风格的web框架。
(3)web Turbine:基于webx framework,实现具体的网页功能。

并非所有的开发者都需要使用webx的全部,
  • 仅使用springext,适用于非web应用、单元测试
对于非web应用和单元测试,但却想拥有spring和springext的功能,可以直接创建 springext容器。
import java.io.File;import org.springframework.core.io.FileSystemResource;import com.alibaba.citrus.springext.support.context.XmlApplicationContext; ...XmlApplicationContext parentContext = new XmlApplicationContext(        new FileSystemResource(new File(srcdir, "parent.xml")));  XmlApplicationContext context = new XmlApplicationContext(        new FileSystemResource(new File(srcdir, "app.xml")), parentContext); Object mybean = context.getBean("mybean");



  • 仅使用springext及web组件,在此基础上运行spring mvc、structs等非webx框架
非webx框架也可以使用springext的全部功能,WEB-INF/webx.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="        http://java.sun.com/xml/ns/j2ee  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd    ">    <!-- 初始化日志系统,装载/WEB-INF/log4j.xml或/WEB-INF/logback.xml -->    <listener>        <listener-class>com.alibaba.citrus.logconfig.LogConfiguratorListener</listener-class>    </listener>    <!-- 初始化Spring容器,装载/WEB-INF/webx.xml, /WEB-INF/webx-*.xml -->    <listener>        <listener-class>com.alibaba.citrus.webx.context.WebxContextLoaderListener</listener-class>     </listener>    <!-- 下面配置:Spring MVC、Struts的filter、servlet、mapping... -->    ……</web-app>

这里使用了webx的webcontextloaderListener来初始化spring容器,而不是用spring原生的contextloaderListener。

  • 仅使用webx framework,创建新的web框架,
修改/web-inf/webx.xml以创建新的web框架
<webx-configuration xmlns="http://www.alibaba.com/schema/services">    <components defaultControllerClass="com.myframework.MyController">         <rootController class="com.myframework.MyRootController" />     </components></webx-configuration>


  • 使用整个webx框架,定制turbine
假如想使用几乎大部分的webx的功能,但希望对少数步骤进行改进,可以修改pipeline,webx turbine本身定义了一套pipeline的实现,但是你完全可以修改它,插入一些步骤,删除一些步骤、修改一些步骤。最常见的一个需求,是在webx turbine中添加权限验证,只需要插入一个步骤就可以做到。


webx是阿里巴巴开源定制可扩展的JavaEE框架,框架里有TemplateAction,TemplateScreen,AbstractModule,TemplateControl,页面使用velocity模板,持久层使用ibatis,Bean容器使用的是spring。

webx.xml:每个webx应用,都需要有一个webx.xml配置文件,这个文件定义了webx所用到的所有services的配置。

所有和前台展示有关的文件,即模板,都放在template目录下,vm后缀的velocity的模板。


Modules是基本模块,包括screen, control, action。

(1)screen用于处理页面显示的module,主要功能就是展示一个页面。

(2)control,和screen类似,但可以被screen或layout引用。

(3)action,处理用户请求的module。


webx执行流程:

如果在浏览器中输入http://localhost:8080/fuwuxian/login.htm

1.分析url的成分,取得target:/login.vm

(1)fuwuxian Context Path,服务器反映这个请求交给fuwuxian接管。

(2)login.htm Servlet Path,在web.xml中把*.xml映射到webx controller servlet,所以webx controller servlet接管这个请求。

(3)根据webx默认的映射,login.htm会被映射为login.vm

2.根据target查找screen模板,/screen/login.vm

假如target的值:/xxx/yyy/login.vm,那么:

(1)在/template/screen目录下,找到/xxx/yyy/login.vm模板。

(2)依次查找screen类:

xxx.yyy.Lgin(如果找不到,下一个)

xxx.yyy.Default(如果找不到,下一个)

xxx.Default(如果找不到,下一个)

Default(如果找不到,下一个)

TemplateScreent(系统l默认screen,不可能找不到)

3.执行screen类,并渲染screen模板

(1)如果存在Layout布局,渲染layout,执行screen类,并渲染screen模板。

(2)根据target查找layout模板,渲染在layout模板中引用的control。



0 0
原创粉丝点击