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, 当然前者实施起来更简便易行。