Wt
Ένα C++ Web Toolkit!
URL: www.Webtoolkit.eu/wt
Το Wt (προφέρεται witty) είναι μία βιβλιοθήκη της C++ που
προσφέρει ανάπτυξη Web εφαρμογών. Διαφέρει με ό,τι είδα-
με ως τώρα, διότι εδώ δεν μιλάμε πλέον για PHP, MVC και βι-
βλιοθήκες όπως το JQuery. Το Wt είναι ένα πλήρες
framework που αυτοδιαχειρίζεται εφέ, http requests, server
side scripting και γενικά ό,τι αφορά σε μία ιστοσελίδα. Για να
τρέξει η εφαρμογή, ενσωματώνει έναν http server που τρέχει
με την εκτέλεση του binary.
Το API είναι widget-centric και χρησιμοποιεί πολύ καλά δο-
κιμασμένα patterns της ανάπτυξης εφαρμογών GUI από το
desktop development. Προσφέρει στον προγραμματιστή ένα
πολύ σημαντικό πλεονέκτημα: abstraction κάθε Web τεχνολο-
γίας, συμπεριλαμβανομένων και client-server protocols, event
handling, υποστήριξη γραφικών και χειρισμό URL.
Αυτό σημαίνει ότι δεν χρειάζεται να γνωρίζετε ξεχωριστές
τεχνολογίες, όπως HTML, CSS, JavaScript, PHP, JQuery κ.λπ.
Όλα αυτά δεν έχουν νόημα σε προγραμματισμό C++.
Το framework λειτουργεί ένα επίπεδο πιο πάνω για εσάς,
κρύβοντας αυτές τις τεχνολογίες. Εσείς θα έχετε να κάνετε
με κλάσεις, αντικείμενα και προγραμματισμό GUI σαν μία
εφαρμογή για desktop περιβάλλον. Το Wt είναι υπεύθυνο
εσωτερικά να διαχειριστεί και να παράγει κώδικα ΗΤΜL, CSS
κ.λπ.
Επίσης, πλέον δεν χρειάζεται να ανησυχείτε για συμβατότη-
τα με φυλλομετρητές. Όλα αυτά που γνωρίζατε στον κλασικό
Web προγραμματισμό εδώ δεν ισχύουν. Ο browser σας όταν
συνδέεται με τη σελίδα, πρώτα συνδέεται με τον ενσωματω-
μένο Web server που τρέχει η σελίδα και ο οποίος είναι υπεύ-
θυνος να παράγει την html/css για τον client. Έτσι, η εφαρμο-
γή σας ουσιαστικά ανιχνεύει το «τι» συνδέεται με αυτήν και
παράγει το σωστό αποτέλεσμα, χωρίς εσείς να έχετε πάρει
άλλα μέτρα εσωτερικά στον κώδικά σας. Άλλωστε, ο κώδικάς
σας δεν είναι HTML/JS, αλλά C++.
Για παράδειγμα, δείτε τον κώδικα από το κλασικό πρό-
γραμμα (hello world) που εμφανίζει απλά ένα textbox και ένα
κουμπί. Όταν εισαγάγουμε το όνομά μας και πατήσουμε το
κουμπί, εμφανίζεται στη σελίδα «Hello Demosthenes».
#include <Wt/WApplication>
#include <Wt/WBreak>
#include <Wt/WContainerWidget>
#include <Wt/WLineEdit>
#include <Wt/WPushButton>
#include <Wt/WText>
using namespace Wt;
class HelloApplication : public WApplication
{
public:
HelloApplication(const WEnvironment& env);
private:
WLineEdit *nameEdit_;
WText *greeting_;
void greet();
};
HelloApplication::HelloApplication(const WEnvironment&
env)
: WApplication(env)
{
setTitle("Hello world");
root()->addWidget(new WText("Your name, please ? "));
nameEdit_ = new WLineEdit(root());
nameEdit_->setFocus();
WPushButton *button
= new WPushButton("Greet me.", root());
button->setMargin(5, Left);
root()->addWidget(new WBreak());
greeting_ = new WText(root());
button->clicked().connect(this, &HelloApplication::greet);
nameEdit_->enterPressed().connect
(boost::bind(&HelloApplication::greet, this));
}
void HelloApplication::greet()
{
greeting_->setText("Hello there, " + nameEdit_->text());
}
WApplication *createApplication(const WEnvironment&
env)
{
return new HelloApplication(env);
}
int main(int argc, char **argv)
{
return WRun(argc, argv, &createApplication);
}
Το έργο ξεκίνησε το 2009 είναι γραμμένο σε C++, είναι
πολύ ώριμο και δίνεται με άδεια GPL.
Linux Inside
55
Web Frameworks