特点

核心库特点

  • 支持所有主流浏览器(包括Firefox/Gecko、Internet Explorer、Safari、 Chrome、Konqueror以及Opera),同时在纯HTML浏览器上亦能正常工作 (已经测试过的有Links和Lynx);
  • 既可以在Unix/GNU Linux(gcc)上开发和部署,又可以在MS Windows (Visual Studio)上;
  • Wt利用优雅降低与渐进增强可以保证应用在有无JavaScript或Ajax支持 的情况下动作行为尽可能一致(渐进增加须使用渐进启动方法);
  • Wt整合了Unicode支持(UTF8/UTF16),便于全面实现本地化;
  • 当Ajax获得支持时,基于Wt的应用只有变化才被渲染;
  • 在Wt中,页面变化有可见变化和背景中不可见变化两类,当Ajax被支持时, 两类都会得到渲染,而当Ajax不被支持时,只有可见内容的变化被渲染;
  • Wt中的会话跟踪选项是可以按需配置的,主要包括URL重写和Cookies两种;
  • Wt中纯HTML页面或Ajax会话的动作行为是统一的,因此Wt支持浏览器历史 导航操作(向后、向前按钮和书签),可生成良好URL地址,利于搜索引擎 优化工作;
  • Wt拥有高性能的特点,允许部署在低端嵌入式设备上,或者部署在所用功耗、 物理空间、经费预算等相对平衡的Internet或extranet网站上;
  • Wt采用了完全基于事件驱动的异步I/O机制:会话不用绑定于线程,也不会延迟应答 (如服务器推)或锁定线程;相反,线程只会被用来提高并发请求处理或事件循环 的重新进入。

事件处理

  • Wt使用类型安全的、基于模版的信号/槽系统来处理事件;
  • 支持对键盘、鼠标及焦点事件的监听,同时可以获得事件细节,比如鼠标键位、 键盘键位等;
  • 自动同步表单数据;
  • Wt通过无状态槽实现获得了C++至JavaScript的动态转换;在此,单一C++槽的实现 提供了客户端和服务器端双重事件处理:即客户端实现显示的变化,服务器端实现 应用状态的变化;
  • Wt还提供了面向开发者自定义的JavaScript代码的钩技术,比如让原本仅用于客户端 事件处理的JavaScript代码在执行后释放出C++信号;
  • Wt提供了拖放API;
  • Wt支持定时事件,同时内置支持服务器端初始更新(“服务器推”)。

原生的绘图系统

  • Wt提供统一的绘图API,此系统使用了浏览器原生的(向量)图像支持 (如内联VML、内联SVG、HTML 5画布),也可以渲染到通用的图片格式 (如PNG、GIF等等)或向量格式(如SVG、PDF等);
  • Wt支持任意画笔路径、裁剪、输入文本、图像、变形、投影等
  • 使用绘图API可以绘制widget,或者创建SVG、PDF及PNG/GIF图像。

GUI组件

具体可进入Widget展示库 进行交互式体验。

内置安全性

  • Wt采用Kernel级的内存保护方案,特别是在采用专属进程模式下, 会话之间完全隔离,这样Wt完全可以保护隐私数据免受程序错误的影响;
  • Wt使用安全套接字协议层(SSL)或传输层安全协议(TLS)通过HTTPS 来支持加密和服务器认证;
  • Wt满足低带宽下HTTPS持续使用的各种需求(细粒度Ajax);
  • Wt提供内置跨站脚本(XSS)保护,通过预先过滤掉渲染文本中的恶意代码, 使Wt应用免受XSS的攻击;
  • Wt应用能够对跨站请求伪造(CSRF)有一定的防护,因为用于会话跟踪的 Cookies是可选的,即使是如此,Cookies也永远不会严格依赖于触发事件处理代码 的请求;
  • Wt对跳过特定URL而对应用逻辑的破坏也有一定的防护,因为只有界面 明确的事件才会被触发;

对象关系映射库

Wt提供了Wt::Dbo,这是Wt自带的一个库,实现了对象关系映射,Wt::Dbo为C++ 应用程序与SQL数据库之间的提供了一种方便的处理方法。虽然我们说Wt::Dbo拥有的 一些特点,如最佳并发控制等,使这一技术成为数据库驱动的Web应用的理想选择 (当然与Wt的MVC框架结合最佳),但我们还要说Wt::Dbo还可以被用在离线应用 或其他非Wt的应用中。 Wt的ORM库(教程参见此处) 有如下特点:
  • 没有所谓代码生成、没有宏、没有XML配置,仅面向C++!
  • 使用模板化的访问者模式,该模式要求单一模版方法以提供映射,也就是 常说的“不要重复”(DRY)或尽最大可能高效!
  • 在该库中,你可以指定代理自增键,或映射任意C++类型的自然键,当然也 可以是组合类型(例如,当需要不止一个数据库字段时);
  • 支持 最佳并发控制(利用版本字段)
  • Dbo支持多对一和多对多关系到标准模板库(兼容)集合的映射
  • 支持模式生成(即数据定义语言DDL)和CRUD操作(即数据操作语言DML);
  • Dbo使用了预备语句;
  • 每个会话都会追踪脏对象并提供第一层缓存;
  • 提供灵活的、针对单个字段、对象以及他们组合(使用Boost.Tuple)的查询;
  • 使用单个连接或多个会话间共享连接池,这些连接只有当交互处于活动状态时 才被使用;
  • Dbo默认支持Sqlite3和PostgreSQL后端,同时MySQL后端(GPL协议) 正由社区爱好者开发和维护(作者Paul Harisson)。

测试

Wt使用事件处理代码构建和操作widget树,因此这很容易使用测试代码检查, 所以Wt的 测试环境允许你的应用实例化,且允许在没有浏览器的情况下模拟事件处理, 这样我们可以缩减底层请求/应答循环的测试环节。

部署方式

Wt库将不同的部署选项抽象为连接器库,连接器库将Wt连接到不同的外部环境, 选择部署方式(选项)其实就是将Wt应用连接或重连接到某个连接库上。

a) 内置httpd部署
  • 该模式下Wt是简单、且适合于基于C++ asio库的高性能Web应用服务器 (支持多线程、异步输入输出);
  • 既支持HTTP,也支持OpenSSL下的HTTPS;
  • 支持应答分割与压缩;
  • 支持单一进程(方便部署和调试),也方便嵌入已有应用;
  • 支持通过代理或为了均衡负载的web服务器端部署;
  • 既可以部署于UNIX平台、又可部署于Win32。
b) FastCGI部署
  • 该模式能与多数通用web服务器(如apache, lighttpd)整合在一起;
  • 提供不同的会话-进程映射策略;
  • 支持热部署,即新会话使用新的应用版本,同时部署时未终止的旧会话仍可以 按旧的应用版本继续运行;
  • 该模式仅用于UNIX平台。
c) ISAPI部署
  • 该模式整合了Microsoft IIS服务器;
  • 使用ISAPI异步API使性能最大化;
  • 仅用于Win32平台。