• ? 初识Webx 3


    初识webx 2: http://www.cnblogs.com/lddbupt/p/5552351.html

    Webx Turbine建立在Webx Framework的基础上,实现了页面渲染、布局、数据验证、数据提交等一系列工作。

    Webx Turbine建立在pipeline的基础上,基于页面驱动和约定胜于配置的理念定义了一组处理页面的流程。Webx Turbine的灵活性在于,你可以轻易定制pipeline,以改变它的任何一个方面。

    设计理念

    创建一个WEB应用,一般会经历三个阶段:产品设计、用户界面设计、功能实现。通常,界面设计师只完成纯静态页面的设计,需要由程序员来把静态页面转换、分解成模板,才能在最终的WEB应用中被使用。

    Webx Turbine推崇页面驱动的理念。它的意思是,在程序员介入以前,让界面设计师可以直接创建模板,并展示模板的效果。页面驱动的反面,是程序驱动,或者是Action驱动 —— 这是多数WEB框架的模式。

    页面驱动不止提高了开发的效率,也使界面设计师在早期阶段,就可以利用框架所提供的工具,做一些以前做不到的事,例如:页面跳转、简单的表单验证、字符串操作等。这些工具是通过Webx Turbine中的一个服务来完成的:pull tools。Pull tools服务预先准备了很多模板中可用的工具,让模板可以“按需”取得这些对象 —— 这就是pull这个单词的意思。

    Webx Turbine的另一个理念,是约定胜于配置。“约定”即规则。规则是预先定义的,工程师只需要按着规则来做事,就不需要额外的“配置”。对比其它一些框架 —— 往往每增加一个页面,都需要在配置文件中增加若干行内容。

    Webx Turbine的规则主要是指一系列映射规则。

    将URL映射成target.

    target是一个抽象的概念,指明当前请求要完成的任务. target由pipeline来解释. 它可能被解释成模板名,也可能被解释成别的东西.

    将target转换成模板名.

    模板用来展现页面的内容。Velocity、Freemarker、JSP都可以作为模板的格式。但在WEBX中建议使用Velocity模板

    将target转换成layout布局。

    可以为一组页面选择相同的布局,为另一组页面选择另一种布局。

    将target转换成module。

    在webx turbine中,module是指screen, action, control等。大致相当于其他框架中的action或controller

    webx turbine的页面构成如下图所示。其中,Screen代表页面主体,layout代表整个页面的布局,control代表嵌在screen和layout中的页面片段。Webx Turbine页面的构成

    处理页面的基本流程

    假设用户以URL:http://localhost:8081/来访问Webx应用。Webx Framework的处理流程,从WebxFrameworkFilter接收请求,并且一路顺利到达pipeline。然后Pipeline开始依次执行它的valves

    image

    image

    Tips:

    分析URL的目的是取得target。target不代表模板名,也不代表类名Target只是一个抽象的概念 —— 当前页面需要达成的目标。Target可能被后续的valves解释成模板名、类名或者其它东西。

    和其它框架中的action概念不同,在Webx Turbine中,action是用来处理用户提交的表单的

    Screen类的功能,通常是读取数据库,然后把模板所需要的对象放到context中

    关于渲染模板:

    假设target为xxx/yyy/zzz,那么Webx Turbine会查找下面的screen模板/templates/screen/xxx/yyy/zzz。Screen模板如果未找到,就会报404 Not Found错误。 找到screen模板以后,Webx Turbine还会试着查找下面的layout模板:

    • /templates/layout/xxx/yyy/zzz

    • /templates/layout/xxx/yyy/default

    • /templates/layout/xxx/default

    • /templates/layout/default

    Layout模板如果找不到,就直接渲染screen模板;如果存在,则把渲染screen模板后的结果,嵌入到layout模板中。

    Layout模板和screen模板中,都可以调用control。每个页面只有一个screen,却可以有任意多个controls。

    在screen和action中??,可以进行“内部重定向”。内部重定向实质上就是由<breakUnlessTargetRedirected>实施的 —— 如果没有重定向标记,就退出;否则循环到<loop>标签。

    和外部重定向不同,外部重定向是向浏览器返回一个302303 response,其中包含Location header,浏览器看到这样的response以后,就会发出第二个请求。而内部重定向发生在pipeline内部,浏览器并不了解内部重定向。

    依赖注入

    支持Spring原有的依赖注入手段。

    在使用Spring原生注入手段时,需要注意beans的scope。你只能注入相同scope或较大的scope中的bean。例如,screen/action/control的scope为singleton,因此用@Autowired注入时,只能注入singleton的对象,不能注入诸如request、session等较小的scope对象。

    但在Webx中,你可以HttpServletRequestHttpServletResponseHttpSession对象注入到singleton对象中。为什么呢?原来,<request-contexts>对这几个常用对象进行了特殊处理,将它们转化成了singleton对象。

    有一些对象,是无法通过Spring的bean来注入的,例如:用户提交的参数、表单等。好在Webx Turbine提供了一种可扩展的机制(DataResolver service),通过它,我们可以在screen/control/action的方法中注入任意对象。

    定制Webx Turbine

    通过改进pipeline中的valves,我们很容易改变webx turbine的行为。

    最常见的一种需求,是要对页面进行授权 —— 只有符合条件的用户才能访问相应的页面。在pipeline中,很容易添加这样的逻辑:

    image

    事实上,你甚至可以重写整个pipeline,以实现另一种风格的WEB框架。

    参考文献

    http://openwebx.org/docs/turbine.html

  • 相关阅读:
    sql试题
    sql中的游标
    SQL Server存储过程 对数组参数的循环处理
    MongoDB安装并随windows开机自启
    延长或控制Session的有效期的方法总结
    回忆我们经典的开发工具(转)
    多线程实例,占用CPU过多
    啥叫单例模式?
    判断字符或字符串里是否有汉字
    百年历19552055年
  • 原文地址:https://www.cnblogs.com/lddbupt/p/5554373.html
Copyright © 2020-2023  润新知