詳解面向對象的Web 服務器Zope

發表于:2007-06-11來源:作者:點擊數: 標簽:
一、介紹 Zope 是下一代開放源碼應用 服務器 以及門戶工具,由Digital Creations 開發 ,已經擁有一群相當活躍的用戶社群。它既可以在所有 Unix 平臺上運行,也能在 Windows NT 上運行,不但能集成到其他流行的 Web 服務器,也帶有自己的 Web 服務器。 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-->

<tr>

<td><!--#var first_name--></td>

<td><!--#var last_name--></td>

<td><!--#var job_title--></td>

<td><!--#var hire_date--></td>

</tr>

<!--#/in-->

</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>

感謝您的建議!

</p>

<!--#var standard_html_footer-->

---------------------------------------------------


“安全腳本”的重要概念就是不像其他模板系統, DTML 不允許你建立任意的腳本對而構成對系統安全的威脅。相反,Zope 提供了一種不同的對象叫作外置方法,封裝更加復雜的腳本和包含隨意的代碼。 DTML 的作者能調用外置方法,但是只能在自己的安全設定范圍內運行。

大多數情況下, DTML 本身就能完成大多數一般性的任務,Zope 提供高級標記的目的就是為了減少編寫復雜腳本的需要?!皌ree” 標記就是這樣的例子,這個標記能提供和Zope 管理界面左邊的幀一樣的界面。

四、數據存取

Zope 的數據源可以包括關系數據庫,以及非關系型的 LDAP/IMAP 等。 Zope 支持常見的關系型數據庫,包括Oracle, Sybase, MySQL 以及大多數 ODBC 兼容的數據庫。

為了存取后臺數據,你需要建立一個數據庫連接對象,然后建立 SQL 方法對象,

這個對象能使用 DTML ,能很方便的建立動態的查詢語句。下面建立的 getTasks 對象是從"tasks"表中選出對應用戶的任務:

----------------------------------------------- 

select * from tasks

where

emp_id='<!--#var AUTHENTICATED_USER-->'

-----------------------------------------------

結果集的數據應用于 DTML 文檔:

-----------------------------------------------

<h2><!--#var AUTHENTICATED_USER--> 的任務</h2>

<table>

<!--#in getTasks-->

<tr>

<td><!--#var title--></td>

<td><!--#var due_date--></td>

</tr>

<!--#/in-->

</table>

--------------------------------------------

Zope 以對象為中心的設計,允許你采用清晰的數據/表示分隔,數據庫程序員在 SQL 方法對象上工作,內容設計人員調用這些 SQL 方法。這樣的對象模型也能容易的集成多種數據源,高級的數據存取特色甚至能定義數據庫結果的對象行為,從而把平面型的關系記錄轉換為 Zope 應用的“智能”數據。

Zope 開發環境的另外一個好處就是它的事務模型能自動延伸到后臺數據庫,如果你的關系型數據庫支持事務,Zope 會在運行SQL 方法之前自動開始事務,而在 Web 請求成功結束后自動提交事務,如果其中發生錯誤則會自動回滾,使事務的集成對Web 開發人員完全透明。

五、集成的搜索

Zope 提供快速,靈活的索引,采用 ZCatalog 對象搜索。ZCatalog 對Zope 網站下所有類型的對象提供可高度定制的全文和域的索引。對象可以根據其內容或者屬性索引,能提供結構化的搜索。

搜索結果可以來自多種不同的數據源,除了基本的文檔外,還可能來自郵件列表的EEmail 消息對象,數據庫里的記錄,甚至 LDAP 目錄中的資源。

六、數據共享

Zope 的強大功能之一就是它簡單而成熟的數據共享模型,這個模型叫做“獲取”,核心的概念可以簡單的描述為:

Zope 對象包含于其它對象中(例如,文件夾)

對象能夠“獲取”容器中的屬性,內容,行為。

以前,我們決定把我們網站的頭和腳封裝到分離的 DTML 文檔,這樣能包含其他網站的內容,但是這個設計在拷貝頭和腳到網站內所有的文件夾時發生了問題。如果我們采取“獲取”的辦法,在網站的頂層文件夾建立頭和腳,下層的 DTML 就能自動“獲取”。

這個概念對所有的對象都適用,對把常用的資源集中起來十分有用。例如,對一個經常用到的 SQL 查詢語句,我們可以把它定義在一個文件夾里,子文件夾里的對象能自動通過“獲取”來使用它,如果要改變查詢語句,只需要改動一個地方就可以了。

因為對象從當前層開始“獲取”,然后向上搜索,因此很容易建立自己的文檔。

例如,我們有一個叫做“Sports”的文件夾,內容全部是關于運動的,你可以在這個文件夾里建立自己的頭和腳,當前目錄及其子目錄下面的文檔就會使用這兩個文檔而不是采用頂層的那個了。

對“獲取”的使用方法可以寫好幾篇這樣的文章,我們首先需要了解的就是它提供了一個簡單但是強大的方法來避免數據冗余而增加網站的維護成本。

七、安全授權

一個成功的網站需要組織起一個團隊來合作:應用開發人員,SQL 專家,內容管理員以及應用的最終用戶。在傳統的網站里,維護和安全會很快出現矛盾。對權限的分配會變得十分復雜。

Zope 在這個問題上采用了數據和表示的清晰分離以及靈活的安全模型。采用“用戶文件夾”來管理用戶,里面包含用戶信息。Zope 提供了要比普通文件系統要豐富得多的權限。

除了使用Web 來管理強大的封裝和安全特色以外,Zope 還提供其他協議的合作開發特色,包括 FTP, WebDAV 和 XML-RPC。版本管理,能讓其他用戶看到最新的版本更新,但不是發布出去,如果版本的修改結束后,用戶就可以“提交”版本,把最新版本的網站發布出去。

八、XML 支持

當前應用服務器市場的熱門話題就是 XML 支持。Zope 除了內置的對基于 XML的協議 WebDAV 和 XML-RPC的支持外,Zope 的開發人員還可以利用一個快速的基于 C 的 XML 分析器,Zope 對象數據庫能導出為 XML 格式。利用一個“XML 文檔”的附加原型,可以把 XML 文檔上傳到 Zope,Zope 會自動分析文檔及其元素,并儲存為單獨的 Zope 對象。

和 XML 相關的是,Zope 包含了對DOM(Document Object Model) API的支持。開發人員可以在 DTML 或者 Python 代碼中使用熟悉的 DOM 調用來操作 Zope 對象。將來對 XML 的支持還會包含 XSL 處理以及用 XQL(XML Query Language) 對 Zope 對象搜索。

九、結束的話

Zope 是高度可擴充的,高級用戶可以建立自己的對象類型,或者采用 Python 寫新的 Zope 附加模塊。Zope 社區已經有很多這類的附加產品。更多的產品信息可以參考 Zope 的網站:www.zope.org。

國內的 www.FreeLAMP.com 網站是一家采用 Zope + SquishDot 架構的開放源碼新聞網站,著力于網站安全和 LAMP(Linux + Apache + MySQL + PHP/Perl/Python) 的架構。

(責任編輯:銘銘)



原文轉自:http://www.anti-gravitydesign.com

...
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97