C++ Web工具包 Wt
fmms
13年前
<p>Wt(音同'witty')是一个C++库,同时也是开发和部署web应用的服务器。 Wt不是所谓框架(framework),它只是一个库,它不会将编程方式强加于开发者。</p> <p>Wt的API是以widget为中心(widget-centric)的,并受到现有C++图形用户界面(GUI) 的应用编程接口(APIs)的启发。Wt为开发者提供了几乎所有web实现细节的抽象,其中 包括事件处理和图像支持。</p> <p>基于页面的web应用开发框架(Page-based frameworks),如PHP、JSP/JSF (+servlets+struts)等,没有实现对一些最基本技术的特性的抽象,这些技术包括 HTML/XHTML、JavaScript、CSS、AJAX、 Forms、DHTML、SVG/VML/Canvas等,显然基 于页面的开发框架(frameworks)必须要求开发者随时熟悉和掌握这些基本技术。另外, 当选择某一种基本技术时(如当前流行的AJAX),开发者则要对该技术的优雅降级 (graceful degradation)负责,比如当AJAX或JavaScript已经不复存在或某些功能失效 时。同时,应用程序结构还要遵循早期HTML以页面为基础的开发范式。作为一个AJAX开 发者,这就意味着他需要手工设计和维护客户端/服务器端的通讯。</p> <p>尽管开发者有时不希望,但为了生成HTML代码或填充HTML模板会在页面中插入 JavaScript,如此操作则会带来安全风险,如跨站脚本(XSS:Cross-Site-Scripting)。 但是,模板框架(template frameworks)本身无法避免这种情况的发生,因为开发者总是 需要插入自定义的JavaScript来提高web应用。</p> <p>相比之下,使用Wt开发的web应用就要好许多,因为这样的应用只使用一种编译 语言(C++),而且生成必要的HTML/XHTML、Javascript、CGI、SVG/VML/Canvas以及 AJAX代码的任务都交给Wt库完成。自然地,web开发的安全性和浏览器可移植性问题也都 交给了Wt。另外,在可能的情况下,Wt将最大限度地使用JavaScript和AJAX;特别 地,在不支持AJAX的情况下,采用Wt开发的web应用仍能正常工作,因为Wt采用了 转回普通HTML/CGI的机制(reverting to a plain HTML/CGI mechanism),保证了 浏览器与服务器之间的正常通讯。</p> <h4>典型应用举隅:</h4> <ul> <li>由于Wt web应用服务器占用较低的内存(low footprint),故而可以为 <strong>可联网的嵌入式系统(web-enabled embedded systems)</strong>提供基于web的图形 用户界面(GUI);</li> <li>Wt可以为需要<strong>整合现有C++库</strong>的应用提供基于web的图形用户界面(GUI), 这些应用包括科学上的或工程上的应用;</li> <li>Wt可以创建从<strong>现有C++桌面应用</strong>到web的有效渠道(port)。</li> </ul> <p> </p> <h4>使用Wt的好处</h4> <ul> <li>可以象开发C++桌面应用一样开发web应用;</li> <li>Wt提供最基本的(plain)widgets,这些widgets可以在运行环境不支持 JavaScript的情况下照常工作(当然,如果支持的话效果会更好)。同时Wt::Ext命名 空间下的widgets工作效果会更酷(more polished),而且可以提供更高级的功能, 但是会需要对JavaScript的支持以及更为流行的浏览器。以上两类widgets在Wt中共享 同一套应用编程接口(API);</li> <li>Wt提供两种开发与部署模式,即使用Wt内置(build-in)httpd或者FastCGI连接器 (connector),前者在Wt内较容易实现,而后者则实际上是在开发FastCGI应用;</li> <li>客户端与服务器端在验证(validation)和事件处理(event handling)方面采用同 一原则(a single specification),即两种应用下,开发者在服务器端使用C++编写, Wt既在服务器端生成C++代码,又同时在客户端生成JavaScript代码;其中事件处理特 指使用无状态槽(stateless slot)实现的情况;</li> <li>可以产生标准的、符合HTML/XHTML规范的代码;</li> <li>使用内联VML、SVG、HTML 5 Canvas可以提供可移植的(portable)、抗锯齿图像 (anti-aliased graphics);</li> <li>无跨站脚本(XSS)风险,因为Wt完全控制表示层(presentation layer),并提前 (proactively)过滤掉<em>活动(active)</em> 标签(tags)和属性(attibutes),这样很好地 隐藏了驻留在服务器端的业务逻辑(business logic);</li> <li>基于Wt的应用载入时间极短(ultra-fast load time),同时占用较低带宽 (low bandwidth usage),当然也会受到显示内容复杂程度(screen complexity)的影响, 但肯定不会是应用程序的大小。</li> </ul> <p><img alt="C++ Web工具包 Wt" src="https://simg.open-open.com/show/9c2112c55b1155a1e240d4f04c58c003.jpg" width="640" height="468" /></p> <p><strong>项目主页:</strong><a href="http://www.open-open.com/lib/view/home/1323678495906" target="_blank">http://www.open-open.com/lib/view/home/1323678495906</a></p>