本文从网站开发者的角度,简要介绍了 Zope 的强大功能。对于网站开发人员来说是不可或缺的知识性文章。对于想要了解面向对象的 Web 编程人员来说,或许你会丢弃 ASP,PHP,JSP,转而对 Zope 投怀送抱。
一、介绍
Zope 是下一代开放源码应用服务器以及门户工具,由Digital Creations 开发,已经拥有一群相当活跃的用户社群。它既可以在所有Unix 平台上运行,也能在 Windows NT 上运行,不但能集成到其他流行的 Web 服务器,也带有自己的 Web 服务器。 Zope 采用 Python 语言编写,在性能敏感的部件上采用了 C 语言编写。
不像其他基于文件的 Web 模板系统,例如 ASP 或者 PHP,Zope 是高度面向对象的Web 开发平台。它提供了清晰的数据/逻辑/表示的分离,带有可扩展的内置对象和强大的集成安全模块。 Zope 架构让开发人员撇开了开发中的细节问题,诸如数据一致性,存取控制等。
Zope 提供了所有必须的工具,能集成来自任何数据源的所有的数据和内容,构成一个连续,可维护的 Web 应用,主要包括:
Web方式的管理界面
集成的存取控制
内容管理
企业数据存取
内置搜索工具
强大的数据共享
安全委托
Zope 和其他应用服务器不同之处在于,它从头开始就是不仅和Web 对象模型紧密结合,而且和Web 开发模型也紧密结合。当今成功的 Web 开发要求很多方面的专家合作开发。 Zope 做到了这些,能让网站管理员安全的授权给数据库专家,内容管理员以及设计专家。
二、Web 应用平台
让 Zope成为产品的技术就是基于 Web 从根本上来说是面向对象的。
Zope 中的对象是层次型的,就像我们熟悉的一些概念一样,例如文件夹,文档,图象,SQL 查询语句。 在Zope 的层次环境里,URL根据名字映射为其中的对象。例如URL:"/Marketing/index.html",映射为文件夹对象"Marketing" 下面名为“index.html”的文档对象。 Zope 对象的建立和管理十分方便,只要打开浏览器,进入管理界面,所有管理和应用开发界面都可以通过浏览器来完成,界面就像 Windows 的资源管理器。通过这个界面,开发人员不必存取服务器上的文件系统就可以创建Zope 对象或者定义新的对象类型。
对象可以放到对象层次的任意地方。网站管理员可以点击目录栏得到对象的不同“视图”,这些视图视对象类型不同而不同,对于 DTML 文档,可以有 “Edit”用来编辑文档源码,而数据库连接对象则让你修改连接字符串或者缓冲参数。所有的对象都有“安全”视图以控制存取权限。
Zope 对象存放在高性能的事务型对象数据库中,可以采用文件系统或者关系数据库作后台存储。每一个Web 请求作为对象数据库中分离的事务,如果应用中发生错误,请求事务就会自动回滚。同时,对象数据库还提供多级回退。网站管理员可以点击鼠标取消曾经做过的操作。Zope 框架让所有细节和事务对应用开发人员都透明。
三、内容管理
Zope 的心脏就是 DTML (文档模板标记语言),这个功能强大的变量插入和表达语言,提供对 Zope 对象的安全脚本和动态内容产生。 DTML 采用了服务器端包含脚本的语法,对很多 Web 开发人员来说很容易上手,而且和Zope 的安全模型高度集成。对安全的集成,可以让用户使用自己的 DTML 而不会对整个网站的安全构成威胁。
DTML 基本的变量插入和条件测试语句是十分直观的。DTML 代码采用 Zope 系统中对象的属性和方法,也可使用 Web 请求和表单中的变量。下面是一个文档标题属性显示的例子,当不同的用户登录时,显示不同的信息:
--------------------------------------------------------------------------------
本文档的标题为:<!--#var document_title--> 。
<P>
<!--#if "AUTHENTICATED_USER=='小地主'"-->
嘿!你好,小地主!
<!--#else-->
嘿!你好,陌生人!
<!--#/if-->
--------------------------------------------------------------------------------
当然 DTML 文档能包含其他 DTML 文档。一个常用的设计就是页面头和脚的包含:
--------------------------------------------------------------------------------
<!--#var standard_html_header-->
<H2>欢迎来到 www.FreeLAMP.com!</H2>
<!--#var standard_html_footer-->
--------------------------------------------------------------------------------
DTML 采用 #in 标记提供强大的递归插入。这个标记也可以用来自动管理批处理。下面的例子调用 SQL 查询对象,递归调用结果集数据建立表格:
--------------------------------------------------------------------------------
<TABLE>
<!--#in getEmployees-->
<TBODY><TR>
<TD><!--#var first_name--></TD>
<TD><!--#var last_name--></TD>
<TD><!--#var job_title--></TD>
<TD><!--#var hire_date--></TD>
</TR>
<!--#/in-->
</TBODY></TABLE>
--------------------------------------------------------------------------------
采用这些标记和其他更加高级的 DTML 结构,Web 开发人员能调用 SQL 查询语句,建立新的对象,操作对象属性,建立高度动态的网站内容。下面的例子采用了 DTML的 sendmail 标记来发送 Email。
--------------------------------------------------------------------------------
<!--#var standard_html_header-->
<!--#sendmail smtphost="mail.freelamp.com">
To: Feedback Department <feedback@freelamp.com>
From: Feedback Form <ff@freelamp.com>
Subject: 用户意见反馈
<!--#var name-->提出意见:
<!--#var comments-->
<!--#/sendmail-->
<H2>谢谢!</H2>
<P>
感谢您的建议!