Webx-webx turbine

整个webx框架分成三个层次,webx turbine建立在webx framework的基础上,实现页面渲染、布局、数据验证、数据提交等一系列工作。

设计理念

 

  • 页面驱动
  • 约定胜于配置

页面驱动

创建一个web应用,一般会经历三个阶段:产品设计、用户界面设计、功能实现。分别由产品设计师、用户界面设计师和程序员协作完成。

页面驱动的意思是,在程序员介入以前,让界面设计师可以直接创建模板,并展示模板的效果。在webx turbine中,界面设计师可以通过pull tools工具来实现页面跳转、简单的表单验证、字符串操作等,这是因为pull tool服务预先准备了很多模板中可用的工具。

 

约定胜于配置

规则是预先定义的,工程师只需要按着规则来做事,就不需要额外的“配置”。

只需要将模板放在指定的目录、按照预定的方式命名module(也就是screen、action、control等),就不需要额外的配置。

 

 

  • screen代表页面的主体。
  • layout代表页面的布局。
  • control代表嵌在screen和layout中的页面片段。

处理页面的基本流程

webx turbine的处理流程被定义在pipeline中,下面是一个推荐的pipline配置

<services:pipeline xmlns="http://www.alibaba.com/schema/services/pipeline/valves">
<!-- 初始化turbine rundata,并在pipelineContext中设置可能会用到的对象(如rundata、utils),以便valve取得。 -->
<prepareForTurbine />
<!-- 设置日志系统的上下文,支持把当前请求的详情打印在日志中。 -->
<setLoggingContext />
<!-- 分析URL,取得target。 -->
<analyzeURL homepage="homepage" />
<!-- 检查csrf token,防止csrf攻击和重复提交。假如request和session中的token不匹配,则出错,或显示expired页
面。 -->
<checkCsrfToken />
<loop>
<choose>
<when>
<!-- 执行带模板的screen,默认有layout。 -->
<pl-conditions:target-extension-condition extension="null, vm, jsp" />
<performAction />
<performTemplateScreen />
<renderTemplate />
</when>
<when>
<!-- 执行不带模板的screen,默认无layout。 -->
<pl-conditions:target-extension-condition extension="do" />
<performAction />
<performScreen />
</when>
<otherwise>
<!-- 将控制交还给servlet engine。 -->
<exit />
</otherwise>
</choose>
<!-- 假如rundata.setRedirectTarget()被设置,则循环,否则退出循环。 -->
<breakUnlessTargetRedirected />
</loop>
</services:pipeline>


webx framework的处理流程,从webxframeworkfilter接收请求,并且一路顺利到达pipeline,然后pipeline开始依次执行它的valves。

1.<analyzeURL>-分析URL

分析URL的目的是取得target,有一个可选的参数homepage,在用户访问的URL中没有提供path信息时,会被使用。

2.<choose>-多重分支

target-extension-condition extension="null, vm, jsp"的意思是target的后缀不存在(null)或为“jsp”或为“vm”。

3.<performAction>-执行action

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

4.<performTemplateScreen>-查找并执行screen

假设target为xxx/yyy/zzz,那么webx turbine会依次查找下面的screen模块:

  • screen.xxx.yyy.Zzz
  • screen.xxx.yyy.Default
  • screen.xxx.Default
  • screen.Default

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

5.<renderTemplate>-渲染模板

这里会用到两个规则:target映射成screen template,以及target映射成layout template。

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

  • /template/layout/xxx/yyy/zzz
  • /template/layout/xxx/yyy/default
  • /template/layout/xxx/default
  • /template/layout/default

layout模板如果找不到,就直接渲染screen模板,如果存在,则把渲染screen模板后的结果,嵌入到layout模板中。layout模板和screnn模板中,都可以调用control,每个页面只有一个screen,却可以有任意多个controls。

6.<breadUnlessTargetRedirected>-内部重定向 

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

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

依赖注入

 

1.Spring原生注入手段

webx既然建立在spring基础上,当然支持spring原有的依赖流入。但需要注意,你只能注入相同scope或较大的scope的bean。

2.参数注入

有一些对象,是无法通过Spring的bean来注入,但webx turbine提供了一个可扩展的机制(DataResolver service)注入。

最后欢迎大家访问我的个人网站:1024s

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值