1 综述
根据我们不同的需要,可以有三种方式来使用
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
拥有清晰的组织形式,使人们能轻松的辨认出各部分的代码的功用。
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 演练
为了更方便的做好的演练,我们需要使用到
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
示例了吧。那么,我们现在就开始了。
访问
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.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。