Wt (zestaw narzędzi internetowych) - Wt (web toolkit)
Pierwotny autor (autorzy) | emweb |
---|---|
Pierwsze wydanie | 1.0.0 / grudzień 2005 |
Wersja stabilna | 4.5.0 / 15 grudnia 2020
|
Magazyn | Repozytorium Wt |
Napisane w | C++ |
System operacyjny | Wieloplatformowy |
Rodzaj | Rama internetowa |
Licencja | Podwójna licencja : |
Strona internetowa | www |
Wt (wymawiane "witty" ) to platforma internetowa zorientowana na widżety typu open source dla języka programowania C++ . Ma interfejs API przypominający framework Qt (chociaż został opracowany z Boost i jest niekompatybilny po zmieszaniu z Qt), również wykorzystuje drzewo widżetów i sterowany zdarzeniami system sygnałów/slotów .
Celem projektowym Wt jest czerpanie korzyści z modelu komponentów stanowych używanego w interfejsach API aplikacji komputerowych, stosowanego do tworzenia stron internetowych — zamiast tradycyjnego wzorca projektowego MVC (model–widok–kontroler). Dlatego zamiast używać MVC na poziomie strony internetowej , jest on wypychany na poziom poszczególnych komponentów.
Chociaż biblioteka korzysta z procesu tworzenia oprogramowania komputerowego , obsługuje niektóre funkcje specyficzne dla sieci , w tym:
- Semantyczne adresy URL
- Nawigacja po historii przeglądarki
Jedną z unikalnych cech Wt jest warstwa abstrakcji modelu renderowania przeglądarki . Biblioteka używa Ajax do komunikacji z przeglądarek zgodnych z nim, podczas gdy przy użyciu zwykłego HTML - forma post-plecami do innych agentów użytkownika . Używając metody progresywnego ładowania początkowego , interfejs użytkownika jest najpierw renderowany jako zwykły dokument HTML , a następnie, pod warunkiem jego obsługi w przeglądarce, jest automatycznie aktualizowany do używania Ajax w celu zwiększenia interaktywności. W ten sposób Wt jest z definicji:
- Jedyny serwer -side ramy wdrażania strategii progresywne ulepszanie automatycznie;
- Jedyny framework Ajax z cechami optymalizacji pod kątem wyszukiwarek (SEO).
Ze względu na popularność C /C++ w środowiskach systemów wbudowanych , Wt jest często używany w takich urządzeniach i (w konsekwencji) został wysoce zoptymalizowany pod kątem wydajności .
Główne cechy
- Automatyczna wdzięczna degradacja i progresywne wzmocnienie
- Obsługuje zdarzenia inicjowane przez serwer ( Comet )
- Zunifikowany interfejs API renderowania ( SVG , element canvas HTML5 , VML )
- Walidacja po stronie klienta i serwera
- Zawiera różne funkcje bezpieczeństwa, aby uniknąć luk w zabezpieczeniach cross-site scripting i Cross-site request forgery (CSRF)
- Zawiera kompaktową warstwę C++ ORM ("Wt::Dbo")
- Używa protokołu sieciowego WebSocket , jeśli jest dostępny, dla modelu komunikacji klient-serwer , z rezerwami na Ajax lub zwykłe renderowanie stron internetowych
Aby uzyskać bardziej szczegółowy przegląd, zobacz sekcję Funkcje na oficjalnej stronie internetowej.
Przykład kodu
"Hello, World!" program w 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);
});
}
Zobacz też
- Porównanie web-frameworków
- JWt (Java web toolkit) , natywna wersja Java Wt
- Tntnet