wt-home_cn.xml 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <messages>
  3. <message id="template">
  4. <div id="top_wrapper">
  5. <div id="top_content">
  6. ${languages}
  7. <div id="top_wt">
  8. <a href="//www.emweb.be/">
  9. <img src="/css/wt/emweb_powered.jpg" alt="Emweb" height="22" />
  10. </a>
  11. </div>
  12. </div>
  13. </div>
  14. <div id="banner_wrapper">
  15. <div id="banner_content">
  16. <div id="banner_end"> <div id="banner"><a href="#">Wt</a></div> </div>
  17. </div>
  18. </div>
  19. <div id="main_wrapper" class="home">
  20. <div id="main_content">
  21. <div id="main_menu">
  22. ${menu}
  23. ${sidebar}
  24. </div>
  25. ${contents}
  26. <div class="clearall"></div>
  27. </div>
  28. </div>
  29. <div id="footer_wrapper">
  30. <div id="footer_content">
  31. <div id="footer_copyright">
  32. <a href="//www.emweb.be/">
  33. <img src="/css/wt/emweb_large.jpg" height="25" width="101"
  34. alt="Emweb.be" title="emweb.be"/></a>
  35. 基于WEB的应用系统解决方案<br/>
  36. <a href="//www.emweb.be/">www.emweb.be</a>
  37. </div>
  38. <div id="footer_menu">
  39. <a href="//www.webtoolkit.eu/wt/">首页</a>
  40. | <a href="//www.emweb.be/contact">联系我们</a>
  41. </div>
  42. <div id="chat"></div>
  43. <script src="//www.webtoolkit.eu/wt/examples/simplechat/chat.js?div=chat" type="text/javascript"></script>
  44. <div class="clearall"></div>
  45. </div>
  46. <script type="text/javascript">
  47. /*<![CDATA[*/
  48. (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  49. (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  50. m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  51. })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  52. ga('create', 'UA-4345578-1', 'auto');
  53. ga('send', 'pageview');
  54. /* ]]> */
  55. </script>
  56. </div>
  57. </message>
  58. <message id="wt">Wt,C++ 网络开发工具包</message>
  59. <message id="introduction">简介</message>
  60. <message id="blog">博客</message>
  61. <message id="features">特点</message>
  62. <message id="documentation">文档</message>
  63. <message id="examples">示例</message>
  64. <message id="download">下载</message>
  65. <message id="community">社区</message>
  66. <message id="other-language">!C++</message>
  67. <message id="hello-world">Hello world</message>
  68. <message id="charts">图表示例</message>
  69. <message id="wt-homepage">Wt网站示例</message>
  70. <message id="treeview">树视图</message>
  71. <message id="git">Git查看器</message>
  72. <message id="chat">简单聊天示例</message>
  73. <message id="mail-composer">邮件编辑器</message>
  74. <message id="widget-gallery">Widget展示库</message>
  75. <message id="home.news">
  76. <h3><span>新闻</span></h3>
  77. </message>
  78. <message id="home.latest-news">
  79. <h4><span>最新消息</span></h4>
  80. </message>
  81. <message id="home.historical-news">
  82. <h4><span>重要消息</span></h4>
  83. </message>
  84. <message id="source-browser-link">
  85. <a href="{1}">查看源代码</a>
  86. </message>
  87. <message id="src-title">
  88. <div>
  89. </div>
  90. </message>
  91. <message id="home.intro">
  92. <h3><span>Wt:简介</span></h3>
  93. <p>Wt(音同'witty')是一个C++库,用以开发交互性Web应用。</p>
  94. <p>Wt的API<b>以widget为中心</b>,将桌面GUI APIs的良好测试模式引入Web开发。
  95. Wt为开发者提供了几乎所有Web实现细节的抽象,其中包括事件处理、图像支持、
  96. 优雅降级(或渐进增强)、及良好的URL处理。</p>
  97. <p>与其他诸多基于页面的开发框架相比,Wt可以创建状态化的应用,同时
  98. 实现了高度的交互性和可访问性;其交互性体现在Wt可以综合使用各种技术,
  99. 如Ajax等;其可访问性体现在Wt可以使应用在必要的时候支持纯HTML浏览器;
  100. 这些特性的获得充分利用了自动的<b>优雅降级或渐进增强</b>。</p>
  101. <p>Wt库还自带了应用服务器程序,可配置为独立的Web服务器,当然也允许
  102. 通过FastCGI连同其他Web服务器进行整合。</p>
  103. <h4>交互性、安全性、可访问性</h4>
  104. <p>基于页面的开发框架(如PHP、JSP/JSF、Ruby on Rails等)没有实现底层基础
  105. 技术的抽象,这些技术包括HTML/XHTML、JavaScript、CSS、Ajax、Forms、DHTML
  106. 、SVG/VML/Canvas等。显然,基于页面的开发框架必须要求开发者随时熟悉和掌握
  107. 这些基本技术,同时当浏览器不支持时,还要为应用的优雅降级负责。另外,如果
  108. 应用采取早期HTML页面为中心的设计模式,开发者不仅要实现控制器以告诉用户如何
  109. 从一个页面跳转到另一个页面,而且还要在采用一些高级Ajax技术时手工设计和维护
  110. 客户端与服务器端的通讯。</p>
  111. <p>另一方面,就算是纯粹的Ajax框架,也要求开发者通过繁杂的JavaScript编程来
  112. 处理浏览器的怪异行为和客户端与服务器端间的安全通讯,这些处理任何人都不能
  113. 跳过去不与理会。同时,这些应用通常不能符合可访问性的原则,也不能很好被搜索
  114. 机器人索引到。</p>
  115. <p>安全方面,生成HTML或填充HTML模版很容易导致安全问题,如<a
  116. href="http://en.wikipedia.org/wiki/Cross-site_scripting">跨站脚本(XSS)
  117. </a>和<a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">
  118. 跨站请求伪造(CSRF)</a>;XSS问题一般由(疏忽)允许嵌入JavaScript代码引起,
  119. CSRF问题一般由(相信)Cookies(可)作为认证手段引起。作为开发者,
  120. 这些安全问题将是很难避免的,因为我们有时需要允许用户插入自己的JavaScript
  121. 代码来实现某些功能,但开发框架本身却没提供给我们过滤机制。</p>
  122. <p>相反,使用Wt来部署Web应用可以完全用C++来开发,Wt自动产生所必须的
  123. HTML/XHTML、CSS、Javascript、CGI、SVG/VML/Canvas和Ajax代码;与此同时,
  124. 代码的安全性和浏览器兼容性等问题都将转交给Wt。例如,在可能的情况下,
  125. Wt将最大限度的使用JavaScript和Ajax,但在Ajax功能受限时,Wt也能保证
  126. 系统功能运行正常。其原理是Wt将先启用纯HTML/CGI应用,随后在可能的情况
  127. 下渐进增强至Ajax应用。另外,Wt提供了内置的安全性考虑。</p>
  128. <h4>典型应用举隅:</h4>
  129. <ul>
  130. <li>由于Wt C++ Web应用服务器占用较小的物理空间,故而可以为<b>嵌入式系统</b>
  131. 提供基于Web的GUIs;</li>
  132. <li>Wt可以为需要<b>整合现有C++库</b>的应用提供基于Web的GUIs, 这些
  133. 应用可能包括科学上的或工程上的应用;</li>
  134. <li>Wt可以创建从<b>现有C++桌面应用</b>到Web的有效渠道;</li>
  135. <li>Wt还可以应用于一些<b>高性能、复杂的</b>Web应用,这样的应用
  136. 一般具有高度定制、充分利用Ajax的特点,同时具有完全的可访问性和较高的
  137. 搜索引擎优化(SEO)需求</li>
  138. </ul>
  139. <h4>使用Wt的其他好处</h4>
  140. <ul>
  141. <li>可以使用我们熟悉的桌面GUI模式开发Web应用;</li>
  142. <li>Wt为我们提供了广阔的widgets集,这些widgets可以在环境不支持
  143. JavaScript的情况下照常工作(当然,如果支持则效果更佳);</li>
  144. <li>在Wt中客户端与服务器端的验证和事件处理采用同一规范;</li>
  145. <li>Wt允许开发者选择XHTML和CSS来进行布局和样式编辑;</li>
  146. <li>Wt可生成标准的、兼容的HTML或XHTML代码;</li>
  147. <li>Wt采用内联VML、内联SVG、HTML 5 画布或PNG可生成应用于Web的可移植的、
  148. 反锯齿的图像,当然这些图像还可以轻松渲染为PDF格式;</li>
  149. <li></li>
  150. <li>Wt可以避免常见的安全问题,因为Wt拥有对表示层的完全控制,并能够主动
  151. 过滤掉<i>处于活动状态的</i>标签和属性;Wt同时实现了业务逻辑的隐藏,并
  152. 通过状态化的设计简化了认证机制;</li>
  153. <li>基于Wt的应用的载入时间极短且占用带宽也很低,究其原因是Wt中这些特点
  154. 仅受限于页面显示的复杂程度,而不是应用程序自身的尺寸;Wt还实现了所有的
  155. 常用技巧和方法,以优化应用的快速反应,Wt几乎做到了针对所有浏览器的优化;</li>
  156. <li>Wt提供了服务器端初始的事件处理,即<i>服务器推</i>或<i>Comet</i>,
  157. 这部分API使用简单、稳定且在所有浏览器上均能实现;</li>
  158. <li>Wt在服务器部署上,既可以使用内置的httpd,又可以使用FastCGI/ISAPI,
  159. 当然前者实施起来更简便易行。</li>
  160. </ul>
  161. </message>
  162. <message id="home.features">
  163. <h3><span>特点</span></h3>
  164. <h4>核心库特点</h4>
  165. <ul>
  166. <li>支持所有主流浏览器(包括Firefox/Gecko、Internet Explorer、Safari、
  167. Chrome、Konqueror以及Opera),同时在纯HTML浏览器上亦能正常工作
  168. (已经测试过的有Links和Lynx);</li>
  169. <li>既可以在Unix/GNU Linux(gcc)上开发和部署,又可以在MS Windows
  170. (Visual Studio)上;</li>
  171. <li>Wt利用优雅降低与渐进增强可以保证应用在有无JavaScript或Ajax支持
  172. 的情况下动作行为尽可能一致(渐进增加须使用渐进启动方法);</li>
  173. <li>Wt整合了Unicode支持(UTF8/UTF16),便于全面实现本地化;</li>
  174. <li>当Ajax获得支持时,基于Wt的应用只有变化才被渲染;</li>
  175. <li>在Wt中,页面变化有可见变化和背景中不可见变化两类,当Ajax被支持时,
  176. 两类都会得到渲染,而当Ajax不被支持时,只有可见内容的变化被渲染;</li>
  177. <li>Wt中的会话跟踪选项是可以按需配置的,主要包括URL重写和Cookies两种;</li>
  178. <li>Wt中纯HTML页面或Ajax会话的动作行为是统一的,因此Wt支持浏览器历史
  179. 导航操作(向后、向前按钮和书签),可生成良好URL地址,利于搜索引擎
  180. 优化工作;</li>
  181. <li>Wt拥有高性能的特点,允许部署在低端嵌入式设备上,或者部署在所用功耗、
  182. 物理空间、经费预算等相对平衡的Internet或extranet网站上;</li>
  183. <li>Wt采用了完全基于事件驱动的异步I/O机制:会话不用绑定于线程,也不会延迟应答
  184. (如服务器推)或锁定线程;相反,线程只会被用来提高并发请求处理或事件循环
  185. 的重新进入。</li>
  186. </ul>
  187. <h4>事件处理</h4>
  188. <ul>
  189. <li>Wt使用类型安全的、基于模版的信号/槽系统来处理事件;</li>
  190. <li>支持对键盘、鼠标及焦点事件的监听,同时可以获得事件细节,比如鼠标键位、
  191. 键盘键位等;</li>
  192. <li>自动同步表单数据;</li>
  193. <li>Wt通过无状态槽实现获得了C++至JavaScript的动态转换;在此,单一C++槽的实现
  194. 提供了客户端和服务器端双重事件处理:即客户端实现显示的变化,服务器端实现
  195. 应用状态的变化;</li>
  196. <li>Wt还提供了面向开发者自定义的JavaScript代码的钩技术,比如让原本仅用于客户端
  197. 事件处理的JavaScript代码在执行后释放出C++信号;</li>
  198. <li>Wt提供了拖放API;</li>
  199. <li>Wt支持定时事件,同时内置支持服务器端初始更新(“服务器推”)。</li>
  200. </ul>
  201. <h4>原生的绘图系统</h4>
  202. <ul>
  203. <li>Wt提供统一的绘图API,此系统使用了浏览器原生的(向量)图像支持
  204. (如内联VML、内联SVG、HTML 5画布),也可以渲染到通用的图片格式
  205. (如PNG、GIF等等)或向量格式(如SVG、PDF等);</li>
  206. <li>Wt支持任意画笔路径、裁剪、输入文本、图像、变形、投影等</li>
  207. <li>使用绘图API可以绘制widget,或者创建SVG、PDF及PNG/GIF图像。</li>
  208. </ul>
  209. <h4>GUI组件</h4>
  210. 具体可进入<a href="//www.webtoolkit.eu/widgets">Widget展示库</a>
  211. 进行交互式体验。
  212. <h4>内置安全性</h4>
  213. <ul>
  214. <li>Wt采用Kernel级的内存保护方案,特别是在采用专属进程模式下,
  215. 会话之间完全隔离,这样Wt完全可以保护隐私数据免受程序错误的影响;</li>
  216. <li>Wt使用安全套接字协议层(SSL)或传输层安全协议(TLS)通过HTTPS
  217. 来支持加密和服务器认证;</li>
  218. <li>Wt满足低带宽下HTTPS持续使用的各种需求(细粒度Ajax);</li>
  219. <li>Wt提供内置跨站脚本(XSS)保护,通过预先过滤掉渲染文本中的恶意代码,
  220. 使Wt应用免受XSS的攻击;</li>
  221. <li>Wt应用能够对跨站请求伪造(CSRF)有一定的防护,因为用于会话跟踪的
  222. Cookies是可选的,即使是如此,Cookies也永远不会严格依赖于触发事件处理代码
  223. 的请求;</li>
  224. <li>Wt对跳过特定URL而对应用逻辑的破坏也有一定的防护,因为只有界面
  225. 明确的事件才会被触发;</li>
  226. </ul>
  227. <h4>对象关系映射库</h4>
  228. Wt提供了Wt::Dbo,这是Wt自带的一个库,实现了对象关系映射,Wt::Dbo为C++
  229. 应用程序与SQL数据库之间的提供了一种方便的处理方法。虽然我们说Wt::Dbo拥有的
  230. 一些特点,如最佳并发控制等,使这一技术成为数据库驱动的Web应用的理想选择
  231. (当然与Wt的MVC框架结合最佳),但我们还要说Wt::Dbo还可以被用在离线应用
  232. 或其他非Wt的应用中。
  233. Wt的ORM库(教程参见<a
  234. href="//www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html">此处</a>)
  235. 有如下特点:
  236. <ul>
  237. <li>没有所谓代码生成、没有宏、没有XML配置,仅面向C++!</li>
  238. <li>使用模板化的访问者模式,该模式要求单一模版方法以提供映射,也就是
  239. 常说的“不要重复”(DRY)或尽最大可能高效!</li>
  240. <li>在该库中,你可以指定代理自增键,或映射任意C++类型的自然键,当然也
  241. 可以是组合类型(例如,当需要不止一个数据库字段时);</li>
  242. <li>支持<a
  243. href="http://en.wikipedia.org/wiki/Optimistic_concurrency_control">
  244. 最佳并发控制</a>(利用版本字段)</li>
  245. <li>Dbo支持多对一和多对多关系到标准模板库(兼容)集合的映射</li>
  246. <li>支持模式生成(即数据定义语言DDL)和CRUD操作(即数据操作语言DML);</li>
  247. <li>Dbo使用了预备语句;</li>
  248. <li>每个会话都会追踪脏对象并提供第一层缓存;</li>
  249. <li>提供灵活的、针对单个字段、对象以及他们组合(使用Boost.Tuple)的查询;</li>
  250. <li>使用单个连接或多个会话间共享连接池,这些连接只有当交互处于活动状态时
  251. 才被使用;</li>
  252. <li>Dbo默认支持Sqlite3和PostgreSQL后端,同时<a
  253. href="http://wtdbomysql.sourceforge.net/">MySQL后端(GPL协议)</a>
  254. 正由社区爱好者开发和维护(作者Paul Harisson)。</li>
  255. </ul>
  256. <h4>测试</h4>
  257. Wt使用事件处理代码构建和操作widget树,因此这很容易使用测试代码检查,
  258. 所以Wt的<a href="
  259. http://webtoolkit.eu/wt/doc/reference/html/classWt_1_1Test_1_1WTestEnvironment.html">
  260. 测试环境</a>允许你的应用实例化,且允许在没有浏览器的情况下模拟事件处理,
  261. 这样我们可以缩减底层请求/应答循环的测试环节。
  262. <h4>部署方式</h4>
  263. <p>
  264. Wt库将不同的部署选项抽象为连接器库,连接器库将Wt连接到不同的外部环境,
  265. 选择部署方式(选项)其实就是将Wt应用连接或重连接到某个连接库上。
  266. </p>
  267. <h5>a) 内置httpd部署</h5>
  268. <ul>
  269. <li>该模式下Wt是简单、且适合于基于C++ asio库的高性能Web应用服务器
  270. (支持多线程、异步输入输出);</li>
  271. <li>既支持HTTP,也支持OpenSSL下的HTTPS;</li>
  272. <li>支持应答分割与压缩;</li>
  273. <li>支持单一进程(方便部署和调试),也方便嵌入已有应用;</li>
  274. <li>支持通过代理或为了均衡负载的web服务器端部署;</li>
  275. <li>既可以部署于UNIX平台、又可部署于Win32。</li>
  276. </ul>
  277. <h5>b) FastCGI部署</h5>
  278. <ul>
  279. <li>该模式能与多数通用web服务器(如apache, lighttpd)整合在一起;</li>
  280. <li>提供不同的会话-进程映射策略;</li>
  281. <li>支持热部署,即新会话使用新的应用版本,同时部署时未终止的旧会话仍可以
  282. 按旧的应用版本继续运行;</li>
  283. <li>该模式仅用于UNIX平台。</li>
  284. </ul>
  285. <h5>c) ISAPI部署</h5>
  286. <ul>
  287. <li>该模式整合了Microsoft IIS服务器;</li>
  288. <li>使用ISAPI异步API使性能最大化;</li>
  289. <li>仅用于Win32平台。</li>
  290. </ul>
  291. </message>
  292. <message id="home.examples">
  293. <h3><span>示例</span></h3>
  294. <p>欢迎浏览Wt的一些在线示例。</p>
  295. <p>
  296. 这些示例的源代码均包含在Wt的源代码发行包中。你可以通过每个示例下的
  297. <a href="#/src">源代码浏览器</a>查看。
  298. </p>
  299. <p>
  300. 示例源代码也以交叉链接的形式出现在
  301. <a href="//www.webtoolkit.eu/wt/doc/examples/html/modules.html" target="_blank">
  302. Wt示例doxygen文档中</a>(自动开启新窗口)。
  303. </p>
  304. </message>
  305. <message id="home.examples.hello">
  306. <div>
  307. <h4 class="example">Hello world!</h4>
  308. <p>
  309. <a href="//www.webtoolkit.eu/wt/examples/hello/hello.wt" class="run" target="_blank">
  310. <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
  311. </a>
  312. </p>
  313. <p>这个简单的例子展示了Wt的基本概念:</p>
  314. <ul>
  315. <li>
  316. 如何创建一个最小的Wt应用,如何使用<b>WRun()</b>启动web服务器,以及
  317. 如何创建一个新的<a
  318. href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WApplication.html"
  319. target="_blank">WApplication</a>实例(新会话);
  320. </li>
  321. <li>
  322. <b>如何创建widgets</b>,以及如何将其添加到<b>widgets树</b>;
  323. </li>
  324. <li>
  325. 如何使用<b>信号/槽</b>机制对事件做出反应;
  326. </li>
  327. <li>
  328. 如何读取用户输入和更新widgets树。
  329. </li>
  330. </ul>
  331. <p>对hello world示例的完整阐述请参见由Victor Venkman撰写的<a
  332. href="http://www.codeguru.com/cpp/i-n/internet/browsercontrol/article.php/c15275/"
  333. target="_blank">Wt介绍</a>(可能有点过时)。
  334. </p>
  335. </div>
  336. </message>
  337. <message id="home.examples.wt">
  338. <div>
  339. <h4 class="example">Wt网站示例</h4>
  340. <p>Wt首先为己所用了,本网站自身即是一个Wt应用实例。 </p>
  341. <p>
  342. 虽然不是一个交互性很强的应用,但Wt的网站不仅展示了Wt如何实现高度交互的Ajax应用,
  343. 同时说明Wt适合于内容驱动的网站建设。Wt为纯HTML会话和Ajax提供良好的URL支持,
  344. 这允许浏览器导航、书签等操作,还有利于搜索引擎优化。另外,Wt使用<a
  345. href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WViewWidget.html">WViewWidget</a>
  346. 来最小化服务器端内存使用以提高应用的规模。
  347. </p>
  348. <p>
  349. 导航功能由<a
  350. href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WMenu.html"
  351. target="_blank">WMenu</a>和<a
  352. href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTabWidget.html"
  353. target="_blank">WTabWidget</a>提供。这些widgets分享了共同的特性集。
  354. 对于Ajax会话,他们均支持导航条目关联内容的<b>预先载入</b>和<b>滞后载入</b>,
  355. 同时可以针对不同子条目分别<a
  356. href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WMenu.html#d7840197cc0caf0430792b9f4a0df60d"
  357. target="_blank">指定载入模式</a>。
  358. 需要说明的是,预先载入不会增加载入时间,因为Wt渲染引擎总是首先传输可见的
  359. widget和某些变化,以此来优化应答时间。不可见部分(如其他预先载入的导航子项目的内容)
  360. 则进行隐式传输,而且这种传输是在渲染可见部分完成之后进行。
  361. </p>
  362. <p>
  363. 菜单导航栏部分采用C++无状态槽,其实现结果是<b>客户端</b>事件处理。
  364. </p>
  365. <p>
  366. WMenu的<b>内部路径</b>特点允许为每个菜单条目生成URL,
  367. 这可以用于形成浏览器历史记录和书签操作。当用户通过历史记录浏览时,
  368. 应用可以通过监听WApplication对象的
  369. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WApplication.html#41c9bda19b28526e47e70b1b6045e7cf">
  370. 内部路径变化信号(internalPathChanged)</a>,直接引起菜单条目指向内容的变化。同样地,
  371. 当用户将一个URL加入书签中,并在日后重新访问时,widgets将读取该URL初始的内部路径,并创建
  372. 相应的内容以显示。
  373. </p>
  374. <p>
  375. 虽然说Wt占用很小的服务器CPU使用,但它确实也需要一部分内存来保持widget状态。当然,如果
  376. 我们能够提供足够的内存(和交换空间),这将不成问题。另外,由于Wt网站部署在虚拟专用服务器
  377. (VPS)上,所以我们对此非常小心,并通过
  378. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WViewWidget.html">WViewWidget</a>
  379. 尽可能地减小服务器资源使用。
  380. </p>
  381. </div>
  382. </message>
  383. <message id="home.examples.treeview">
  384. <div>
  385. <h4 class="example">树视图</h4>
  386. <p>
  387. <a href="//www.webtoolkit.eu/wt/examples/treeview-dragdrop/treeview-dragdrop.wt" class="run" target="_blank">
  388. <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
  389. </a>
  390. </p>
  391. 该示例展示了Wt的视图(WTreeView、WTableView和PieChart)和数据模型等相关功能。
  392. <ul>
  393. <li>
  394. 该示例使用了<a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTreeView.html"
  395. target="_blank">WTreeView</a>
  396. 和<a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTableView.html"
  397. target="_blank">WTableView</a>在树或表中渲染模型数据;
  398. </li>
  399. <li>
  400. 使用了<a
  401. href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WSortFilterProxyModel.html"
  402. target="_blank">WSortFilterProxyModel</a>
  403. 来实现别一个模型数据的排序和过滤;
  404. </li>
  405. <li>
  406. 该示例还展示如何实现选中条目的拖放效果;
  407. </li>
  408. <li>
  409. 使用了可嵌套的布局管理器(水平方向和垂直方向的
  410. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WBoxLayout.html" target="_blank">
  411. WBoxLayout</a>)来实现自动填充的布局;
  412. </li>
  413. <li>
  414. 展示了如何使用模态
  415. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WDialog.html"
  416. target="_blank"> WDialog</a>显示一个简单的表单,示例中表单使用了
  417. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WGridLayout.html"
  418. target="_blank">WGridLayout</a>作为布局管理器;
  419. </li>
  420. <li>
  421. 展示了如何使用基于上下文的
  422. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPopupMenu.html" target="_blank">
  423. WPopupMenu</a>。
  424. </li>
  425. </ul>
  426. </div>
  427. </message>
  428. <message id="home.examples.chart">
  429. <div>
  430. <h4 class="example">图表</h4>
  431. <p>
  432. <a href="//www.webtoolkit.eu/wt/examples/charts/charts.wt" class="run" target="_blank">
  433. <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
  434. </a>
  435. </p>
  436. <p>该示例展示了<a
  437. href="//www.webtoolkit.eu/wt/doc/reference/html/group__charts.html" target="_blank">Wt
  438. 的图表widgets</a>,这些widgets基于Wt的跨浏览器绘图API实现。
  439. 绘图API使用了内置于浏览器的高质量图形支持(注意:不是利用传统的在服务器端
  440. 渲染PNG/GIF图像的方法),主要依赖浏览器的内联VML、内联SVG、HTML 5画布或
  441. PNG图像等将绘制内容渲染于<a
  442. href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPaintedWidget.html"
  443. target="_blank">WPaintedWidget</a>。
  444. </p>
  445. <p>该示例同时展示了Wt的MVC框架,包括
  446. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTableView.html"
  447. target="_blank">表视图</a>和图表所基于的
  448. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WAbstractItemModel.html"
  449. target="_blank">数据模型</a>。Wt采用这种方式,能够将数据模型的每个变化自动
  450. 反应于视图的更新中。当然,数据模型可以是字符串、数值或者
  451. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WDate.html"
  452. target="_blank">日期型</a>。你可以通过编辑表视图的数据来直接观察以上动作机制。
  453. </p>
  454. <p>最后,我们还可以知道如何使用多项输入widgets、如何对输入的变化做出反应、
  455. 如何设置和读取选项的内容、以及如何使用
  456. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WComboBox.html"
  457. target="_blank">WComboBox</a>与MVC数据模型关联,在以上背景下,Wt库实现了数据
  458. 在浏览器端和服务器端的同步。</p>
  459. </div>
  460. </message>
  461. <message id="home.examples.git">
  462. <div>
  463. <h4 class="example">Git查看器</h4>
  464. <p>
  465. <a href="//www.webtoolkit.eu/wt/examples/gitmodel/gitview.wt" class="run" target="_blank">
  466. <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
  467. </a>
  468. </p>
  469. <p>
  470. 该示例展示了如何为Wt的MVC视图类(如
  471. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTreeView.html" target="_blank">
  472. WTreeView</a>)实现定制数据模型。
  473. </p>
  474. <p>
  475. Wt提供了
  476. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WStandardItemModel.html"
  477. target="_blank">WStandardItemModel</a>,该类可以被填充以数据
  478. (如由数据库获得),其缺点是所有数据存储在内存中且须提前获取。但是,
  479. 通过重新实现<a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WAbstractItemModel.html"
  480. target="_blank">WAbstractItemModel</a>,我们可以实现另一类数据模型,即
  481. 仅在需要时获取数据,这就提供了一种数据载入与数据存储的平衡。
  482. 该示例中,我们实现了树模型,该树可在<a href="http://git-scm.com/">
  483. git仓库</a>的修改中导航。该模型将文件夹节点标识符滞后存储在内存中,
  484. 以生成每个文件夹的唯一ID。最初,我们认为可以使用SHA-1 ID,但具有相同
  485. 内容、在git仓库不同位置的文件夹却具有相同的SHA-1 ID,而我们又想采用
  486. 不同的<a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WModelIndex.html"
  487. target="_blank">模型索引</a>来表达,因此采用了上面的方法。
  488. </p>
  489. </div>
  490. </message>
  491. <message id="home.examples.composer">
  492. <div>
  493. <h4 class="example">邮件编辑器</h4>
  494. <p>
  495. <a href="//www.webtoolkit.eu/wt/examples/composer/composer.wt" class="run" target="_blank">
  496. <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
  497. </a>
  498. </p>
  499. <p>
  500. 该示例实现了一个酷似GMail的邮件编辑器,除此还展示了如何轻松实现文件异步上传。
  501. </p>
  502. <ul>
  503. <li>
  504. 其中<i>ContactSuggestions</i>类提供了“收件人”、“抄送”、“密送”地址的
  505. 自动补全功能,该类继承自
  506. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WSuggestionPopup.html"
  507. target="_blank">WSuggestionPopup</a>类,此类使用了诸多
  508. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1JSlot.html"
  509. target="_blank">JSlot</a>对象。对这些槽,客户端JavaScript事件处理代码
  510. 由开发者自定义的JavaScript决定(这不同于无状态槽中客户端JavaScript
  511. 代码由第一次调用时“学习”得到的方式)。Wt采用这种方式,弹出的可能适合
  512. 的联系人列表的排序完全由客户端决定。注意:建议框中的联系人是在背景中
  513. 自动传递的,原因很简单,因为他们是不可见的。
  514. </li>
  515. <li>
  516. 其中的<i>AttachmentEdit</i>展示了
  517. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WFileUpload.html"
  518. target="_blank">WFileUpload</a>的使用,该类允许
  519. <b>文件的异步传输</b>,也就是说我们可以实现编辑邮件内容的同时上传附件。
  520. </li>
  521. <li>
  522. 其中的<i>Option</i>和<i>OptionList</i>类展示了无状态槽是如何在行为不完全
  523. 是无状态的情况下使用的。在这种情况下,一个Option的隐藏影响了临近可见Option:
  524. 即只有当存在某个临近选项时,一个选项才需要分隔线。当状态变化后,通过
  525. <b>使无状态槽的实现失效</b>,我们仍能够使用无状态槽的实现,并体验到
  526. 客户端事件处理的高效!
  527. </li>
  528. </ul>
  529. </div>
  530. </message>
  531. <message id="home.examples.chat">
  532. <div>
  533. <h4 class="example">简单聊天示例</h4>
  534. <p>
  535. <a href="//www.webtoolkit.eu/wt/examples/simplechat/simplechat.wt" class="run" target="_blank">
  536. <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
  537. </a>
  538. </p>
  539. <p>
  540. 该示例实现了一个简单的、多用户的聊天应用,它展示了Wt中如何轻松地让多个用户
  541. 即时互动,这里即用到<b>服务器端初始更新</b>将信息由一个用户推向其他用户。
  542. </p>
  543. <p>
  544. 该示例还向你展示了基于类的web开发方法的良好效果,在这种方法中,你可以轻松实现
  545. 对同一widget的多次实例化,示例中的SimpleChatClient widget就可以象使用Wt基本类
  546. (如按钮)一样,轻松实例化。
  547. </p>
  548. <p>
  549. 象聊天这样的一些交互应用,可以允许用户传输HTML文本给其他用户,众所周知,这非常
  550. 容易引起<b>跨站脚本攻击(XSS)</b>,因为用户可以不被限制地输入恶意代码(javascript)并作为
  551. 其发出文本的一部分。当对应用户渲染收到的文本时,它可能将从该用户(如浏览器
  552. cookies)获得的一些隐私信息发送出去。Wt则完全阻止了这样的进攻,同时不会给开发者带来
  553. 负担,因为象WText这样的widgets自然保证了所显示的只有安全文本(passive text),自动
  554. 舍弃任何严格意义上不是文本的东西。
  555. </p>
  556. </div>
  557. </message>
  558. <message id="home.examples.widgetgallery">
  559. <div>
  560. <h4 class="example">Widget展示库</h4>
  561. <p>
  562. <a href="//www.webtoolkit.eu/widgets" class="run" target="_blank">
  563. <img src="icons/green-play.png" style="vertical-align: top"/>前往widget展示库
  564. </a>
  565. </p>
  566. <p>
  567. 该示例展示了Wt中大部分widget,另外还展示了相应的事件处理、布局类等。
  568. 这可以作为Wt库中可执行的widget及其相关特性的参考,是有一定帮助作用的。
  569. </p>
  570. </div>
  571. </message>
  572. <message id="home.download">
  573. <h3><span>下载</span></h3>
  574. </message>
  575. <message id="home.download.license">
  576. <h4>许可</h4>
  577. <p>Wt可以在GNU通用公共许可(GPL)或商业许可下使用。</p>
  578. <p>如果你希望在<b>GPL</b>下使用Wt库,那么你可以以任何目的创建web应用,
  579. 并部署在你自己的intranet或Internet服务器上,而没有必须开放源代码的要求。
  580. </p>
  581. <p>注意,根据GPL条款规定,如果你正以二进制形式将你的web应用转给其他方使用,
  582. 其方式或为销售,或免费提供,此时你必须在发布版上附带程序源代码;同时,这
  583. 一要求亦适用于针对Wt库原始形式或修改形式的再发布。
  584. </p>
  585. <p>所谓<b>商业许可</b>则没有以上限制,具体请访问我们的
  586. <a href="//www.emweb.be/?page=license-wt">许可信息</a>
  587. 页面,以获得对许可条款、售价、订购的具体要求。
  588. </p>
  589. <p>注:网站所有中译文,特别是与法律许可等相关的内容最终以英文为准。
  590. </p>
  591. <p>同时,你还可以直接从Wt库作者处获得
  592. <a href="//www.emweb.be/services">支持与培训</a>。
  593. </p>
  594. </message>
  595. <message id="home.download.packages">
  596. <h4><span>可用版本</span></h4>
  597. </message>
  598. <message id="home.download.version"><b>版本</b></message>
  599. <message id="home.download.date"><b>日期</b></message>
  600. <message id="home.download.description"><b>描述</b></message>
  601. <message id="home.download.other">
  602. <h4>Wt库安装器:winst <span class="emph">(new!)</span></h4>
  603. 如果你现在对Wt特别好奇,想尝试一下,但是你的系统或发行版还没有提供
  604. 最新的升级包,那么这个安装器可能非常适合你。这个安装器将下载并将Wt
  605. 安装在<b>类UNIX环境</b>下,同时提供了用于运行示例的脚本。
  606. <p>
  607. Wt安装器需要<tt>CMake</tt>和<tt>GNU make</tt>,同时可能会通过<tt>wget</tt>
  608. 下载软件。
  609. </p>
  610. <p>
  611. 下载该软件包
  612. (<a href="//www.webtoolkit.eu/packages/winst-0.3.tar.gz">winst-0.3.tar.gz</a>)
  613. 或者直接获得最新的 git 版本:
  614. <div class="fragment">
  615. <pre class="fragment">$ git clone git://github.com/kdeforche/winst.git</pre>
  616. </div>
  617. </p>
  618. <h4>系统需求</h4>
  619. 为了能够编译和安装最新版的Wt库,你至少需要安装以下两个包:
  620. <ul>
  621. <li><a href="http://www.cmake.org/">CMake</a> 交叉平台make配置工具<br />
  622. 建议 CMake &gt;= 2.6(尽管2.4也能工作)。
  623. </li>
  624. <li>
  625. 必不可少的<a href="http://www.boost.org/">
  626. boost C++ 库</a>: boost-1.36 或更高版本。 <br />
  627. 下面的boost库需要安装(不只是头文件):
  628. <tt>boost_date_time</tt>、<tt>boost_regex</tt>、
  629. <tt>boost_program_options</tt>、<tt>boost_signals</tt>、
  630. <tt>boost_system</tt>和可选的(但强力推荐)
  631. <tt>boost_thread</tt>。
  632. </li>
  633. </ul>
  634. 下面的包是可选的,但如果能有可以体验到更多的Wt特性:
  635. <ul>
  636. <li><a href="http://www.postgresql.org/">PostgreSQL</a>:如果安装上,那么
  637. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1Dbo_1_1backend_1_1Postgres.html">postgres
  638. 连接器</a>将会为实现ORM库(<a href="//www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html">Wt::Dbo</a>)
  639. 而被编译;</li>
  640. <li><a href="https://github.com/libharu/libharu/wiki">libharu</a>:如果安装上,那么
  641. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPdfImage.html">WPdfImage</a>绘图设备
  642. 将被编译,这样就能够将图片整合进PDF文件或作为PDF文件处理;</li>
  643. <li><a href="http://www.graphicsmagick.org/">GraphicsMagick</a>:如果安装上,那么
  644. <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WRasterImage.html">WRasterImage</a>
  645. 绘图设备将被编译,这样就能够在光栅扫描图像(PNG或GIF)上绘图了;</li>
  646. </ul>
  647. <p>其他必需部分依赖于你所选择的连接器支持,连接器是能够实现你的Wt应用与浏览器通讯的工具:</p>
  648. <h5>对于FastCGI(限于Unix):</h5>
  649. <ul>
  650. <li>Apache 1 或 2,或其他支持FastCGI协议的web服务器</li>
  651. <li>
  652. <a href="http://www.fastcgi.com/#TheDevKit">FastCGI开发工具包</a>
  653. :fcgi-2.4.0
  654. </li>
  655. <li>
  656. 使用apache时:
  657. Apache <a href="http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz">mod_fastcgi</a>:
  658. mod_fastcgi-2.4.x.<br />或者也可以使用
  659. <a href="http://httpd.apache.org/download.cgi#mod_fcgid">mod_fcgid</a>:
  660. mod_fcgid-2.3.5。
  661. </li>
  662. </ul>
  663. <h5>对于内置 httpd(wthttpd):</h5>
  664. <ul>
  665. <li>内置httpd需要boost asio C++ 库(仅包含头文件的库);</li>
  666. <li>可选的:libz(用于HTTP压缩)和openssl(用于HTTPS支持);</li>
  667. </ul>
  668. <h5>对于ISAPI(限于Win32):</h5>
  669. <ul>
  670. <li>ISAPI连接器只有配合MS IIS服务器才能部署Wt应用。</li>
  671. </ul>
  672. 你可以依照<a
  673. href="//www.webtoolkit.eu/wt/doc/reference/html/InstallationUnix.html">安装指南
  674. </a>编译Wt并运行相关示例,或者如果你的运行平台包含在列表
  675. <a href="http://redmine.webtoolkit.eu/projects/wt/wiki/Wt_Installation">平台相关安装指南</a>
  676. 中的话,也可参照执行。
  677. <h4>Git仓库</h4>
  678. <p>如果你希望跟踪最新的变化,或者参与到Wt的开发中,你可能希望使用git仓库。</p>
  679. <p>
  680. 检出操作:
  681. <div class="fragment">
  682. <pre class="fragment">$ git clone git://github.com/kdeforche/wt.git</pre>
  683. </div>
  684. </p>
  685. </message>
  686. <message id="home.community">
  687. <h3><span>社区</span></h3>
  688. <h4>作者</h4>
  689. <p>
  690. Wt最初由<a
  691. href="mailto:koen@emweb.be">Koen Deforche</a>开发,目前由
  692. <a href="//www.emweb.be/">Emweb bvba</a>公司维护。</p>
  693. <p>我们非常感谢以下开源项目(代码借鉴):</p>
  694. <ul>
  695. <li>Wt内置的httpd基于<a
  696. href="http://asio.sourceforge.net/">asio C++库
  697. </a>的一个示例开发,该库由Christopher M. Kohlhoff开发(遵循<a
  698. href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License</a>);</li>
  699. <li>Wt的<a href="http://threadpool.sourceforge.net/">Thread pool</a>
  700. 实现来自于Philipp Henkel(遵循<a
  701. href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License</a>);</li>
  702. <li>Wt的<a href='http://rapidxml.sourceforge.net/'>RapidXML</a>
  703. 库由Marcin Kalicinski开发(遵循<a
  704. href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License</a>)。</li>
  705. </ul>
  706. <h4>Wiki</h4>
  707. <p>
  708. <a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Wt Wiki</a>
  709. 由社区维护,包括很多有用信息,如针对不同Linux发行版的安装说明等。
  710. </p>
  711. <h4>支持</h4>
  712. <p>你可以直接从Wt库作者处获得
  713. <a href="//www.emweb.be/services">支持与培训</a>
  714. </p>
  715. <p>另外,你还可以从我们的<a
  716. href="http://redmine.webtoolkit.eu/projects/wt/boards">社区论坛
  717. </a>获取帮助, 当然还有<a
  718. href="mailto:witty-interest@lists.sourceforge.net">邮件列表</a>
  719. (<a
  720. href="http://lists.sourceforge.net/lists/listinfo/witty-interest">
  721. 如何加入</a>),你可以通过<a
  722. href="http://gmane.org/info.php?group=gmane.comp.web.witty.general">Gmane
  723. gateway</a>搜索或浏览邮件列表存档内容(向建立者 Pau Garcia i Quiles 致敬)
  724. </p>
  725. <h4>贡献</h4>
  726. <p>Wt的开发得到以下公司或组织的资助:</p>
  727. <p>
  728. <table>
  729. <tr>
  730. <td class="sponsor-logo"><a href="//www.emweb.be/">
  731. Emweb bvba</a>
  732. </td>
  733. <td class="sponsor-role">
  734. Wt创建者、官方维护者以及相关支持的提供者
  735. </td>
  736. </tr>
  737. <tr>
  738. <td class="sponsor-logo">
  739. <a href="http://www.eurofer.be/">
  740. Eurofer</a>
  741. </td>
  742. <td class="sponsor-role">
  743. Wt图表库、WTreeView、及分层数据模型等开发的资助者
  744. </td>
  745. </tr>
  746. </table>
  747. </p>
  748. <p>我们欢迎用户为Wt献计献策,这可能包括某些widgets的小补丁、
  749. widget集以及Wt核心性能提高等。</p>
  750. <p>然而,由于Wt采用开源与商业双重许可,并将Wt作为一个整体在法律上予以保护,
  751. 即将Wt作为一个实体,而对于每个部分的版权不予考虑,因此我们在接受用户贡献之前
  752. 要求贡献者将版权指认给<a href="//www.emweb.be/">Emweb</a>。
  753. </p>
  754. <p>注:网站所有中译文,特别是与法律许可等相关的内容最终以英文为准。
  755. </p>
  756. <h4>翻译</h4>
  757. Wt网站的中文翻译工作由中央民族大学宋志民协助完成。
  758. <h4>Sourceforge</h4>
  759. <a href="http://sourceforge.net"><img src="https://sflogo.sourceforge.net/sflogo.php?group_id=153710&amp;type=1" style="vertical-align:middle" width="88" height="31" border="0" alt="SourceForge.net Logo" /></a>
  760. Wt在Sourceforge的主页请点击<a href="http://sourceforge.net/projects/witty/">此处</a>。
  761. </message>
  762. <message id="home.other-language">
  763. <h3><span>!C++ ?</span></h3>
  764. <p>你是否喜欢Wt库的功能,但又不太倾向于C++编程?</p>
  765. <p>不要失望,Wt还有其他语言的原生变体或可与其他语言绑定使用:
  766. <ul class="languages">
  767. <li>
  768. <div>
  769. <img class="java-language-icon" src="icons/java-logo.png" alt="Java"></img>
  770. 你可以使用我们的<a href="/jwt">JWt</a>,JWt是Wt原生的<b>Java</b>版。JWt
  771. 与Wt同时开发与维护,虽然他们之间有些许差异,但功能和特点几乎相同。JWt可以
  772. 运行在JVM中,并可以部署于任何Servlet内。
  773. </div>
  774. <br style="clear: both" />
  775. </li>
  776. <li>
  777. <div>
  778. <img class="language-icon" src="icons/ruby-logo-R.png" alt="Ruby"></img>
  779. Richard Dale 正在开发和维护
  780. <a href="http://github.com/rdale/wtruby/tree/master">WtRuby</a>,也就是将
  781. <b>Ruby</b>绑定到Wt,WtRuby实施原理与将Ruby绑定到Qt和KDE相同。
  782. </div>
  783. <br style="clear: both" />
  784. </li>
  785. <li>
  786. <div>
  787. <img class="language-icon" src="icons/clojure-logo.png" alt="Clojure"></img>
  788. 为了达到JVM对其他语言的支持,Raphael Bauduin正在实验<a
  789. href="http://www.nsa.be/index.php/eng/Blog/Using-Jwt-yes-it-s-a-J-with-Clojure">
  790. 从<b>Clojure</b>(LISP变体)中使用JWt</a>,链接中记录了他的实验过程,该项目最终
  791. 将开发出一个小型支持库。
  792. </div>
  793. <br style="clear: both" />
  794. </li>
  795. </ul>
  796. </p>
  797. </message>
  798. <message id="home.documentation">
  799. <h3><span>文档</span></h3>
  800. <h4>编译和安装</h4>
  801. <p>
  802. 通用安装指南(UNIX)请点击
  803. <a href="//www.webtoolkit.eu/wt/doc/reference/html/InstallationUnix.html">此处</a>,此文档也可
  804. 在源文件包中找到,分别为INSTALL或INSTALL.html文件。</p>
  805. <p>
  806. 另外,<a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Wt Wiki</a> 还有一部分涉及到
  807. <a href="http://redmine.webtoolkit.eu/projects/wt/wiki/Wt_Installation">平台相关安装说明</a>。
  808. </p>
  809. <h4>介绍和入门</h4>
  810. <ul>
  811. <li>请参考我们的<a
  812. href="//www.webtoolkit.eu/doc/Wt-WhitePaper.pdf">白皮书</a>以了解使用Wt较之于其他传统web开发框架的好处。
  813. </li>
  814. <li>Dr Dobbs Journal上有一篇很好的<a href="http://www.ddj.com/cpp/206401952">
  815. 介绍性文章</a> (2008年2月)。</li>
  816. <li>Wt参考手册中包含一篇
  817. <a href="//www.webtoolkit.eu/wt/doc/reference/html/overview.html">Wt库概览
  818. </a>,这是一篇很好的入门文章。</li>
  819. <li>Software Developers Journal上有一篇入门性文章(
  820. <a href="//www.webtoolkit.eu/wt/doc/tutorial/wt-sdj.xhtml">在线阅读</a>,
  821. <a href="//www.webtoolkit.eu/wt/doc/tutorial/wt-sdj.pdf">PDF版</a>)
  822. (写于2006年4月,稍微有点过时),
  823. 这篇入门文章使用了Hangman猜词游戏示例的代码(也可参看源文件)进行介绍。
  824. </li>
  825. <li>Victor Venkman所写的
  826. <a href="http://www.codeguru.com/cpp/i-n/internet/browsercontrol/article.php/c15275/">Wt介绍</a>中,对
  827. <a href="#/wt/examples/">hello world 示例</a>进行了评测。
  828. </li>
  829. </ul>
  830. <h4>参考手册</h4>
  831. <p><a href="//www.webtoolkit.eu/wt/doc/reference/html/index.html"
  832. target="_blank"> Wt参考手册</a>(在新窗口中开启)直接由doxygen从源码中生成,
  833. 手册中也包含了关于树表示例的入门教程,特别是针对无状态槽的实现机制进行了
  834. 说明,另外还强调了Wt允许客户端代码在事件处理中可进一步优化的一些高级特性。
  835. </p>
  836. <h4>注释性示例</h4>
  837. <p>示例的源码级文档也已经制作完成,<a href="//www.webtoolkit.eu/wt/doc/examples/html/modules.html"
  838. target="_blank">在此查看</a>(新窗口中打开)。</p>
  839. <h4>Wiki</h4>
  840. <p>由社区维护的<a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Wt Wiki</a>也可以查看,里面有
  841. 很多有用信息,比如FAQ和一些技巧等。
  842. </p>
  843. </message>
  844. <message id="srcview.title.CPP.">
  845. <div class="srcviewtitle">
  846. <h2>Wt示例源代码</h2>
  847. <p>
  848. 浏览<a href="//www.webtoolkit.eu/wt">Wt</a>中所有示例的源代码。
  849. </p>
  850. </div>
  851. </message>
  852. <message id="srcview.title.">Wt示例</message>
  853. <message id="srcview.title.CPP.hello">
  854. <div class="srcviewtitle">
  855. <h2><i>Hello world</i>示例源代码</h2>
  856. <p>
  857. 浏览以下
  858. <a href="#/cn/examples/hello_world">
  859. Hello world</a>示例源代码。
  860. </p>
  861. </div>
  862. </message>
  863. <message id="srcview.title.hello">示例:Hello world</message>
  864. <message id="srcview.title.CPP.charts">
  865. <div class="srcviewtitle">
  866. <h2><i>图表</i>示例源代码</h2>
  867. <p>
  868. 浏览以下
  869. <a href="#/cn/examples/charts">
  870. 图表</a>示例源代码。
  871. </p>
  872. </div>
  873. </message>
  874. <message id="srcview.title.charts">示例:图表</message>
  875. <message id="srcview.title.CPP.treeview-dragdrop">
  876. <div class="srcviewtitle">
  877. <h2><i>树视图</i>示例源代码</h2>
  878. <p>
  879. 浏览以下
  880. <a href="#/cn/examples/treeview">
  881. 树视图</a>示例源代码。
  882. </p>
  883. </div>
  884. </message>
  885. <message id="srcview.title.treeview-dragdrop">示例:树视图</message>
  886. <message id="srcview.title.CPP.composer">
  887. <div class="srcviewtitle">
  888. <h2><i>邮件编辑器</i>示例源代码</h2>
  889. <p>
  890. 浏览以下
  891. <a href="#/cn/examples/composer">
  892. 邮件编辑器</a>示例源代码。
  893. </p>
  894. </div>
  895. </message>
  896. <message id="srcview.title.composer">示例:邮件编辑器</message>
  897. <message id="srcview.title.CPP.wt-homepage">
  898. <div class="srcviewtitle">
  899. <h2><i>Wt网站</i>示例源代码</h2>
  900. <p>
  901. 浏览以下
  902. <a href="#/cn/examples/wt-homepage">
  903. Wt网站</a>示例源代码。
  904. </p>
  905. </div>
  906. </message>
  907. <message id="srcview.title.wt-homepage">示例:Wt网站</message>
  908. <message id="srcview.title.CPP.gitmodel">
  909. <div class="srcviewtitle">
  910. <h2><i>Git查看器</i>示例源代码</h2>
  911. <p>
  912. 浏览以下
  913. <a href="#/cn/examples/gitmodel">
  914. Git查看器</a>示例源代码。
  915. </p>
  916. </div>
  917. </message>
  918. <message id="srcview.title.gitmodel">示例:Git查看器</message>
  919. <message id="srcview.title.CPP.simplechat">
  920. <div class="srcviewtitle">
  921. <h2><i>简单聊天</i>示例源代码</h2>
  922. <p>
  923. 浏览以下
  924. <a href="#/cn/examples/simplechat">
  925. 简单聊天</a>示例源代码。
  926. </p>
  927. </div>
  928. </message>
  929. <message id="srcview.title.simplechat">示例:简单聊天</message>
  930. <message id="srcview.title.CPP.widgetgallery">
  931. <div class="srcviewtitle">
  932. <h2><i>Widget展示库</i>示例源代码</h2>
  933. <p>
  934. 浏览以下
  935. <a href="#/cn/examples/widgetgallery">
  936. Widget展示库</a>示例源代码。
  937. </p>
  938. </div>
  939. </message>
  940. <message id="srcview.title.widgetgallery">示例:Widget展示库</message>
  941. </messages>