Wt:簡介

Wt(音同'witty')是一個C++庫,用以開發交互性Web應用。

Wt的API以widget為中心,將桌面GUI APIs的良好測試模式引入Web開發。 Wt為開發者提供了幾乎所有Web實現細節的抽象,其中包括事件處理、圖像支持、優雅降級(或漸進增強)、及良好的URL處理。

與其他諸多基于頁面的開發框架相比,Wt可以創建狀態化的應用,同時實現了高度的交互性和可訪問性;其交互性體現在Wt可以綜合使用各種技術,如Ajax等;其可訪問性體現在Wt可以使應用在必要的時候支持純HTML瀏覽器;這些特性的獲得充分利用了自動的優雅降級或漸進增強

Wt庫還自帶了應用服務器程序,可配置為獨立的Web服務器,當然也允許通過FastCGI連同其他Web服務器進行整合。

交互性、安全性、可訪問性

基于頁面的開發框架(如PHP、JSP/JSF、Ruby on Rails等)沒有實現底層基礎技術的抽象,這些技術包括HTML/XHTML、JavaScript、CSS、Ajax、Forms、DHTML 、SVG/VML/Canvas等。顯然,基于頁面的開發框架必須要求開發者隨時熟悉和掌握這些基本技術,同時當瀏覽器不支持時,還要為應用的優雅降級負責。另外,如果應用采取早期HTML頁面為中心的設計模式,開發者不僅要實現控制器以告訴用戶如何從一個頁面跳轉到另一個頁面,而且還要在采用一些高級Ajax技術時手工設計和維護客戶端與服務器端的通訊。

另一方面,就算是純粹的Ajax框架,也要求開發者通過繁雜的JavaScript編程來處理瀏覽器的怪異行為和客戶端與服務器端間的安全通訊,這些處理任何人都不能跳過去不與理會。同時,這些應用通常不能符合可訪問性的原則,也不能很好被搜索機器人索引到。

安全方面,生成HTML或填充HTML模版很容易導致安全問題,如跨站腳本(XSS) 跨站請求偽造(CSRF);XSS問題一般由(疏忽)允許嵌入JavaScript代碼引起, CSRF問題一般由(相信)Cookies(可)作為認證手段引起。作為開發者,這些安全問題將是很難避免的,因為我們有時需要允許用戶插入自己的JavaScript 代碼來實現某些功能,但開發框架本身卻沒提供給我們過濾機制。

相反,使用Wt來部署Web應用可以完全用C++來開發,Wt自動產生所必須的 HTML/XHTML、CSS、Javascript、CGI、SVG/VML/Canvas和Ajax代碼;與此同時,代碼的安全性和瀏覽器兼容性等問題都將轉交給Wt。例如,在可能的情況下, Wt將最大限度的使用JavaScript和Ajax,但在Ajax功能受限時,Wt也能保證系統功能運行正常。其原理是Wt將先啟用純HTML/CGI應用,隨后在可能的情況下漸進增強至Ajax應用。另外,Wt提供了內置的安全性考慮。

典型應用舉隅:

  • 由于Wt C++ Web應用服務器占用較小的物理空間,故而可以為嵌入式系統 提供基于Web的GUIs;
  • Wt可以為需要整合現有C++庫的應用提供基于Web的GUIs, 這些 應用可能包括科學上的或工程上的應用;
  • Wt可以創建從現有C++桌面應用到Web的有效渠道;
  • Wt還可以應用于一些高性能、復雜的Web應用,這樣的應用 一般具有高度定制、充分利用Ajax的特點,同時具有完全的可訪問性和較高的 搜索引擎優化(SEO)需求

使用Wt的其他好處

  • 可以使用我們熟悉的桌面GUI模式開發Web應用;
  • Wt為我們提供了廣闊的widgets集,這些widgets可以在環境不支持 JavaScript的情況下照常工作(當然,如果支持則效果更佳);
  • 在Wt中客戶端與服務器端的驗證和事件處理采用同一規范;
  • Wt允許開發者選擇XHTML和CSS來進行布局和樣式編輯;
  • Wt可生成標準的、兼容的HTML或XHTML代碼;
  • Wt采用內聯VML、內聯SVG、HTML 5 畫布或PNG可生成應用于Web的可移植的、 反鋸齒的圖像,當然這些圖像還可以輕松渲染為PDF格式;
  • Wt可以避免常見的安全問題,因為Wt擁有對表示層的完全控制,并能夠主動 過濾掉處于活動狀態的標簽和屬性;Wt同時實現了業務邏輯的隱藏,并 通過狀態化的設計簡化了認證機制;
  • 基于Wt的應用的載入時間極短且占用帶寬也很低,究其原因是Wt中這些特點 僅受限于頁面顯示的復雜程度,而不是應用程序自身的尺寸;Wt還實現了所有的 常用技巧和方法,以優化應用的快速反應,Wt幾乎做到了針對所有瀏覽器的優化;
  • Wt提供了服務器端初始的事件處理,即服務器推Comet, 這部分API使用簡單、穩定且在所有瀏覽器上均能實現;
  • Wt在服務器部署上,既可以使用內置的httpd,又可以使用FastCGI/ISAPI, 當然前者實施起來更簡便易行。