Change Dir

先知cd——热爱生活是一切艺术的开始

统计

留言簿(18)

积分与排名

“牛”们的博客

各个公司技术

我的链接

淘宝技术

阅读排行榜

评论排行榜

Turbine框架

首先,必须承认,turbine作为一个开发框架,已经快绝迹了,阿里巴巴的webx框架是基于turbine做的,所以这里简单介绍一下,如果是阿里系新入职的同学,可以参考一下,当然任何开发人员如果感兴趣turbine的设计,都欢迎。

turbine是什么?

turbine是一个应用开发框架,是一个开发web应用的工具箱,100%纯java,且基于jdk1.3及以上。j2ee兼容且基于servlet,面向MVC构建。

turbine的框架架构overview如下:

image

turbine的代码结构包含了services、modules和util几个大类,在上图中可见,在servlet基础之上,以MVC为基础结构,modules包含了view部分及action,view主要是pages,其中有三种具体的module——screen、layout和navigation,action作为controller存在,toolbox提供了很多通用的tool,service则是整个框架的插件。一个完整的请求处理流程如下:

image

请求到来,turbine的controller处理,view部分渲染页面,然后响应输出。

就顺着这个流程,分析一下turbine的架构,对于view部分,我们最直观想到的就是pages,page模块值包含了几个概念,是jsp的?还是velocity的?仅此而已。那么,以一个velocity页面为例,如何组织呢?turbine讲究的是“约定胜于配置”,记住这句真言,也就可以理解turbine了。在开发应用中,要建立三个页面目录,分别是screen、layout和navigation,screen是页面的主体内容,layout是页面的布局,而navigation则是一些页面修饰元素,比如下面这个页面结构:

image

这三个部分的调用顺序如下:

image

因为约定的代码结构是在三个目录下写对应名字的java代码,因此名字如果不一致,那么就会出错。当然,页面模板目录有默认的结构,如果在对应的目录下找不到文件,就会读取default.vm文件。

image

类似servlet,写一个java文件对应处理screen页面,那么代码可能是这样的:

image

可以看到,这种处理代码很像servlet,方法就像是servlet标准中的doGet和doPost,只不过参数进行了封装。其实,turbine就是一个servlet,看看turbine的源码,Turbine类继承了HttpServlet,实现了doGet和doPost方法,除了一开始初始化一系列配置相关的变量外,在接到一个http请求(get)后,turbine会执行doGet方法,turbine封装了request和response,构建了一个叫做RunData的对象,Rundata是个接口,具体实现是DefaultTurbineRunData,其内部提供了获取http各种数据的方法接口。在每个请求周期,turbine都会利用TurbineRunDataService新建一个RunData,将所有基于servlet的请求相关的东西塞到这个data中。然后,利用从request中得到的请求地址,再调用PageLoader找到对应的Page,执行其中的build方法,其中DefaultPage里会通过LayoutLoader和ScreenLoader来定位到对应的layout和screen,然后执行其中的build相关方法。这样,一整套请求执行就完成了。值得说明的就是如果是表单提交,那么多数情况会多出一个action的执行,也是在page里进行的。如下图

image

至于turbine中的tool,这类工具是通过配置,以“拉”模式被应用的。当应用启动后,在vm页面中以$开始调用某个tool的时候,就会初始化这个tool。当然,这里就用到了TurbinePullService。

在初步了解了turbine后,如果使用过webx,那么就会知道并一定程度理解了webx的设计;没使用过的,结合自己用过的mvc框架,也可以了解一些框架设计的思路。

参考资料:

Turbine Tutorial

Apache Turbine

本文全部图片都截取自Turbine Tutorial,使用请注明

posted on 2012-05-17 13:54 changedi 阅读(2713) 评论(2)  编辑  收藏 所属分类: Java技术

评论

# re: Turbine框架 2012-09-07 11:16 tubine

官方文档似乎还没有你讲解的详细,官方文档都不全。  回复  更多评论   

# re: Turbine框架 2014-08-11 18:15 zi_hao

你好,能把你这个helloword完整代码给我一份不,zi_hao_jun@163.com谢谢!想找个例子真难,  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: