top-image

Archives for Turbine

Turbine History Versions
Turbine是基于Servlet的框架包,也是开放源代码Jakarta项目。目前还没有关于Turbine的大量文档。它类似于Struts,但是有一些主要区别。突出的一点就是它并没有与JSP耦合。Turbine的特点是它提供了大量可重用的组件。此框架包中包含了大量组件,但是这些组件是离散的。它似乎应该给出更多的组件库,但是由于它缺少文档,所以很难掌握完整的体系结构。 相关站点/下载地址:http://jakarta.apache.org/turbine/ 1. 缘起 Jetspeed是Apache Jakarta小组的开放源码门户系统。它使得最终用户可以通过WAP手机、浏览器、PDA等各种设备来使用各种各样的asp.cn/class=wordstyle>网络资源(比如应用程序、数据以及这之外的任何asp.cn/class=wordstyle>网络资源)。在这里,Jetspeed扮演了一个处于信息和用户间的hub的角色。 1999年左右,Jetspeed立项并开始运作。很快,Jetspeed的发展就超越了最初立项时的目标,以任何人都难以想象的速度发展。用 Jakarta小组自己的话说,就是:“The only problem is that this was beyond the scope of this project.”。 现在,Jetspeed逐渐演变成了一个基于Turbine(也是Jakarta小组的杰作)这个asp.cn/>网络应用框架(Frameworks)的Web应用引擎。 1.1 Jetspeed 简单的看,Jetspeed就是添加了门户组件的Turbine。它本身既是Portlet容器,又包含了大量的实用Portlet。在Jetspeed中,Portlet的管理主要由以下两种文件完成: l        .xreg注册文件 l        .psml配置文件 .xreg文件一般放置在webapp-name/WEB-INF/conf目录下,文件名不限。一个Portlet必须通过.xreg文件注册才能在 Jetspeed中使用。每一个Portlet组件都是能够被系统实例化,用于输出特定Web文档的java类。 .psml文件一般放置在webapp-name/WEB-INF/psml目录下,文件名不限。.psml设定了页面内容的显示模式,比如:一个页面如何布局,分为多少列、每列能有多少个窗格、各个窗格的内容是由哪个Portlet输出的等等内容。 2. 概述 Turbine是一个基于Servlet的Web Application Frameworks,使得java开发者可以快速、安全的构建自己的asp.cn/>网络应用。 Turbine是一个完全的MVC应用框架,主要由以下几个部分组成: l        表述层:Velocity(又是Jakarta小组的杰作,一个基于Java的模版引 擎)或JSP l        数据层:Torque和Peers l        控制层:Turbine l        HTML Form Validation:Intake l        日志:Log4j和Turbine2中的Logging Service l        Service Frameworks:Turbine (在Turbine3中,此部分被称为Fulcrum) 本文主要介绍Turbine中的控制层,其余部分请参考各自的文档或参考资料中提到的站点。 3. 基石 Turbine主要由五部分组成,如下图所示: aspectratio="t" v:ext="edit"> 我们先对这五个部分进行单独介绍,再介绍Turbine的详细流程。 3.1 Action Action是一个执行特定事务的模块,Turbine中的SessionValidator就是一个典型的Action。 在用户提交一个HTML表单的时候,其中有一个隐含的字段就包含了将要被执行的Action的信息。Action机制使得java开发者更容易的处理用户提交的数据。例如,对于“Logout”这个事务,在系统的多个地方都可能被调用;因此,将Logout的事务处理流程写成一个可重用的模块,使得这个事务可以被更方便的调用。这个可重用的模块就是一个Action。通过系统中多种多样的Action,每个Action处理用户数据中不同的信息,这样,整个系统就显得更加简单明快,更易编写、扩充与维护。 并且,Turbine通过Action机制中,还可以使程序流程更加灵活多变。例如,在Page的处理过程中,可以通过执行特定的Action,帮助判断其后将要显示哪个Screen。这时,Action的执行结果就可以作为以后程序的判断依据。 Action是系统中可重用的事务处理组件,Action机制使得Turbine拥有灵活、清晰的事务处理流程。 3.2 Page Page模块是在页面生成过程中最先被执行的一个模块,它可以被认为是Action、Layout、Screen、Navigation之间的协调者和组织者。 一般情况下,Page先执行用户请求中的指定的Action(如果有的话);然后,根据其后要装载的Screen来选择并执行相应Layout。请注意,在这个时候,究竟是执行哪一个Screen,可能会因为Action执行结果的不同而改变。并且,Screen的Layout也可能因为 TurbineResources.properties配置文件中对DefaultLayout的设置不同而改变。 3.3 Screen Screen模块从根本上说,是网页的“躯干”。这也是生成网页中的HTML代码的地方。Screen是整个Turbine中最主要的表述(View)部分。 Screen是由Layout调用的。 请注意:此时,你完全可以调用各种外部模块,比如EJB,来获得数据以构建你的HTML页面。也可以通过JSP,甚至是使用Blog来构建页面内容^_^。 3.4 Navigation 一般情况下,网站都有自己的Top & Bottom Navigation; ...more»
Turbine Description
1. IOC Turbine 和 已经废弃的Avalon 一样,是属于第一型的IOC,有统一的Service接口,你可以很方便的写自己的Service, 然后在Turbine.propterties 里注册。依据Turbine的代码习惯,你最好配套提供一个由静态方法组成的方便调用的工具类。比如我集成 Sqlmap 到Turbine中,于是编写了SqlMapService 类及一个SqlMap 类,SqlMap 类中静态方法基本就是 getService().someMethod() 的形式。 Turbine.properties 是Turbine核心的配置文件,Service的注册格式很简单,比如: Java代码 1. Service.XXXServices.classname = com.xyz.services.XXXServicesImpl Service.XXXServices.classname = com.xyz.services.XXXServicesImpl 相信不用我多说,大家也清楚servlet初始化时的工作程序了。 Service 有一些固定的参数,比如 Java代码 1. services.XXXService.earlyInit= true services.XXXService.earlyInit= true earlyInit 就是设置 Service 是否是 lazy initializtion。 自己实现的Service 需要的参数以类似的形式配置,在 Service.init() 方法中可以通过 getConfiguration() 获取 commons-configuration 的一个Configuration 对象,再取出所需的参数。 所以 Turbine 的IOC对比 spring 和 pico,看起来灵活性不够,不过Turbine的Service也相对感觉容易理解。对于很多项目来说,其实已经够用了而且至少我所经历的项目,配置文件通常变化很小。 2. Torque 很多人都没有听说过Torque,其实它可能是最早的ORM实现,原理简单说就是通过一个映射数据库表的xml文件,通过genarator生成 java类。跨数据库的支持则是利用velocity制作各种数据库的SQL特殊语句模板,比如常见的limit、offset子句 等等。 Torque 结合Turbine提供的IntakeService 也可以方便的实现Validator。 使用Torque开发还是比较方便的,麻烦的地方大概就是数据库的字段变动,必须重新genarate java。缺点还有动态构造的sql语句死板(没有LEFT JOIN),cache, 级连等等也不完善。 3.  Velocity Turbine 和 Velocity 的集合应该是现有框架中最紧密的。几乎没发现有人用Turbine 而不用 velocity 的,另外Turbine 还提供了一个PullService提供VelocityTools 的 toolloader ...more»
Chinese Template in Turbine
中文vm模版输出乱码。 原因:Velocity在解析模版的时候需要指定模版的编码。默认是ISO-8859-1。这个编码无法存储双字节汉字,于是页面变成乱码。 解决:在TRP文件中,打开默认被注释的参数: services.VelocityService.input.encoding=UTF-8 当然所有的vm模版也必须用上述指定的编码GB18030. #services.VelocityService.runtime.log=org.apache.velocity.runtime.log.NullLogSystem services.VelocityService.input.encoding=UTF-8 services.VelocityService.output.encoding=UTF-8 locale.default.charset=UTF-8 input.encoding=UTF-8 output.encoding=UTF-8 ...more»
Turbine Security Example Using META
!!! How to build a Turbine Application with Login/Logout using M.E.T.A. The regular setup process using turbine:setup will give you a skeleton application without login and logout capabilities. This page should show you how to add Login and Logout to the skeleton to enforce User login before using a web application. This example assumes that you are familiar with the M.E.T.A. plugin ...more»
bottom-img

Powered by Yahoo! Answers