12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490 |
- <?xml version="1.0" encoding="UTF-8" ?>
- <messages>
- <message id="template">
- <div id="top_wrapper">
- <div id="top_content">
- ${languages}
- <div id="top_wt">
- <a href="//www.emweb.be/">
- <img src="/css/wt/emweb_powered.jpg" alt="Emweb" height="22" />
- </a>
- </div>
- </div>
- </div>
- <div id="banner_wrapper">
- <div id="banner_content">
- <div id="banner_end">
- <div id="banner">
- <!-- <a href="#">Wt</a> -->
- </div>
- </div>
- </div>
- </div>
- <div id="main_wrapper" class="home">
- <div id="main_content">
- <div id="main_menu">
- ${menu}
- ${sidebar}
- </div>
- ${contents}
- <div class="clearall"></div>
- </div>
- </div>
- <div id="footer_wrapper">
- <div id="footer_content">
- <div id="footer_copyright">
- <a href="//www.emweb.be/">
- <img src="/css/wt/emweb_large.jpg" height="25" width="101"
- alt="Emweb.be" title="emweb.be"/></a>
- Решения для систем на базе web<br/>
- <a href="//www.emweb.be/">www.emweb.be</a>
- </div>
- <div id="footer_menu">
- <a href="//www.webtoolkit.eu/wt">Главная</a>
- | <a href="//www.emweb.be/contact">Контакты</a>
- </div>
- <div id="chat"></div>
- <script src="//www.webtoolkit.eu/wt/examples/simplechat/chat.js?div=chat" type="text/javascript"></script>
- <div class="clearall"></div>
- </div>
- <script type="text/javascript">
- /*<![CDATA[*/
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
- ga('create', 'UA-4345578-1', 'auto');
- ga('send', 'pageview');
- /* ]]> */
- </script>
- </div>
- </message>
- <message id="wt">Wt, инструментарий C++ для Web</message>
- <message id="introduction">Введение</message>
- <message id="blog">Блог</message>
- <message id="features">Возможности</message>
- <message id="documentation">Документация</message>
- <message id="examples">Примеры</message>
- <message id="download">Загрузка</message>
- <message id="community">Поддержка</message>
- <message id="other-language">!C++</message>
- <message id="hello-world">Здравствуй, мир!</message>
- <message id="charts">Графики (диаграммы)</message>
- <message id="wt-homepage">Домашняя страница Wt</message>
- <message id="treeview">Класс Treeview</message>
- <message id="git">Обозреватель Git</message>
- <message id="chat">Чат</message>
- <message id="mail-composer">Редактор писем</message>
- <message id="hangman">Виселица</message>
- <message id="widget-gallery">Галерея виджетов</message>
- <message id="home.news">
- <h3><span>Новости</span></h3>
- </message>
- <message id="home.latest-news">
- <h4><span>Последние новости</span></h4>
- </message>
- <message id="home.historical-news">
- <h4><span>Исторические новости</span></h4>
- </message>
- <message id="source-browser-link">
- <a href="{1}">Просмотр исходного кода</a>
- </message>
- <message id="src-title">
- <div>
- </div>
- </message>
- <message id="home.intro">
- <h3><span>Wt: Введение</span></h3>
- <p>Wt (произносится "<i>витти</i>") - это библиотека C++ для разработки
- web-приложений.</p>
- <p>API, центральное место в котором занимают <b>виджеты</b>, использует хорошо
- проверенные паттерны разработки GUI, адаптированные для web. Это позволяет
- разработчику абстрагироваться от специфических для web деталей реализации,
- включая протоколы взаимодействия клиента и сервера, управление событиями,
- поддержку графики, постепенную деградацию (graceful degradation) или
- прогрессивное расширение (progressive enhancement), а также работу с URL.</p>
- <p>В отличии от многих странично-ориентированных фреймворков,
- Wt была разработана для создания web-приложений, обладающих состоянием, которые,
- к тому же, весьма интерактивны (благодаря задействованию всех возможностей
- таких технологий, как WebSockets и Ajax), и доступны (благодаря поддержке
- браузеров простого HTML), автоматически осуществляя <b>постепенную деградацию
- или прогрессивное расширение</b>. То, что естественно и просто сделать с
- помощью Wt, может потребовать чрезмерных усилий при попытке осуществить это
- самостоятельно, например: анимационная смена виджетов без ущерба для правильной
- индексации по URL поисковыми роботами, или постоянно открытый виджет чата,
- который работает даже в таких старых браузерах как
- Microsoft Internet Explorer 6.
- </p>
- <p>В библиотеку входит сервер приложений, который действует как
- самостоятельный сервер Http(s)/WebSockets или интегрируется через FastCGI
- с другими web-серверами.</p>
- <h4>Интерактивна, безопасна, доступна</h4>
- <p>Странично-ориентированные фреймворки (Django, Ruby on Rails, PHP и т.п.)
- не пытаются абстрагироваться от лежащих в их основе технологий
- (HTML/XHTML, JavaScript, CSS, Ajax, WebSockets, Comet, Forms, DHTML,
- SVG/VML/Canvas). Как следствие, разработчик должен быть знаком
- со всеми этими постоянно развивающимися технологиями, а так же предусматривать
- постепенную деградацию на случай ограниченных возможностей браузера.
- Структура многих web-приложений по сей день во многом следует
- странично-ориентированной парадигме времён ранних версий HTML. Это означает
- не только необходимость реализовывать контроллер для учёта перемещения
- пользователя от страницы к странице, но и, при использовании Ajax или
- WebSockets, - самостоятельно проектировать и реализовывать взаимодействие
- клиента и сервера.</p>
- <p>С другой стороны, использование "чистых" Ajax-фреймворков приводит к
- утомительному программированию на JavaScript, где необходимо иметь дело с
- причудами браузеров и реализовывать безопасное взаимодействие с ресурсами
- сервера. Обычно такие приложения не отвечают рекомендациям принципов
- доступности web-содержимого разными способами (accessibility guidelines),
- и не могут быть проиндексированы поисковыми роботами.</p>
- <p>Генерация кода HTML или использование шаблонов HTML провоцирует проблемы
- безопасности, такие как <a
- href="http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B8%D0%BD%D0%B3">
- XSS (Cross-Site-Scripting - "Межсайтовый скриптинг")</a>, непреднамеренно
- позволяя коду JavaScript быть вставленному в страницу,
- и <a
- href="http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0_%D0%BC%D0%B5%D0%B6%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D1%8B%D1%85_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2">CSRF
- (Cross-Site Request Forgery - "Подделка межсайтовых запросов")</a>,
- доверяя информации об аутентификации, находящейся в куках (cookies).
- Упомянутых проблем трудно избежать при использовании традиционных фреймворков
- когда Вы, как разработчик, должны реализовывать некоторый функционал на
- JavaScript, который в этом случае не сможет быть отфильтрован фреймворком.</p>
- <p>Напротив, web-приложение на базе Wt разрабатывается только с использованием
- C++ API, и библиотека сама генерирует необходимый код HTML, CSS, Javascript,
- CGI, SVG/VML/Canvas и Ajax. Безопасность и кросс-браузерность web-приложений
- обеспечивается Wt. Например, когда это возможно, Wt максимально задействует
- JavaScript, Ajax и даже WebSockets, хотя, в то же время, Wt-приложения
- корректно функционируют и без JavaScript. Сначала Wt запускает
- простое приложение HTML/CGI, и затем прогрессивно расширяет его до
- Ajax-приложения, если это оказывается возможным. Wt также обеспечивает
- встроенную по умолчанию безопасность.</p>
- <h4>Типичные сценарии использования:</h4>
- <ul>
- <li><b>Высокопроизводительные, сложные</b> web-приложения, которые
- полностью персонализированы (и, как следствие, кэширование для которых
- не приносит выигрыша), с полной поддержкой Ajax, и, в то же время,
- полностью доступные и оптимизированные для поисковых систем.</li>
- <li>GUI на базе web для <b>встроенных систем</b>, благодаря
- малому размеру web-сервера приложения на C++.</li>
- <li>GUI на базе web, которому требуется <b>интеграция с (существующими)
- библиотеками C++</b>, например, для научных или инженерных приложений,
- или <b>с существующими настольными приложениями C++</b>.</li>
- </ul>
- <h4>Другие выгоды от использования Wt</h4>
- <ul>
- <li>Разработка web-приложений с использованием хорошо знакомых
- паттернов разработки GUI настольных систем.</li>
- <li>Наличие обширного набора виджетов, которые могут работать без
- JavaScript (но с ним работают ещё лучше).</li>
- <li>Единая спецификация клиентской и серверной валидаций и управления
- событиями.</li>
- <li>Возможноть использования XHTML и CSS для компоновки и оформления.</li>
- <li>Генерация отвечающего стандартам HTML или XHTML кода.</li>
- <li>Переносимая, сглаженная (anti-aliased) графика, оптимизированная для
- использования в web (посредством встроенного VML, встроенного SVG,
- HTML5 canvas или изображений PNG), которая также может быть использована
- для вывода в PDF.</li>
- <li>Позволяет избежать распространённых проблем безопасности поскольку
- обладает полным контролем над уровнем представления и проактивно фильтрует
- <i>активные</i> тэги и атрибуты, не влияя на бизнес логику,
- и упрощает аутентификацию благодаря наличию состояний у приложений.</li>
- <li>Сверхбыстрая загрузка и рачительное использование канала связи,
- на которые влияет только сложность картинки, а не размер приложения.
- Wt реализует все известные приёмы оптимизации отзывчивости приложений,
- используя для этого даже специфические особенности различных браузеров.</li>
- <li>Простой API с хорошей кросс-браузерной реализацией инициируемых
- сервером событий, т.е. <i>server push</i> (посредством <i>comet</i>
- или WebSockets).</li>
- <li>Возможность использования встроенного сервера httpd для простоты
- разработки и развёртывания, или FastCGI/ISAPI для развёртывания на
- действующих web-серверах.</li>
- </ul>
- </message>
- <message id="home.features">
- <h3><span>Возможности</span></h3>
- <h4>Ключевые возможности библиотеки</h4>
- <ul>
- <li>Поддержка основных браузеров (Firefox/Gecko, Internet Explorer,
- Safari, Chrome, Konqueror и Opera), а также браузеров простого HTML
- (Links, Lynx).</li>
- <li>Разработка и развёртывание на Unix/GNU Linux или Microsoft Windows
- (Visual Studio).</li>
- <li>Идентичное поведение как при поддержке JavaScript или Ajax, так и без
- таковой, насколько это возможно, посредством постепенной деградации
- (graceful degradation) или прогрессивного расширения (progressive
- enhancement).</li>
- <li>Интегрированная поддержка Юникода и локализации.</li>
- <li>Эффективный рендеринг и низкая латентность.</li>
- <li>Поддержка перемещения с помощью истории браузера (кнопки
- "назад"/"вперёд" и закладки), лаконичные URL при доступности истории HTML5,
- оптимизация для поисковиков и однообразное поведение сессий простого HTML
- или Ajax.</li>
- <li>Настраиваемые опции отслеживания сессий, либо посредством перезаписи URL,
- либо с помощью использования кук.</li>
- <li>Высокая производительность, которая позволяет развёртывать приложения
- на встраиваемых устройсвах класса low-end,
- или энерго-, место- и бюджетно-сберегающие развёртывания web-сайтов
- в Интернет или в экстранет.</li>
- <li>Полностью событейно-управляемый асинхронный ввод/вывод:
- сессии не привязаны к потокам, и открываемые соединения не блокируют их.
- Напротив, потоки необходимы как раз для улучшения обслуживания конкурентных
- запросов или для повторяющихся циклов событий (reentrant event loops).</li>
- </ul>
- <h4>Обработка событий</h4>
- <ul>
- <li>Использует современный типобезопасный сигнально/слотовый API для реакции
- на события.</li>
- <li>Отслеживает события клавиатуры, мыши и фокусировки, и позволяет получать
- их детали (например, позицию курсора мыши, нажатых кнопок модификаторов,
- или клавиш клавиатуры).</li>
- <li>Автоматическая синхронизация данных в полях формы между браузером и
- сервером.</li>
- <li>Динамическая трансляция из C++ в JavaScript, путём определения
- <i>слотов без состояния (stateless slot)</i>. Такие слоты определяются на
- C++, после чего обработка событий осуществляется как на стороне клиента,
- так и на стороне сервера: визуальные изменения обрабатываются на стороне
- клиента, а состояние приложения отслеживается на стороне сервера.</li>
- <li>Возможность подключения произвольного кода JavaScript (например, для
- обработки событий только на стороне клиента), и <i>эмитирования</i> из
- этого кода сигналов C++.</li>
- <li>Drag&Drop API.</li>
- <li>Повременные события и инициируемые сервером обновления
- ("server push").</li>
- <li>Использует простой HTML CGI, Ajax или WebSockets.</li>
- </ul>
- <h4>Собственная система рисования</h4>
- <ul>
- <li>Унифицированный API рисования, который использует встроенные возможности
- браузеров отображения векторной графики (встроенный VML, встроенный SVG
- или HTML 5 canvas), или распространённые форматы растровых изображений
- (PNG, GIF и т.п.) или векторых изображений (SVG, PDF).</li>
- <li>Поддерживает произвольные пути рисователя, обрезку, текст, изображения,
- трансформации, тени.</li>
- </ul>
- <h4>Компоненты GUI</h4>
- Смотрите <a href="//www.webtoolkit.eu/widgets">Галерею
- виджетов</a> для интерактивного обзора встроенной функциональности.
- <h4>Встроенная безопасность</h4>
- <ul>
- <li>Защита памяти на уровне ядра решает проблемы приватности, возникающие
- из-за ошибок программирования, так как сессии могут быть полностью
- изолированы друг от друга (в режиме отдельных процессов).</li>
- <li>Поддержка шифрования и серверной аутентификации посредством
- Secure Sockets Layer (SSL) или Transport Layer Security (TLS)
- через HTTPS.</li>
- <li>Непрерывное использование HTTPS благодаря низким требованиям к
- пропускной способности канала передачи данных (за счёт
- fine-grained Ajax).</li>
- <li>Встроенная возможность предотвращения атак типа "межсайтовый
- скриптинг" (Cross-Site Scripting - XSS). Выводимый текст всегда
- отфильтрован от потенциально вредоносного кода, делая XSS-атаки на
- приложения Wt (почти) невозможными.</li>
- <li>Неуязвима в части "подделки HTTP-запросов" (Cross-site
- Request Forgery - CSRF), потому что для отслеживания сессий не обязательно
- использовать куки, но даже если они и используются, то библиотека никогда
- не полагается исключительно на них при запросах, которые провоцируют
- запуск кода обработки события.</li>
- <li>Неуязвима в части нарушения логики приложения путём перехода по
- определённому URL, поскольку обработаны могут быть только те события,
- которые предусмотрены интерфейсом.</li>
- </ul>
- <h4>Библиотека объектно-реляционного отображения</h4>
- Wt имеет в своём составе Wt::Dbo, самодостаточную библиотеку, реализующую
- объектно-реляционное отображение (Object-Relational mapping - ORM), и, таким
- образом, предоставляет удобный способ взаимодействия с системами управления
- баз данных SQL из C++. Хотя такие возможности как оптимистическое управление
- конкурентным доступом (optimistic concurrency control) делают эту технологию
- идеальной для web-приложений, опирающихся на базу данных (она также хорошо
- интегрируется с MVC классами Wt), библиотека также может быть использована
- для оффлайн и других приложений (она не зависит от Wt).
- Библиотека ORM (которая заслуживает отдельного рассмотрения, изложенного в <a
- href="//www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html">этом
- пособии</a>) обладает следующими возможностями:
- <ul>
- <li>Нет ни генерации кода, ни "макросомагии", ни XML
- конфигурирований. Используется только современный C++!</li>
- <li>Применяется шаблонизированный паттерн <i>посетитель (visitor)</i>,
- которому требуется один шаблонный метод для осуществления отображения:
- немыслимо эффективно!</li>
- <li>Вы можете определять суррогатные, автоматически инкрементируемые ключи,
- или отображать естественные (в т.ч. и составные, состоящие более чем из
- одного поля в базе данных) ключи на любой тип данных C++.</li>
- <li>Поддержка <a
- href="http://en.wikipedia.org/wiki/Optimistic_concurrency_control">
- оптимистического управления конкурентным доступом</a> с помощью
- специально выделенных для этого полей данных в базе.</li>
- <li>Возможность отображения отношений "один-ко-многим" и "многие-ко-многим"
- на STL-совместимые коллекции.</li>
- <li>Имеются операции генерирования схемы данных (т.е. DDL: data
- definition language (язык описания данных)) и работы с данными
- (т.е. DML: data manipulation language (язык манипулирования данными)).</li>
- <li>Повсеместно используются предподготовленные выражения (prepared
- statements).</li>
- <li>В каждой сессии отслеживаются "грязные" (не сохранённые) объекты и
- обеспечивается первичное кэширование.</li>
- <li>Возможность осуществления гибкой выборки отдельных полей, объектов, или
- их кортежей (с помощью Boost.Tuple).</li>
- <li>Возможность использования одного соединения или пула соединений из
- множества сессий, в которых эти соединения фактически будут использоваться
- только во время транзакций.</li>
- <li>Поддерживаются СУБД Sqlite3 и PostgreSQL, а также <a
- href="http://wtdbomysql.sourceforge.net/">MySQL (только
- GPL)</a>, поддержка которой обеспечивается сообществом (Полом Гариссоном
- (Paul Harisson)).</li>
- </ul>
- <h4>Тестирование</h4>
- В Wt код обработки событий создаёт и манипулирует деревом виджетов,
- которое может быть легко проверено тестирующим кодом. Поэтому,
- <a href="http://webtoolkit.eu/wt/doc/reference/html/classWt_1_1Test_1_1WTestEnvironment.html">среда
- тестирования</a> позволяет инстанцировать приложение и имитировать возникновение
- событий при отсутствии браузера, тем самым сокращая время цикла обработки
- запроса и ответа на него (request/response cycle), которое потребовалось бы
- браузеру.
- <h4>Развёртывание</h4>
- <p>
- Различные способы развёртывания представлены библиотекой в виде коннекторов.
- Способ развёртывания определяется на этапе компоновки (редактирования связей)
- с одним из коннекторов!
- </p>
- <h5>a) Встроенный httpd</h5>
- <ul>
- <li>Простой, высокопроизводительный сервер web-приложений (многопоточный,
- с асинхронным вводом/выводом) на базе библиотеки C++ asio.</li>
- <li>Поддерживает HTTP и HTTPS посредством библиотеки OpenSSL.</li>
- <li>Поддерживает разбиение ответа на части и компрессию.</li>
- <li>Один процесс (что удобно для разработки и отладки), который может быть
- встроен в существующее приложение.</li>
- <li>Поддержка развёртывания за проксирующим (и, если необходимо,
- балансирующим нагрузку) web-сервером.</li>
- <li>Доступен для платформ UNIX и Win32.</li>
- </ul>
- <h5>b) FastCGI</h5>
- <ul>
- <li>Интеграция с распространёнными web-серверами (apache, lighttpd).</li>
- <li>Различные стратегии отображения сессий на процессы.</li>
- <li>"Горячее" развёртывание: новые сессии используют новую версию приложения,
- в то время как старые сессии могут продолжать работать с соответствующей
- им версией приложения.</li>
- <li>Доступен только для платформ UNIX.</li>
- </ul>
- <h5>c) ISAPI</h5>
- <ul>
- <li>Интеграция с Microsoft IIS server.</li>
- <li>Использование асинхронного API ISAPI для максимального
- быстродействия.</li>
- <li>Доступен для платформ Win32.</li>
- </ul>
- </message>
- <message id="home.examples">
- <h3><span>Примеры</span></h3>
- <p>Посмотрите несколько работающих примеров Wt ниже.</p>
- <p>
- Исходный код этих (и многих других) примеров включен в исходный
- дистрибутив Wt. Вы также можете просматривать исходный код
- каждого примера с помощью <a href="#/src">просмотрщика исходного кода</a>,
- перейдя по ссылке, расположенной под описанием каждого примера.
- </p>
- <p>
- Исходный код этих примеров также доступен из
- <a href="//www.webtoolkit.eu/wt/doc/examples/html/modules.html" target="_blank">
- документации, сгенерированной системой doxygen (в новом окне)</a>.
- </p>
- </message>
- <message id="home.examples.hello">
- <div>
- <h4 class="example">Здравствуй, мир!</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/hello/hello.wt" class="run" target="_blank">
- <img src="/icons/green-play.png" style="vertical-align: top"/> Запуск
- </a>
- </p>
- <p>Этот простой пример иллюстрирует наиболее простые концепции Wt:</p>
- <ul>
- <li>
- Создание минимального приложения Wt, используя <b>WRun()</b> для запуска
- web-сервера, и функцию создания объекта <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WApplication.html"
- target="_blank">WApplication</a>, представляющего новую сессию.
- </li>
- <li>
- <b>Создание виджетов</b> и добавление их в <b>дерево виджетов</b>.
- </li>
- <li>
- Реагирование на события с помощью механизма <b>сигнал/слот</b>.
- </li>
- <li>
- Чтение ввода пользователя и обновление виджетов.
- </li>
- </ul>
- <p>Для подробного (хотя немного устаревшего) разъяснения примера
- "Здравствуй, мир!", смотрите также <a
- href="http://www.codeguru.com/cpp/i-n/internet/browsercontrol/article.php/c15275/"
- target="_blank">прекрасное введение в Wt</a>, написанное Виктором Венкманом
- (Victor Venkman).</p>
- </div>
- </message>
- <message id="home.examples.wt">
- <div>
- <h4 class="example">Домашняя страница Wt</h4>
- <p>Мы сами используем то, что создаём: этот сайт является приложением Wt.</p>
- <p>
- Будучи не слишком уж интерактивным приложением, домашняя страница Wt
- показывает, что Wt с успехом может быть использована для сайтов, где
- упор делается именно на содержимое (content-driven websites). Тот факт,
- что Wt поддерживает лаконичные URL одинаково как для сессий Ajax, так и для
- сессий простого HTML (используя поддержку истории HTML5, если возможно),
- позволяет использовать историю браузера и закладки, а также обеспечивает
- оптимизацию для поисковых систем.
- </p>
- <p>
- Навигация обеспечивается посредством <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WMenu.html"
- target="_blank">WMenu</a> и <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTabWidget.html"
- target="_blank">WTabWidget</a>. Эти виджеты обладают схожим набором
- возможностей. Для сессий Ajax они поддерживают <b>предзагрузку</b> и
- <b>отложенную загрузку</b> содержимого, ассоциированного
- с каждым пунктом. Предварительно загружаемое содержимое
- не увеличивает времени загрузки, потому что механизм рендеринга Wt
- всегда оптимизирует время ответа, передавая, в первую очередь,
- только видимые виджеты или их изменения. Всё, что невидимо (например,
- содержимое других, предварительно загруженных пунктов меню) передаётся в
- фоновом режиме после рендеринга видимого содержимого.
- </p>
- <p>
- Навигация по меню реализована с помощью слотов без состояния (stateless
- slots) C++, и, следовательно, в результате этого код обработки событий
- выполняется на <b>стороне клиента</b>. По желанию, с помощью CSS3 можно
- украсить смену содержимого виджета <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WStackedWidget.html"
- target="_blank">WStackedWidget</a> анимацией.
- </p>
- <p>
- С каждым пунктом меню или вкладкой ассоциирован URL, что позволяет
- им сохраняться в истории браузера и закладках. Когда пользователь
- просматривает страницы в истории, меню <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WApplication.html#a674fd6a2522d66d07908e8f3d82424a9"
- target="_blank">адекватно реагирует</a>.
- Аналогично, когда пользователь добавляет URL в закладки с тем, чтобы
- посетить его позже, или переходит по некой (внешней) ссылке к приложению,
- меню распознаёт начальный внутренний путь. Всё вместе это
- создаёт децентрализованный "фрэймворк маршрутизации", обеспечивающий
- лаконичные URL, которые одинаково хорошо работают как для сессий Ajax, так
- и для сессий простого HTML.
- </p>
- <p>
- Виджет чата, который расположен внизу на самом деле часть <a
- href="#/examples/chat">примера "Чат"</a>.
- </p>
- </div>
- </message>
- <message id="home.examples.treeview">
- <div>
- <h4 class="example">Treeview</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/treeview-dragdrop/treeview-dragdrop.wt" class="run" target="_blank">
- <img src="/icons/green-play.png" style="vertical-align: top"/> Запуск
- </a>
- </p>
- Этот пример показывает некоторую функциональность MVC, которую предоставляют
- встроенные виды (WTreeView, WTableView и PieChart) и модели.
- <ul>
- <li>
- Пример использует виджеты <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTreeView.html"
- target="_blank">WTreeView</a>
- и <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTableView.html"
- target="_blank">WTableView</a> для отображения данных модели
- в древовидном или табличном виде.
- </li>
- <li>
- Класс <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WSortFilterProxyModel.html"
- target="_blank">WSortFilterProxyModel</a>
- обеспечивает сортировку и фильтрацию данных другой модели.
- </li>
- <li>
- Эти виды поддерживают перетаскивание выбранных элементов.
- </li>
- <li>
- Вы можете использовать вложенные менеджеры компоновки (горизонтальной и
- вертикальной
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WBoxLayout.html" target="_blank">
- WBoxLayout</a>)
- для автоматической компоновки в пределах окна, и, по желанию, задавать
- нужные размеры.
- </li>
- <li>
- Для ввода данных могут быть использованы модальные (или немодальные) <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WDialog.html"
- target="_blank">диалоги</a>.
- </li>
- <li>
- Можно пользоваться контекстным меню
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPopupMenu.html" target="_blank">
- WPopupMenu</a>.
- </li>
- </ul>
- </div>
- </message>
- <message id="home.examples.chart">
- <div>
- <h4 class="example">Графики (диаграммы)</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/charts/charts.wt" class="run" target="_blank">
- <img src="/icons/green-play.png" style="vertical-align: top"/> Запуск
- </a>
- </p>
- <p>Этот пример демонстрирует <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/group__charts.html" target="_blank">виджеты Wt
- для рисования графиков (диаграмм)</a>, которые реализованы на основе
- кросс-браузерного API рисования. Этот API использует возможности самих
- браузеров для отрисовки высококачественной графики. В зависимости от браузера,
- встроенный VML, встроенный SVG, HTML 5 canvas, или изображение PNG
- используется для отрисовки содержимого в <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPaintedWidget.html"
- target="_blank">WPaintedWidget</a>.
- </p>
- <p>Этот пример также демонстрирует то, как одна модель может быть использована
- несколькими видами, и как она может оповещать об изменениях каждый из этих
- видов. <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTableView.html"
- target="_blank">Табличный вид</a> и диаграмма образуют <i>вид</i>
- на базе одной <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WAbstractItemModel.html"
- target="_blank">модели элементов</a>.</p>
- </div>
- </message>
- <message id="home.examples.git">
- <div>
- <h4 class="example">Обозреватель Git</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/gitmodel/gitview.wt" class="run" target="_blank">
- <img src="/icons/green-play.png" style="vertical-align: top"/> Запуск
- </a>
- </p>
- <p>
- Этот пример служит демонстрацией реализации специфической модели данных,
- которая может быть использована такими классами видов, как
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTreeView.html" target="_blank">
- WTreeView</a>.
- </p>
- <p>
- <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WStandardItemModel.html"
- target="_blank">WStandardItemModel</a> может быть наполнена данными,
- полученными, например, из базы данных. Недостаток заключается в том, что все
- данные при этом должны быть получены заранее и находиться в памяти сессии.
- Однако, наследуя <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WAbstractItemModel.html"
- target="_blank">WAbstractItemModel</a>, Вы можете реализовать модель
- которая получает (или вычисляет) данные только при необходимости,
- обеспечивая компромис между размещением данных в памяти или получением их
- из какого-либо источника.
- </p>
- <p>В этом примере, мы реализовываем древовидную модель навигации по
- репозиторию <a href="http://git-scm.com/">git</a>. Модель лишь по мере
- необходимости хранит в памяти информацию о папках, однако все остальные
- данные она считывает напрямую из git. Изначально мы думали, что в качестве
- идентификаторов подойдут суммы SHA-1, однако папки с одинаковым содержимым
- в разных частях репозитория git обладают одинаковыми идентификаторами SHA-1,
- тогда как на деле они представляются различными <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WModelIndex.html"
- target="_blank">индексами модели</a>.
- </p>
- </div>
- </message>
- <message id="home.examples.composer">
- <div>
- <h4 class="example">Почтовый редактор</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/composer/composer.wt" class="run" target="_blank">
- <img src="/icons/green-play.png" style="vertical-align: top"/> Запуск
- </a>
- </p>
- <p>
- Этот пример реализует GMail-подобный почтовый редактор и показывает,
- по-мимо всего прочего, как асинхронно загружать файлы на сервер,
- отображая кросс-браузерный индикатор выполнения загрузки
- (cross-browser upload progress bar), и позволяя загружать несколько файлов
- сразу.
- </p>
- <ul>
- <li>
- Класс <i>ContactSuggestions</i> осуществляет авто-подстановку
- адресов в поля To: Cc: и Bcc:. Виджет наследует
- класс <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WSuggestionPopup.html"
- target="_blank">WSuggestionPopup</a>.
- </li>
- <li>
- Виджет <i>AttachmentEdit</i> использует <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WFileUpload.html"
- target="_blank">WFileUpload</a> для асинхронной
- загрузки файлов. <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WProgressBar.html"
- target="_blank">Индикатор выполнения загрузки</a> будет работать даже
- в IE6.
- </li>
- <li>
- Классы <i>Option</i> и <i>OptionList</i> показывают как слоты без
- состояний (stateless slots), трюк, позволяющий выполнять обработку
- событий на стороне клиента, но определять (реализовывать) их на C++,
- могут использоваться даже когда поведение не полностью лишено
- состояния. В данном случае, скрытие Опции влияет на смежные
- видимые опции: опция нуждается в разделителе только при наличии смежной
- (следующей) опции. Делая <b>реализации слотов без состояния
- недействительными</b>, когда состояние всё же меняется, мы можем,
- тем не менее, использовать их реализацию и наслаждаться скоростью
- обработки событий на стороне клиента!
- </li>
- </ul>
- </div>
- </message>
- <message id="home.examples.chat">
- <div>
- <h4 class="example">Простой чат</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/simplechat/simplechat.wt" class="run" target="_blank">
- <img src="/icons/green-play.png" style="vertical-align: top"/> Запуск
- </a> (или дайте волю своим мыслям в окне чата внизу)
- </p>
- <p>
- Этот пример реализует простые клиент и сервер чата. Используя
- <b>инициируемые сервером обновления (server-initiated updates)</b>,
- можно легко пересылать события от одного пользователя другим
- пользователям. Инициируемые сервером обновления реализуются с помощью
- Ajax long polling или HTML5 WebSockets.
- </p>
- <p>
- Пример иллюстрирует также существенные преимущества подхода с использованием
- классов для разработки web-приложений: можно легко инстанцировать
- множество экземпляров одного и того же виджета. Виджет SimpleChatClient может
- быть повторно использован столь же просто, как и простые виджеты Wt,
- скажем, как кнопка.
- </p>
- <p>
- Чат также доступен через <i>Виджет</i>, который может
- быть встроен в другую страницу (что очень напоминает интеграцию
- виджета google maps в другое приложение). В данном случае, мы
- разместили чат прямо на домашней странице следующим образом:
- </p>
- <pre> <div id="chat"></div>
- <script src="//www.webtoolkit.eu/wt/examples/simplechat/chat.js?div=chat"></script></pre>
- <p>
- Это работает посредством кросс-доменных (Cross-Origin) Ajax/WebSocket
- запросов (если имеется поддержка со стороны браузера, а если нет, - то
- посредством старых трюков) для взаимодействия исходной HTML страницы
- с сервером, на котором размещается Виджет, возможно даже на другом домене.
- </p>
- <p>
- Подобные интерактивные приложения, позволяющие пользователям отсылать текст
- HTML другим пользователям, обладают дурной славой в части пресловутых
- <b>атак межсайтового скриптинга (cross-site-scripting - XSS)</b>: пользователь
- вводит вредоносный (javascript) код как часть своего сообщения. Когда это
- сообщение отображается в браузере другого пользователя, внедрённый
- вредоносный код может передать злоумышленнику личную информацию пользователя,
- полученную, например, из кук браузера. Wt же полностью предупреждает подобные
- атаки, не требуя для этого ничего от разработчика, ибо такие виджеты как
- WText гарантируют, что отображается исключительно пассивный текст, а всё то,
- что им не является - отбрасывается.
- </p>
- </div>
- </message>
- <message id="home.examples.hangman">
- <div>
- <h4 class="example">Виселица</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/hangman/hangman.wt" class="run" target="_blank">
- <img src="/icons/green-play.png" style="vertical-align: top"/> Запуск
- </a>
- </p>
- <p>
- В данном примере реализована простая и хорошо известная игра, и система
- рейтингов к ней, которая работает с базой данных посредством Wt::Dbo.
- </p>
- <p>
- Вот некоторое из того, что иллюстрирует данный пример:
- </p>
- <ul>
- <li>
- Различные подходы к компоновке:
- с помощью <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTemplate.html"
- target="_blank">шаблона HTML</a>,
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WBoxLayout.html"
- target="_blank">менеджера компоновки</a>, или совмещая простые
- виджеты и CSS.
- </li>
- <li>
- Повышенное удобство работы за счёт предварительно загружаемого скрытого
- содержимого, такого как различные картинки для изображения виселицы и
- повешенного.
- </li>
- <li>
- Навигация реализована
- с помощью <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WAnchor.html"
- target="_blank">WAnchor</a> который ссылается на внутренний путь. Дейстие выполняется
- по реакции на смену внутреннего пути.
- </li>
- <li>
- Работа с базой данных, содержащей информацию о пользователе, осуществляется
- посредством <a href="//www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html">Wt::Dbo</a>.
- </li>
- </ul>
- <!--<p>Объяснение примера "виселица" приводится также в СТАТЬЕ</p>-->
- </div>
- </message>
- <message id="home.examples.widgetgallery">
- <div>
- <h4 class="example">Галерея виджетов</h4>
- <p>
- <a href="//www.webtoolkit.eu/widgets" class="run" target="_blank">
- <img src="/icons/green-play.png" style="vertical-align: top"/> Перейти в галерею виджетов
- </a>
- </p>
- <p>
- Этот пример демонстрирует большинство виджетов, которые есть в Wt, наряду с
- такими нюансами, как управление событиями и классами компоновки содержимого.
- Полезен для ознакомления с виджетами и возможностями библиотеки в действии.
- </p>
- </div>
- </message>
- <message id="home.download">
- <h3><span>Загрузка</span></h3>
- </message>
- <message id="home.download.license">
- <h4>Лицензирование и цены</h4>
- <p>Wt может быть использована на условиях лицензии открытого программного
- обеспечения или на условиях коммерческой лицензии.</p>
- <p>Если Вы желаете использовать библиотеку на условиях лицензии <b>GNU
- General Public License (GPL)</b>, то Вы можете собрать web-приложение
- Wt и установить его, но, согласно требованиям GPL, Вы обязаны предоставить
- исходный код приложения всякому кто устанавливает его на своём оборудовании.
- Это также относится к редистрибуции самой библиотеки Wt в оригинальном
- или модифицированном виде.
- </p>
- <p><b>Коммерческая лицензия</b> лишена подобных ограничений: Вы можете
- распространять приложения, разработанные с Wt, без необходимости
- предоставлять их исходные коды. Лицензия оплачивается единовременно,
- позволяя отдельному разработчику использовать Wt API (и, соответственно,
- Wt::Dbo) для разработки приложений, используя самую последнюю версию Wt
- или любую версию, выпущенную в течении одного года с момента оплаты.
- </p>
- <table class="versions">
- <tr class="trh">
- <th></th>
- <th class="product">Dbo</th>
- <th class="product">Wt + Dbo</th>
- </tr>
- <tr class="r0">
- <th>Библиотека виджетов</th>
- <td></td>
- <td>+</td>
- </tr>
- <tr class="r1">
- <th>Сервер приложения</th>
- <td></td>
- <td>+</td>
- </tr>
- <tr class="r0">
- <th>HTTP + WebSockets серверы</th>
- <td></td>
- <td>+</td>
- </tr>
- <tr class="r1">
- <th>C++ ORM</th>
- <td>+</td>
- <td>+</td>
- </tr>
- <tr class="r0">
- <th>Драйвер Sqlite3</th>
- <td>+</td>
- <td>+</td>
- </tr>
- <tr class="r1">
- <th>Драйвер PostgreSQL</th>
- <td>+</td>
- <td>+</td>
- </tr>
- <tr class="separate r0">
- <th>Лицензия</th>
- <td></td>
- <td></td>
- </tr>
- <tr class="r1">
- <th class="indent">
- Лицензия GNU (General Public License)
- </th>
- <td>бесплатно</td>
- <td>бесплатно</td>
- </tr>
- <tr class="r0">
- <th class="indent multiline">
- Коммерческая лицензия
- </th>
- <td class="multiline">
- <div><span class="price">€175</span> <span class="cart" /></div>
- <div><a href="//www.webtoolkit.eu/wt/license/Wt%20License%20Agreement.pdf" class="smallprint">(текст лицензии на английском)</a></div>
- </td>
- <td class="multiline">
- <div><span class="price">€599</span> <span class="cart" /></div>
- <div><a href="//www.webtoolkit.eu/wt/license/WtDbo%20License%20Agreement.pdf" class="smallprint">(текст лицензии на английском)</a></div>
- </td>
- </tr>
- </table>
- </message>
-
- <message id="home.download.packages">
- <h4><span>Доступные для загрузки пакеты</span></h4>
- </message>
- <message id="home.download.version"><b>Версия</b></message>
- <message id="home.download.date"><b>Дата</b></message>
- <message id="home.download.description"><b>Описание</b></message>
- <message id="home.download.other">
- <p>
- Если Вы используете Ubuntu, то можете установить довольно новую версию
- Wt из репозитория PPA Пау Гарсии (Pau Garcia):
- </p>
- <div class="fragment">
- <pre class="fragment">
- $ sudo apt-get install witty witty-dev witty-doc witty-dbg witty-examples</pre>
- </div>
- <p>
- С последним пакетом (<tt>witty-examples</tt>) устанавливаются примеры
- в <tt>/usr/lib/Wt/examples</tt>. Вы можете запустить любой из них следющим
- образом:
- </p>
- <div class="fragment">
- <pre class="fragment">$ /usr/lib/Wt/examples/hello/hello</pre>
- </div>
- <p>Более старые выпуски доступны на
- <a href="http://sourceforge.net/project/showfiles.php?group_id=153710#files">sourceforge.net</a>.
- </p>
- <h4>Инсталлятор Wt: winst</h4>
- Если Вам любопытно и Вы хотели бы попробовать Wt, но Ваша ОС
- или её версия не предоставляет актуальную версию пакета, тогда winst может
- быть тем, что Вам нужно. Он загрузит и произведёт сборку Wt и её
- зависимостей в <b>UNIX(-like) окружении</b>, и также предоставит
- скрипт для запуска примеров.
- <p>
- Необходимы <tt>CMake</tt> и <tt>GNU make</tt>, а также <tt>wget</tt> для
- загрузки необходимых программных компонентов.
- </p>
- <p>
- Загрузите пакет
- (<a href="//www.webtoolkit.eu/packages/winst-0.3.tar.gz">winst-0.3.tar.gz</a>)
- или получите последнюю версию git:
- <div class="fragment">
- <pre class="fragment">$ git clone git://github.com/kdeforche/winst.git</pre>
- </div>
- </p>
- <h4>Системные требования</h4>
- Для сборки и инсталляции последней версии Wt, Вам необходимы,
- по крайней мере, следующие два пакета:
- <ul>
- <li><a href="http://www.cmake.org/">CMake</a> - кросс-платформенная утилита
- конфигурирования сборки.<br />
- CMake >= 2.6 рекомендуется (хотя, каким-то чудом, подходит и 2.4).
- </li>
- <li>
- Незаменимая <a href="http://www.boost.org/">
- библиотека C++ boost</a>: boost-1.36 или новее. <br />
- Необходимы следующие библиотеки boost (которые представлены не только
- заголовочными файлами):
- <tt>boost_date_time</tt>, <tt>boost_regex</tt>,
- <tt>boost_program_options</tt>, <tt>boost_signals</tt>,
- <tt>boost_system</tt>, и, необязательно, (но настоятельно рекомендуется)
- <tt>boost_thread</tt>.
- </li>
- </ul>
- Следующие пакеты не являются обязательными, но их наличие наделяет
- Wt дополнительными возможностями:
- <ul>
- <li><a href="http://www.postgresql.org/">PostgreSQL</a>: если
- доступен, то будет доступен и
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1Dbo_1_1backend_1_1Postgres.html">коннектор postgres</a> для ORM библиотеки
- (<a href="//www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html">Wt::Dbo</a>).
- </li>
- <li><a href="https://github.com/libharu/libharu/wiki">libharu</a>: если
- доступен, то будет доступен и класс
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPdfImage.html">WPdfImage</a>,
- который позволяет формировать данные в PDF. Для более полной
- поддержки шрифтов TrueType и Юникода, Вам потребуется
- <a href="https://github.com/kdeforche/libharu">модифицированная libharu</a>.
- </li>
- <li><a href="http://www.graphicsmagick.org/">GraphicsMagick</a>: если
- доступен, то будет доступен и класс
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WRasterImage.html">WRasterImage</a>,
- который позволяет формировать растровые изображения, такие как PNG
- или GIF.</li>
- <li><a href="http://www.pango.org/">pango</a> (LGPL): если доступен, то
- отрисовка текста при использовании WPdfImage и WRasterImage будет
- производиться с помощью этой библиотеки шрифтами TrueType, с учётом
- самого шрифта и покрытия (кодовых диапазонов) Юникода.</li>
- </ul>
- <p>Другие требования зависят от поддержки желаемого Вами коннектора,
- который обеспечивает взаимодействие приложения Wt с браузером:</p>
- <h5>Для FastCGI (только Unix):</h5>
- <ul>
- <li>Apache 1 или 2, или другой web-сервер, поддерживающий протокол
- FastCGI.</li>
- <li>
- <a href="http://www.fastcgi.com/#TheDevKit">Набор разработчика FastCGI</a>
- : fcgi-2.4.0
- </li>
- <li>
- При использовании apache:
- Apache <a href="http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz">mod_fastcgi</a>:
- mod_fastcgi-2.4.x.<br />В качестве альтернативы Вы можете
- использовать <a href="http://httpd.apache.org/download.cgi#mod_fcgid">mod_fcgid</a>:
- mod_fcgid-2.3.5.
- </li>
- </ul>
- <h5>Для встроенного httpd (wthttpd):</h5>
- <ul>
- <li>Встроенному httpd требуется библиотека C++ boost asio, которая
- представлена только лишь заголовочным файлом, включенным в boost.
- </li>
- <li>Необязательно, libz (для сжатия поверх HTTP) и openssl (для
- поддержки HTTPS).
- </li>
- </ul>
- <h5>Для ISAPI (только Win32):</h5>
- <ul>
- <li>Коннектор ISAPI работает только для развёртывания приложений Wt в связке
- с Microsoft IIS server.</li>
- </ul>
- Следуйте <a
- href="//www.webtoolkit.eu/wt/doc/reference/html/InstallationUnix.html">инструкциям
- по установке</a> для сборки Wt и запуска примеров, или смотрите
- <a
- href="http://redmine.webtoolkit.eu/projects/wt/wiki/Wt_Installation">инструкции по
- установке для конкретных платформ</a>, если Ваша платформа в них присутствует.
- <h4>Репозиторий Git</h4>
- <p>Если Вы хотите отслеживать последние изменения, или участвовать в
- разработке Wt, то Вы можете пользоваться репозиторием git.</p>
- <p>
- Для получения wt выполните команду:
- <div class="fragment">
- <pre class="fragment">$ git clone git://github.com/kdeforche/wt.git</pre>
- </div>
- </p>
- </message>
- <message id="home.community">
- <h3><span>Поддержка</span></h3>
- <h4>Поддержка и обучение</h4>
- <p>
- Вы можете приобрести <a href="//www.emweb.be/services">поддержку и
- обучение</a> с гарантией ответа в течении трёх дней прямо от авторов
- библиотеки.
- </p>
- <p>
- Помощь сообщества доступна на <a
- href="http://redmine.webtoolkit.eu/projects/wt/boards">публичных
- форумах</a>. До сентября 2009 года был лишь <a
- href="mailto:witty-interest@lists.sourceforge.net">список рассылки</a>
- (<a
- href="http://lists.sourceforge.net/lists/listinfo/witty-interest">подписаться</a>),
- и старожилы ещё не покинули его. Вы можете искать или
- просматривать архивы списка рассылки посредством <a
- href="http://gmane.org/info.php?group=gmane.comp.web.witty.general">Gmane
- gateway</a> (честь и слава Пау Гарсии Кьюилесу (Pau Garcia i Quiles)
- за эту возможность).
- </p>
- <p>
- Чтобы быстро вникнуть в Wt и/или Wt::Dbo, Вы также можете приобрести <a
- href="//www.emweb.be/services">тренинг</a> прямо от авторов
- библиотеки.
- </p>
- <h4>Авторы</h4>
- <p>
- Данное программное обеспечение было изначально разработано <a
- href="mailto:koen@emweb.be">Коеном Дефоржем (Koen Deforche)</a>, и в настоящее
- время сопровождается фирмой <a href="//www.emweb.be/">Emweb bvba</a>.</p>
- <p>Мы признательны проектам, у которых позаимствовали код:</p>
- <ul>
- <li>Встроенный httpd основан на примере библиотеки <a
- href="http://asio.sourceforge.net/">C++ asio
- </a>, разработанной Кристофером М. Кохлхоффом (Christopher M. Kohlhoff). <a
- href="http://www.boost.org/LICENSE_1_0.txt">Лицензия
- Boost Software License</a></li>
- <li><a href="http://threadpool.sourceforge.net/">Пул потоков</a>,
- реализованный Филиппом Хенкелем (Philipp Henkel). <a
- href="http://www.boost.org/LICENSE_1_0.txt">Лицензия
- Boost Software License</a></li>
- <li>Библиотека <a href='http://rapidxml.sourceforge.net/'>RapidXML</a>
- Марчина Калицинского (Marcin Kalicinski). <a
- href="http://www.boost.org/LICENSE_1_0.txt">Лицензия
- Boost Software License</a></li>
- </ul>
- <h4>Вики</h4>
- <p>
- Существует поддерживаемая сообществом <a
- href="http://redmine.webtoolkit.eu/projects/wt/wiki">Вики Wt</a>, содержащая полезную
- информацию, включая замечания по инсталляции для нескольких дистрибутивов Linux.
- </p>
- <h4>Контрибуции</h4>
- <p>Разработка Wt спонсируется следующими компаниями и
- организациями:</p>
- <p>
- <table>
- <tr>
- <td class="sponsor-logo"><a href="//www.emweb.be/">
- Emweb bvba</a>
- </td>
- <td class="sponsor-role">
- Создатели, официальное сопровождение и поддержка
- </td>
- </tr>
- <tr>
- <td class="sponsor-logo">
- <a href="http://www.eurofer.be/">
- Eurofer</a>
- </td>
- <td class="sponsor-role">
- Спонсировал разработку библиотеки графиков (диаграмм), WTreeView и
- иерархических моделей.
- </td>
- </tr>
- </table>
- </p>
- <p>Контрибуции пользователей приветствуются, от простых патчей до виджетов,
- наборов виджетов, и улучшений ядра библиотеки.</p>
- <p>Однако, в силу двух видов лицензирования Wt - лицензии открытого
- программного обеспечения и коммерческой лицензии, для того, чтобы законно
- защитить весь код Wt в целом - как один субъект, - не заботясь об авторских
- правах отдельных частей, мы требуем передачи авторских прав от контрибуторов
- к фирме <a href="//www.emweb.be/">Emweb</a> для принятия контрибуций.</p>
- <h4>Переводы на другие языки</h4>
- Перевод домашней страницы на Китайский язык выполнен Жимином Сонгом
- (Zhimin Song).
- Перевод домашней страницы на Русский язык выполнен Дмитрием Игришиным
- (Dmitriy Igrishin).
- <h4>Sourceforge</h4>
- <a href="http://sourceforge.net"><img src="https://sflogo.sourceforge.net/sflogo.php?group_id=153710&type=1" style="vertical-align:middle" width="88" height="31" border="0" alt="SourceForge.net Logo" /></a>
- Проект Wt размещён на sourceforge <a href="http://sourceforge.net/projects/witty/">здесь</a>.
- </message>
- <message id="home.other-language">
- <h3><span>!C++ ?</span></h3>
- <p>Вам нравится функциональность библиотеки, но Вы не желаете использовать C++
- в своём проекте?</p>
- <p>Не отчаивайтесь. Wt существует в первоначальном (native) виде или через
- привязки (bindings) из других языков:
- <ul class="languages">
- <li>
- <div>
- <img class="java-language-icon" src="/icons/java-logo.png" alt="Java"></img>
- Вы можете использовать <a href="//www.webtoolkit.eu/jwt">JWt</a>
- - полноценную версию Wt для <b>Java</b>,
- разрабатываемую и сопровождаемую вместе с версией C++. Она обладает, за
- малыми исключениями, такими же возможностями, что и Wt, но выполняется
- обычным образом в JVM и может быть развёрнута в любом контейнере сервлетов.
- </div>
- <br style="clear: both" />
- </li>
- <li>
- <div>
- <img class="language-icon" src="/icons/ruby-logo-R.png" alt="Ruby"></img>
- Ричард Дэйл (Richard Dale)
- сопровождает <a href="http://github.com/rdale/wtruby/tree/master">WtRuby</a>,
- <b>Ruby</b> привязку к Wt, используя тот же фреймворк, который используется
- для генерации привязки Ruby к Qt и KDE.
- </div>
- <br style="clear: both" />
- </li>
- <li>
- <div>
- <img class="language-icon" src="/icons/clojure-logo.png" alt="Clojure"></img>
- Используя поддержку JVM для других языков, таких
- как <b>Clojure</b>, варианта LISP, Ральф Мориц (Ralph Moritz) экспериментирует
- с <a href="http://lispetc.posterous.com/hello-jwt-from-clojure">использованием
- JWt прямо из Clojure</a>, документируя опыты в своём блоге,
- и, в конечном счёте, разрабатывая маленькую библиотеку поддержки.
- </div>
- <br style="clear: both" />
- </li>
- <li>
- <div>
- <img class="language-icon" src="/icons/jython-logo.png" alt="Jython"></img>
- Альберт Сервера ай Арени (Albert Cervera i Areny) экспериментирует с
- использованеим JWt из <b>Jython</b>, -
- ещё один язык, работающий с JVM. Он изложил как создать и запустить
- программу "Hello World!" на Jython <a href="http://www.nan-tic.com/en/from-pyqt-to-jythonjwt-setting-up-the-environment">в этой статье блога</a>.
- </div>
- <br style="clear: both" />
- </li>
- </ul>
- </p>
- </message>
- <message id="home.documentation">
-
- <h3><span>Документация</span></h3>
- <h4>Сборка и инсталляция</h4>
- <p>
- Общие инструкции по установке (UNIX)
- находятся <a href="//www.webtoolkit.eu/wt/doc/reference/html/InstallationUnix.html">здесь</a>, а также
- включены в исходный дистрибутив (файлы INSTALL или INSTALL.html).</p>
- <p>
- В дополнении, <a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Вики
- Wt</a> содержит раздел, посвящённый
- <a href="http://redmine.webtoolkit.eu/projects/wt/wiki/Wt_Installation">замечаниям
- по установке на конкретных платформах</a>.
- </p>
- <h4>Введение и пособия</h4>
- <ul>
- <li>Узнайте о преимуществах использования Wt перед традиционными
- фреймворками web-приложений из нашего <a
- href="//www.webtoolkit.eu/doc/Wt-WhitePaper.pdf">официального
- документа</a>.</li>
- <li>Журнал Dr Dobbs содержит хорошую <a href="http://www.ddj.com/cpp/206401952">
- вводную статью</a> (февраль 2008 года).</li>
- <li>Справочное руководство содержит
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/overview.html">обзор
- библиотеки</a>, который является хорошей отправной точкой для начинающих.</li>
- <li>Журнал Software Developers содержит (слегка устаревшее) пособие
- (апрель 2006 года). Пособие использует пример кода "виселица" (смотрите также в
- примерах!). Вы можете просмотреть копию статьи <a
- href="//www.webtoolkit.eu/wt/doc/tutorial/wt-sdj.xhtml">здесь</a> или
- загрузить
- <a href="//www.webtoolkit.eu/wt/doc/tutorial/wt-sdj.pdf">PDF версию</a>.</li>
- <li>Виктор Венкман (Victor Venkman) написал
- <a href="http://www.codeguru.com/cpp/i-n/internet/browsercontrol/article.php/c15275/">прекрасное введение в Wt</a>,
- <a href="#/examples/">примера "Здавствуй, мир!"</a>.</li>
- </ul>
- <h4>Справочное руководство</h4>
- <p>Доступно <a href="//www.webtoolkit.eu/wt/doc/reference/html/index.html"
- target="_blank"> справочное руководство (в новом окне)</a>, сгенерированное
- из исходных кодов с помощью doxygen. Оно также содержит небольшое пособие
- на примере tree list, обращая особое внимание на механизм реализации
- слотов без состояния, который является продвинутой возможностью Wt, позволяющей
- оптимизировать обработку событий кодом на стороне клиента.</p>
- <h4>Аннотированные примеры</h4>
- <p>Документация сгенерирована также и для примеров из их исходных кодов
- и может быть просмотрена <a href="//www.webtoolkit.eu/wt/doc/examples/html/modules.html"
- target="_blank">здесь (в новом окне)</a>.</p>
- <h4>Вики</h4>
- <p>
- Существует поддерживаемая сообществом <a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Вики Wt</a> с такой полезной информацией как FAQ, советы и трюки.
- </p>
- </message>
- <message id="srcview.title.CPP.">
- <div class="srcviewtitle">
- <h2>Исходный код примеров Wt</h2>
- <p>
- Смотрите ниже исходный код всех примеров, включенных в
- <a href="#/">Wt</a>.
- </p>
- </div>
- </message>
- <message id="srcview.title.">Примеры Wt</message>
- <message id="srcview.title.CPP.hello">
- <div class="srcviewtitle">
- <h2>Исходный код примера <i>Здравствуй, мир!</i></h2>
- <p>
- Смотрите ниже исходный код примера Wt
- <a href="#/examples/">Здравствуй, мир!</a>.
- </p>
- </div>
- </message>
- <message id="srcview.title.hello">Пример: Здравствуй, мир!</message>
- <message id="srcview.title.CPP.hangman">
- <div class="srcviewtitle">
- <h2>Исходный код примера <i>Виселица</i></h2>
- <p>
- Смотрите ниже исходный код примера Wt
- <a href="#/examples/">Виселица</a>.
- </p>
- </div>
- </message>
- <message id="srcview.title.hangman">Пример: Виселица</message>
- <message id="srcview.title.CPP.charts">
- <div class="srcviewtitle">
- <h2>Исходный код примера <i>Диаграммы</i></h2>
- <p>
- Смотрите ниже исходный код примера Wt
- <a href="#/examples/charts">Диаграммы</a>.
- </p>
- </div>
- </message>
- <message id="srcview.title.charts">Пример: Диаграммы</message>
- <message id="srcview.title.CPP.treeview-dragdrop">
- <div class="srcviewtitle">
- <h2>Исходный код примера <i>Treeview</i></h2>
- <p>
- Смотрите ниже исходный код примера Wt <a href="#/examples/treeview">
- Treeview</a>.
- </p>
- </div>
- </message>
- <message id="srcview.title.treeview-dragdrop">Пример: Treeview</message>
- <message id="srcview.title.CPP.composer">
- <div class="srcviewtitle">
- <h2>Исходный код примера <i>Почтовый редактор</i></h2>
- <p>
- Смотрите ниже исходный код примера Wt
- <a href="#/examples/composer">Почтовый редактор</a>.
- </p>
- </div>
- </message>
- <message id="srcview.title.composer">Пример: Почтовый редактор</message>
-
- <message id="srcview.title.CPP.wt-homepage">
- <div class="srcviewtitle">
- <h2>Исходный код примера <i>Домашняя страница Wt</i></h2>
- <p>
- Смотрите ниже исходный код примера Wt
- <a href="#/examples/wt-homepage">Домашняя страница</a>.
- </p>
- </div>
- </message>
- <message id="srcview.title.wt-homepage">Пример: Домашняя страница Wt</message>
- <message id="srcview.title.CPP.gitmodel">
- <div class="srcviewtitle">
- <h2>Исходный код примера <i>Обозреватель Git</i></h2>
- <p>
- Смотрите ниже исходный код примера Wt
- <a href="#/examples/gitmodel">Обозреватель Git</a>.
- </p>
- </div>
- </message>
- <message id="srcview.title.gitmodel">Пример: Обозреватель Git</message>
- <message id="srcview.title.CPP.simplechat">
- <div class="srcviewtitle">
- <h2>Исходный код примера <i>Чат</i></h2>
- <p>
- Смотрите ниже исходный код примера Wt
- <a href="#/examples/simplechat">Чат</a>.
- </p>
- </div>
- </message>
- <message id="srcview.title.simplechat">Пример: Чат</message>
- <message id="srcview.title.CPP.widgetgallery">
- <div class="srcviewtitle">
- <h2>Исходный код примера <i>Галерея виджетов</i></h2>
- <p>
- Смотрите ниже исходный код примера Wt
- <a href="#/examples/widgetgallery">Галерея виджетов</a>.
- </p>
- </div>
- </message>
- <message id="srcview.title.widgetgallery">Пример: Галерея виджетов</message>
- </messages>
|