Skip to main content

Wt C++ Web Toolkit. Часть вторая

В продолжение первой части, рассмотрим работу с библиотекой Wt на примере.
Чтобы показать, как это работает, рассмотрим самый простой пример. Будет использовано всего два виджета, это WText и WPushButton, соответственно текст и кнопка. Все в целом очень простенько, а тем, кто знаком с Qt, все будет вызвать состояние дежавю.

00: #include <Wt/WApplication>
01: #include <Wt/WPushButton>
02: #include <Wt/WText>
03:
04: using namespace Wt;
06: class HelloWorld: public WApplication
07: {
08:  public:
09:    HelloWorld(const WEnvironment &env);
10:    void OnButtonClick();
11:  private:
12:    WText *text;
13:    WPushButton *button;
14: };
15:
16: HelloWorld::HelloWorld(const WEnvironment &env)
17:  :WApplication(env)
18: {
19:  text = new WText("<h1>Push the button</h1>", root());
20:  button = new WPushButton("Button", root());
21:  button->clicked().connect(this, &HelloWorld::OnButtonClick);
22: }
23:
24: void HelloWorld::OnButtonClick()
25: {
26:  if (text != NULL)
27:    text->setText("<h1>Hello World!</h1>");
28: }
29:
30: WApplication* CreateApplication(const WEnvironment &env)
31: {
32:  return new HelloWorld(env);
33: }
34:
35: int main(int argc, char **argv)
36: {
37:  return WRun(argc, argv, &CreateApplication);
38: }

Пример cостит из единственного объявленного класса HelloWorld унаследованного от WApplication, это необходимо для того, чтобы каждая отдельная запущенная сессия нашего приложения, имела соответствующий экземпляр WApplication.
В классе HelloWorld выполнено переопределение конструктора базового класса с аргументом в виде ссылки на экземпляр класса WEnvironment. Класс WEnvironment используется для представления данных о среде выполнения данной веб-сессии.
Так же в классе HelloWorld объявлены указатели на два виджета, это соответственно WText и WPushButton. Метод класса HelloWorld::OnButtonClick представляет собой слот, который определяет реакцию на сигнал clicked получаемый от экземпляра класса WPushButton. Так же в конструкторе класса HelloWorld производится инициализация виджетов и соединение сигнала и слота для обработки события нажатия кнопки.
Наиболее интересным моментом данного примера является вызов функции WRun. Данная функция вызывается единожды и выполняет запуск Wt сервера приложения. В качестве одного из параметров ей передается указатель на функцию CreateApplication, которая реализует создание новых экземпляров приложения для каждой новой веб-сессии.

Сборка Wt приложения
Сборка Wt приложения не отличается от сборки любого другого приложения.
gcc -c hw.cpp
gcc -o hw hw.o -lwt -lwthttp

Интересным моментом тут является указание линковщику на тип библиотеки -lwthttp или -lwtfcgi.
При -lwthttp Wt приложение будет собираться как сомостоятельный web сервер, а при -lwtfcgi, как fastcgi.

Как все это работает
1. При запуске нашего Wt приложения в режиме http сервера, необходимо передать ему как минимум два параметра: --docroot - определяющий корневой рабочий каталог сервера, а так же –http-address – определяющий адрес сетевого интерфейса для которого будет открыт серверный сокет.


2. Открываем имеющий под рукой браузер.
3. Создание новой веб-сессии.
4. Нажимаем на кнопку и получаем сообщение HelloWorld!
5. Обработка изменения состояния Wt приложения.
Как все это попробовать
Чтобы попробовать библиотеку Wt вовсе не обязательно непосредственно собирать ее из исходных текстов. Есть более простой вариант, непосредственно собрать дистрибутив Linux с уже включенной библиотекой Wt. И это совсем не сложно и даже очень просто, если воспользоваться замечательным сервисом Suse Studio. Регистрируемся и начинаем творить. :о)

1. Выбираем на базе, какого шаблона будем строить свой дистрибутив.

2. Придумаем имя новому дистрибутиву.

3. Добавим в дистрибутив необходимые пакеты.

Все что требуется добавить к базовому набору пакетов, свои. У меня это были собственно wt и wt-devel, а так же apache2, MozillaFirefox, gcc, gcc-c++.

4. Нажимаем большую зеленую кнопку Build. Ждем. И загружаем наш дистрибутив.
Процесс создания собственного дистрибутив как, оказывается, может быть на удивление простым. Далее можно смело запустить вашу любимую (на выбор) виртуальную машину и наконец-то пощупать Wt ручками.