分享
 
 
 

Turbine实战(上)

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

1 综述

Turbine的简介和控制流程请参见Turbine简述》,本文主要描述Turbine2.2应用的开发步骤。

根据我们不同的需要,可以有三种方式来使用Turbine。我们可以任选其一或三者皆取,这取决于我们自己:

l 当成一个Servlet Frameworks,Turbine作为其中的Controller

l 当成一个Framework Code Library

l 当成一个Object-Relational Tool

不论你想如何使用Turbine,都只需要简单的使用turbine.jar文件就行了。换句话说,比如你想使用Turbine的连接池,只需要把turbine.jar添加到你的ClassPath里,然后在你的应用里用适当的代码告诉Turbine,配置文件可以在哪里获取,就可以了。

Turbine现在已经发展成了一个庞大的、容易使人畏缩的代码库(Codebase)。虽然如此,但是Turbine拥有清晰的组织形式,使人们能轻松的辨认出各部分的代码的功用。

1.1 Code Organization

Turbine的代码分为以下几个部分:

l org.apache.turbine.modules - 这就是Turbine中的Module system。有关各个Module的详细介绍请参见Turbine简述》

l org.apache.turbine.om - OM的意思是Object Model。这部分代码就是表现Turbine的Object Model是如何构筑的地方,这里到处充斥着Turbine对RDBMS的处理J。

l org.apache.turbine.services - 这部分就是Turbine的Service Framework。Service Framework在Turbine中是一个非常重要的方面。这些Service处理着各种各样的事务,比如数据库连接池、比如日志服务等等。

l org.apache.turbine.torque - 这就是Turbine的数据持久层。它能根据定义好的XML文件产生出针对特定数据库的.sql,这样的话,我们就很容易构建出一个Object Relational的系统。

l org.apache.turbine.util - 顾名思义,这就是Turbine的工具包。这里提供了许许多多的在Web Application里经常会用到的工具。

2 演练

2.1 TDK

为了更方便的做好的演练,我们需要使用到TDK。

Turbine Development Kit (TDK) 是Turbine、Tomcat以及一大堆jar、文档的集合。通过它,我们能够更容易的学习和开发Turbine Application。

2.1.1 TDK的安装

TDK详细的安装说明请参见参考资料3,本文不再赘述。不过该文的叙述中,仅给出了MySQL数据库的连接方法,鉴于Oracle的使用非常广泛,在此给出Oracle的连接方法:

# -------------------------------------------------------------------

#

# D A T A B A S E S E T T I N G S

#

# -------------------------------------------------------------------

database.name = newapp

database = oracle

createDatabaseUrl = java:oracle:thin:@192.168.99.XXX:1521:SID

buildDatabaseUrl = java:oracle:thin:@192.168.99. XXX:1521:SID

databaseUrl = java:oracle:thin:@192.168.99. XXX:1521:SID

databaseDriver = oracle.jdbc.OracleDriver

databaseUser = system

databasePassword = manager

databaseHost = 192.168.99. XXX

Okay,大家都已经安装好TDK和Turbine Data Manager示例了吧。那么,我们现在就开始了。

2.2 Turbine Data Manager

访问Turbine Data Manager(TDM)的首页,我们看到了什么:

查看webapp-name/templates/app/layouts下的Login.vm文件,其内容如下:

<table width="100%">

<tr>

<td colspan="2">

$navigation.setTemplate("/DefaultTop.vm")

</td>

</tr>

<tr>

<td align="left">

$screen_placeholder

</td>

</tr>

<tr>

<td colspan="2">

$navigation.setTemplate("/DefaultBottom.vm")

</td>

</tr>

</table>

试着在其最前面加上一行:“Welcome Turbine Data Manager!”,再次刷新Turbine Data Manager的首页,我们发现,它的首页变为了:

在它的最上方,多了我们刚才加入的一行文本。这究竟是怎么一回事呢?

请注意在《Turbine简述》中所提到的,Turbine使用Velocity来作为其表述层,而.vm(VelociMacro,HTML格式的文本文件)正是Velocity用来控制页面显示使用的配置文件。Velocity以Service的形式加入了Turbine之中,也就是Turbine Service Framework中的Velocity Service。Velocity + Turbine即构成了Template Service。

而Login.vm正是用来控制TDM Login页面显示的VelociMacro。

再看Login.vm中的如下几行:

<td colspan="2">

$navigation.setTemplate("/DefaultTop.vm")

</td>

它定义了Login Layout中需要调用DefaultTop Navigation,并且,这个Navigation应该放置在一个表格之中。而DefaultTop.vm中定义了需要显示一个图片,这个图片就是“Turbine Data Manager”。

类似Layout和Navigation的控制方式,Turbine中的Screen、UI也是采取同样的方法进行控制。除了使用.vm文件进行控制外,Turbine还可以通过java类来进行页面布局、内容显示等的控制。

那么,Turbine是如何知道要到这些地方去寻找这些文件的呢?

Turbine的配置文件查找方式为:

1、在web.xml中定义TurbineResources.properties文件的存放路径;

2、在TurbineResources.properties文件中,定义Template File的存放路径[i]

2.2.1 TDM中的Screen

现在,让我们来详细看一看TDM中的Screen吧:

请转移到“webapps/APPNAME/templates/app/screens”目录下。大家可能还记得Login.vm文件中有一个“$screen_placeholder”变量,其实,各个Layout中的这个变量就是用现在这个目录下的文件来进行替换的[ii]

打开“Index.vm”文件,其中有一个名叫“$headings”的变量,这个变量保存了在Index页面中的HEAD信息;另外的一个叫“$entries”的变量则保存所有在Index页面中需要动态显示的内容。这些变量的取值来自与之相关的java类。并且,在Index.vm中还有一些以“#”打头的函数,例如“#entryCell(...)”,这些函数在运行时被替换为各种各样的HTML代码[iii][iv]

再到“webapps/APPNAME/WEB-INF/src/java/PACKAGE/modules/screens”目录中来看一下,TDM中每个页面里的动态内容都是与这里的java文件紧密相关的。打开“Index.java”文件,就像我们所见到的,doBuildTemplate方法建立了一个名叫“entries”的变量并将getEntries方法中取出的数据放到了其中。你可以自己修改这个java文件,就能够改变TDM取得数据的方法和数据。如果你想知道更详细的信息,请参考Turbine的Velocity Site Howto文档。

2.2.2 TDM中的Action

在TDM中插入一条数据,可以看到,浏览器中显示的URL中的最后一段是:“/action/SQL”。而插入数据实际调用的就是对应于这个Action的“webapps/APPNAME/WEB-INF/src/java/PACKAGE/modules/actions/SQL.java”java类。

在示例程序TDM中,我们可以看到大量这样的URL,通过这些URL,我们就能知道每个操作调用的都是哪些Action,可以使我们更容易地学习Turbine。

[i] 后文将讲述如何配置此项。

[ii] 嗯,严格的讲,这句话并不正确,但相对而言容易理解,姑且如此罢。

[iii] 这些代码保存在“webapps/APPNAME/templates/app/GlobalMacros.vm”文件中,通过这些代码,你就能明白这些函数究竟是用来完成什么功能的啦。

[iv] 至于这些.vm文件中出现的各种不同于HTML的标记、函数的具体意义,请参见资源4。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有