
Wt3.3.1文档翻译:库概述,Library overview
WWidget类表示着一个部件(widget),它为一个可见的实体提供了抽象实现。通过创建一个以 WApplication::root() 为根的由WWidget组成的树型结构,就可以生成整个用户界面。通过对与这些部件相关的事件进行响应,妳就可以完成妳的业务逻辑,并且可以操作部件树以改变用户界面。
当妳向部件树中插入一个新的部件时,这个新部件就从属于它在树中的亲代部件了。因此,当妳删除一个部件时,它的所有子代部件都会跟着被删除,这样就显著地减少了与部件相关的内存管理工作量。当 WApplication 对象被删除时,这个对象树的根就会被删除,这样,与任何部件相关的资源就都释放了。
WWidget的任何子类都是一个自包含(可重用)的类,封装好了外观和行为,这就使得用户界面的设计可以按照一种正交(orthogonal)的方式来进行。
默认情况下,Wt在服务器端完成全部的事件处理。每个被连接的事件信号的发生都会引起浏览器与网页服务器进行一次通信以便调用回调函数,然后才会在网页中显示出可视化的改变。
不过呢,Wt提供了几种手段,用于在客户端做一些事件处理。这能够在一定程度上提高应用程序的响应速度印象,因为用户会立即看到界面上的反馈,避免了一般情况下因为网络通信而造成的延迟。
最不灵活但是最方便的客户端事件处理手段就是,让Wt学习一个槽的视觉效果并且在浏览器端的JavaScript 代码中缓存起来。这样,对应的功能还是用C++来实现,因此,当JavaScript 不可用时这个应用程序的行为还是一样的。唯一的限制就是这种手段只能用于无状态的(stateless)回调代码中——也就是说,视觉反馈并不取决于程序本身的状态,也不依赖于事件中的细节。参考 WObject::implementStateless 文档以了解相关细节,或者参考 树型列表示例 ,以了解在JavaScript 可用的情况下怎么使用无状态实现(stateless implementations)来创建一个在客户端完成全部的节点展开/折叠动作的树型列表部件。
无状态槽的学习,使得应用程序可以完全用C++开发,只需注意在实现过程中遵守一条要求,就可以在运行时决定当JavaScript 可用时将特定的事件处理动作放到客户端去执行,并且在JavaScript不可用时仍然完全使用服务器端的事件处理。
当妳的代码无法满足无状态槽学习的条件时,妳就需要手动编写JavaScript 代码了。Wt提供了多种手段来将JavaScript 代码与C++整合起来:
•.使用JSlot ,妳可以在连接到一个 EventSignal 时指定这个槽的代码为JavaScript。
•.使用JSignal ,妳可以从JavaScript 代码中使用JavaScript 函数 Wt.emit() 来发射一个C++ 信号。
•.使用WApplication::doJavaScript() ,妳可以在事件处理中直接调用JavaScript 代码来完成部分动作。
这个库经过了精心设计,使得,在部署妳的程序时,除了二进制的可执行程序本身之外,唯一还需要部署的文件就是 resources/ 目录中的那些文件了。资源(resources)目录中包含着:图标、与各个主题相关的样式单、以及其它与特定部件相关的特殊资源。 resources/ 目录的部署位置(URL)是由 resourcesURL 这个配置属性(参考 配置属性 )决定的,默认值是"/resources"。
另外,妳可能还需要将以下文件部署到妳的网页服务器中:妳自己的CSS 文件、自定义的图标/图片、以及从妳的程序中引用到的静态页面。
妳的程序可能还需要其它一些无需发布到网站中,而又可被妳的程序只读访问的文件。其中包括:消息资源文件(包含有本地化的文本字符串)、wt 配置文件、妳自己的配置文件……妳可以将这些文件部署到一个 程序根目录 中(参考 WApplication::appRoot() ),而这个位置对于不同的连接器是不同地配置的。
如果将妳的程序链接至libwtfcgi ,则,所产生的二进制程序是一个FastCGI 二进制程序。然后,可以将这个二进制程序部署至一个支持FastCGI 协议的网页服务器(其中包括apache、lighttpd以及其它的狠多流行的网页服务器)中,并由它来管理。
会按照顺序到以下位置寻找配置文件wt_config.xml:
•.环境变量$WT_CONFIG_XML的值
•.在环境变量$WT_APP_ROOT所指定的程序根目录中寻找: $WT_APP_ROOT/wt_config.xml
•.编译时的默认值(/etc/wt/wt_config.xml),
可以通过网页服务器提供的方法来为FastCGI 程序设置环境变量。例如,对于FastCGI,可以这样:
-initial-env WT_APP_ROOT=/opt/myapp
当妳链接至libwthttp时,所产生的二进制程序就是一个独立的HTTP/WebSockets 服务器。这个网页服务器会充当一个普通网页服务器的角色,同时还支持自身的Wt 程序。
会按照顺序在以下位置寻找配置文件wt_config.xml:
•.命令行参数–config或-c
•.环境变量$WT_CONFIG_XML的值
•.在程序的根目录(appRoot)中寻找,而这个东西可通过命令行参数 –approot 或环境变量 $WT_APP_ROOT 来指定:appRoot/wt_config.xml
•.编译时的默认值(/etc/wt/wt_config.xml)
使用–deploy-path参数来将程序部署到指定的统一资源定位符(URL)。默认情况下,程序会被部署到'/'。
如果程序被部署到一个以'/'结尾的路径(也就是说,一个目录路径)中,则,只有当请求的统一资源定位符严格匹配时才会访问到这个应用本身。这种行为可用于避免以下这种罕见情况下的问题:妳部署到了'/',而此网页服务器不提供任何其它的静态文件。由此产生的后果是,会生成丑陋的统一资源定位符,以用于跟踪内部路径。不过呢,从3.1.9版本开始,在部署至根目录的情况下也能有简洁漂亮的统一资源定位符了,只需在–docroot参数中列出包含了静态资源的目录的路径,并以';'分隔开就可以:
$ ../../build/examples/wt-homepage/Home.wt --docroot=".;/favicon.ico,/css,/resources,/style,/icons" ...
如果将妳的程序链接至wtisapi ,则,所产生的二进制程序就是一个ISAPI 插件。然后,这个动态链接库(DLL)可部署到微软(Microsoft)IIS 中,并且由它来管理。
会按照顺序在以下位置寻找配置文件wt_config.xml:
•.在程序的根目录中寻找,这个根目录是由与本动态链接库同名的INI 文件来指定的(例如 C:\Program Files\WtApplications\Public\MyApplication.dll.ini ):
[isapi]
appRoot=C:\Program Files\MyApplications\AppRoot
Wt支持将各个事件的记录信息输出到记录文件(参考 记录文件配置选项 )中。每条记录信息都有时间戳、进程编号和会话编号。Wt使用四种不同的事件类型,按照严重程度从低到高是:
通知 ( notice )
普通的信息提示。这些信息,可能在日后针对其它问题的分析中起到作用,还可用于性能分析或用来估计服务器的负载。
使用Wt::log()函数生成,例如:
Wt::log("info") << "消息内容";
警告 ( warn )
警告。当妳未按照预期的方式来使用某些应用编程接口(API)时,会产生这些事件。
使用Wt::log()函数生成,例如:
Wt::log("warn") << "消息内容";
错误 ( error )
程序中产生的非致命错误。这些错误意味着出现了一些问题,例如从浏览器或程序用户那里产生了未预料到的输入内容、XML 解析出错,但是一般不是由于程序代码写错而引起的。
使用Wt::log()函数生成,例如:
Wt::log("error") << "消息内容";
安全 ( secure )
非致命的,与安全性相关的错误及/或通知。
致命 ( fatal )
致命的程序错误。这些错误会直接导致当前会话中止(但不会终止应用程序服务器本身),并且意味着妳在编程的过程中犯了错误。例如,错误地使用了某些应用编程接口的话就会触发这个错误。
这种情况下会直接抛出一个std::exception 异常。
未知美人
HxLauncher: Launch Android applications by voice commands