表示一个针对单个会话的应用实例。
你的应用中的每个用户会话都有一个对应的WApplication 实例。你需要创建一个新的实例并且将它作为传递到WRun()的回调函数的结果返回。那个实例是访问会话信息的主要入口,并且持有部件树的根( root() )的指针 (reference) 。
一个Wt 网页应用程序的常规动作过程(recipe)是这样的,它为每个访问这个应用的用户创建一个新的 WApplication 实例:
WApplication *createApplication(const WEnvironment WEnvironment& env)
{
//
//可选动作,检查环境并且重定向到一个错误页面。
//
bool valid = ...;
WApplication *app;
if (!valid) {
app = new WApplication(env);
app->redirect("error.html");
app->quit();
} else {
//通常你会将你的 应用类特殊化(specialize)
app = new WApplication(env);
//
//将部件添加到app->root(),再返回应用对象。
//
}
return app;
}
在整个会话期间,都可以通过WApplication::instance() (或者通过wApp)来访问这个实例。应用程序可能会因为调用咯 quit() 方法或者在用户关闭窗口之后超时而退出,但不会因为用户没有操作而退出:后台的连接保持 (keep-alive)消息会使得 , 只要用户仍然将页面打开着 ,会话就会存在。在任一种 (导致退出的) 情况下 ,应用对象会被删除,以允许清除整个部件树及任何的其它资源。
WApplication 对象提供对于会话级别的设置信息的访问能力,包括:
•.通过environment()获取的环境信息,它给出关于用户、启动参数和用户浏览器功能的一些细节。
•.通过setTitle()设置应用的标题。
•.通过styleSheet()和useStyleSheet()访问内联的和外部的样式单。
•.通过doJavaScript()和require()访问内联的和外部的JavaScript。
•. root()中的顶级部件,它代表的是整个浏览器窗口。或者是使用bindWidget()设置的多个顶级部件,那是在WidgetSet 模式下在一个第三方页面中放置多个部件时使用的。
•.使用setCookie()来定义小型记录文件(cookies),以便在不同的会话之间传递持久信息 ,这个东西可在将来的会话中使用 WEnvironment::getCookie() 来读取。
•.使用setInternalPath()和相关的方法来管理内部路径(它使得浏览器历史和书签成为可能)。
•.通过enableUpdates()支持由服务器端发起的页面更新
•.使用setLocale()和messageResourceBundle()来处理语言区域信息和消息资源束(message resources bundles) 。
HxLauncher: Launch Android applications by voice commands