Wt (веб-инструментарий)
Оригинальный автор(ы) | В сети |
---|---|
Первоначальный выпуск | 1.0.0 / декабрь 2005 г |
Стабильная версия | 4.10.4
/ 6 марта 2024 г [1] |
Репозиторий | Wt репозиторий |
Написано в | С++ |
Операционная система | Кросс-платформенный |
Тип | Веб-фреймворк |
Лицензия | Двойная лицензия : |
Веб-сайт | www |
Wt (произносится как «остроумный» ) — это с открытым исходным кодом, виджеты, ориентированный на веб-фреймворк для C++ языка программирования . Он имеет API, напоминающий API- интерфейс Qt (хотя он был разработан с помощью Boost и несовместим при смешивании с Qt), также использует дерево виджетов и управляемую событиями систему сигналов/слотов . [2]
Целью разработки Wt является получение преимуществ от с отслеживанием состояния модели компонентов , используемой в API-интерфейсах настольных приложений, применяемых в веб-разработке , вместо традиционного шаблона проектирования MVC (модель-представление-контроллер). Таким образом, вместо использования MVC на уровне веб-страницы , он переносится на уровень отдельных компонентов. [3]
Хотя библиотека использует процесс разработки программного обеспечения для настольных компьютеров , она поддерживает некоторые веб -функции, в том числе:
- Семантические URL-адреса
- Навигация по истории браузера
Одной из уникальных особенностей Wt является уровень абстракции модели рендеринга браузера . Библиотека использует Ajax для связи с совместимыми с ней браузерами, одновременно используя в простой HTML - форме обратную передачу для других пользовательских агентов . Используя метод прогрессивной загрузки , пользовательский интерфейс сначала отображается как простой HTML- документ , затем, при условии его поддержки в браузере, он автоматически обновляется для использования Ajax для повышения интерактивности. Таким образом, Wt по определению:
- Единственный серверный фреймворк , реализующий стратегию прогрессивного улучшения ; автоматически
- Единственный фреймворк Ajax с качествами поисковой оптимизации (SEO).
Из-за популярности C /C++ во встроенных системных средах Wt часто используется в таких устройствах и (как следствие) хорошо оптимизирован по производительности .
Основные особенности
[ редактировать ]- Автоматическое постепенное ухудшение и прогрессивное улучшение
- Поддерживает события, инициированные сервером ( Comet )
- Единый API рендеринга ( SVG HTML5 , элемент холста , VML ).
- клиента и сервера Проверка на стороне
- Содержит различные функции безопасности , позволяющие избежать уязвимостей межсайтового скриптинга и подделки межсайтовых запросов (CSRF).
- Включает компактный уровень C++ ORM ("Wt::Dbo").
- Использует сетевой протокол WebSocket , если он доступен, для клиент-сервер модели связи веб-страницы . с откатом к Ajax или простому рендерингу
Более подробный обзор смотрите в разделе «Функции» на официальном сайте.
Пример кода
[ редактировать ]Программа «Привет, мир!» программа в Wt:
#include <Wt/WApplication.h>
#include <Wt/WBreak.h>
#include <Wt/WContainerWidget.h>
#include <Wt/WLineEdit.h>
#include <Wt/WPushButton.h>
#include <Wt/WText.h>
/*
* A simple hello world application class which demonstrates how to react
* to events, read input, and give feed-back.
*/
class HelloApplication : public Wt::WApplication
{
public:
HelloApplication(const Wt::WEnvironment& env);
private:
Wt::WLineEdit *nameEdit_;
Wt::WText *greeting_;
void greet();
};
/*
* The env argument contains information about the new session, and
* the initial request. It must be passed to the WApplication
* constructor so it is typically also an argument for your custom
* application constructor.
*/
HelloApplication::HelloApplication(const Wt::WEnvironment& env)
: WApplication(env)
{
setTitle("Hello world"); // application title
root()->addNew<Wt::WText>("Your name, please ? "); // show some text
nameEdit_ = root()->addNew<Wt::WLineEdit>(); // allow text input
nameEdit_->setFocus(); // give focus
auto button = root()->addNew<Wt::WPushButton>("Greet me."); // create a button
button->setMargin(5, Wt::Side::Left); // add 5 pixels margin
root()->addNew<Wt::WBreak>(); // insert a line break
greeting_ = root()->addNew<Wt::WText>(); // empty text
/*
* Connect signals with slots
*
* - simple Wt-way: specify object and method
*/
button->clicked().connect(this, &HelloApplication::greet);
/*
* - using an arbitrary function object, e.g. useful to bind
* values with std::bind() to the resulting method call
*/
nameEdit_->enterPressed().connect(std::bind(&HelloApplication::greet, this));
/*
* - using a lambda:
*/
button->clicked().connect([=]() {
std::cerr << "Hello there, " << nameEdit_->text() << "\n";
});
}
void HelloApplication::greet()
{
/*
* Update the text, using text input into the nameEdit_ field.
*/
greeting_->setText("Hello there, " + nameEdit_->text());
}
int main(int argc, char **argv)
{
/*
* Your main method may set up some shared resources, but should then
* start the server application (FastCGI or httpd) that starts listening
* for requests, and handles all of the application life cycles.
*
* The last argument to WRun specifies the function that will instantiate
* new application objects. That function is executed when a new user surfs
* to the Wt application, and after the library has negotiated browser
* support. The function should return a newly instantiated application
* object.
*/
return Wt::WRun(argc, argv, [](const Wt::WEnvironment &env) {
/*
* You could read information from the environment to decide whether
* the user has permission to start a new application
*/
return std::make_unique<HelloApplication>(env);
});
}
См. также
[ редактировать ]- Сравнение веб-фреймворков
- JWt (набор веб-инструментов Java) , собственная Java . версия Wt для
- Другие веб-фреймворки C++
Ссылки
[ редактировать ]- ^ «Wt: Примечания к выпуску» . www.webtoolkit.eu . Проверено 10 июля 2024 г.
- ^ Дюмон, Вим; Дефорш, Коэн (11 февраля 2008 г.). «Wt: Набор веб-инструментов» . Журнал доктора Добба . Проверено 24 января 2017 г.
- ^ Волкман, Виктор (6 июня 2008 г.). «Wt: Библиотека веб-инструментариев C++ позволяет создавать веб-приложения, независимые от сценариев» . Куинстрит . Проверено 24 января 2017 г.