Wt:簡(jiǎn)介

Wt(音同'witty')是一個(gè)C++庫(kù),用以開(kāi)發(fā)交互性Web應(yīng)用。

Wt的API以widget為中心,將桌面GUI APIs的良好測(cè)試模式引入Web開(kāi)發(fā)。 Wt為開(kāi)發(fā)者提供了幾乎所有Web實(shí)現(xiàn)細(xì)節(jié)的抽象,其中包括事件處理、圖像支持、優(yōu)雅降級(jí)(或漸進(jìn)增強(qiáng))、及良好的URL處理。

與其他諸多基于頁(yè)面的開(kāi)發(fā)框架相比,Wt可以創(chuàng)建狀態(tài)化的應(yīng)用,同時(shí)實(shí)現(xiàn)了高度的交互性和可訪問(wèn)性;其交互性體現(xiàn)在Wt可以綜合使用各種技術(shù),如Ajax等;其可訪問(wèn)性體現(xiàn)在Wt可以使應(yīng)用在必要的時(shí)候支持純HTML瀏覽器;這些特性的獲得充分利用了自動(dòng)的優(yōu)雅降級(jí)或漸進(jìn)增強(qiáng)。

Wt庫(kù)還自帶了應(yīng)用服務(wù)器程序,可配置為獨(dú)立的Web服務(wù)器,當(dāng)然也允許通過(guò)FastCGI連同其他Web服務(wù)器進(jìn)行整合。

交互性、安全性、可訪問(wèn)性

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

另一方面,就算是純粹的Ajax框架,也要求開(kāi)發(fā)者通過(guò)繁雜的JavaScript編程來(lái)處理瀏覽器的怪異行為和客戶端與服務(wù)器端間的安全通訊,這些處理任何人都不能跳過(guò)去不與理會(huì)。同時(shí),這些應(yīng)用通常不能符合可訪問(wèn)性的原則,也不能很好被搜索機(jī)器人索引到。

安全方面,生成HTML或填充HTML模版很容易導(dǎo)致安全問(wèn)題,如跨站腳本(XSS) 跨站請(qǐng)求偽造(CSRF);XSS問(wèn)題一般由(疏忽)允許嵌入JavaScript代碼引起, CSRF問(wèn)題一般由(相信)Cookies(可)作為認(rèn)證手段引起。作為開(kāi)發(fā)者,這些安全問(wèn)題將是很難避免的,因?yàn)槲覀冇袝r(shí)需要允許用戶插入自己的JavaScript 代碼來(lái)實(shí)現(xiàn)某些功能,但開(kāi)發(fā)框架本身卻沒(méi)提供給我們過(guò)濾機(jī)制。

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

典型應(yīng)用舉隅:

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

使用Wt的其他好處

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