Verweise

Download Quelltexte
Online Klassen-Dokumentation
QT Framework
LGPL Lizenz

Letzte änderungen

1.3.6 16.09.2014
Fixed DualFileLogger produces no output.

1.3.5 11.06.2014
Fixed a multi-threading issue with race condition in StaticFileController.

1.3.4 04.06.2014
Fixed wrong content type when the StaticFileController returns a cached index.html.

1.3.3 17.03.2014
Improved security of StaticFileController by denying "/.." in any position in request path.
Improved performance of StaticFileController a little.
New method HttpResponse::redirect(url).
Fixed a missing return in StaticFileController.

1.3.2 08.01.2014
Fixed HTTP Server ignoring URL parameters when the request contains POST parameters.

1.3.1 15.08.2013
Fixed HTTP server not accepting connections on 64bit OS with QT 5.

1.3.0 20.04.2013
Updated for compatibility with QT 5.x. You may still use QT 4.7 or 4.8, if you like.
Also added support for logging source file name, line number and function name, which is new in QT 5.

1.2.13 03.03.2013
Fixed Logger writing wrong timestamp for buffered messages.
Improved shutdown procedure. The webserver now processes all final signals before the destructor finishes.

1.2.12 01.03.2013
Fixed HttpResponse sending first part of data repeatedly when the amount of data is larger than the available memory for I/O buffer.

...

QtWebApp HTTP Server in C++

English version of this page

Mit QtWebApp kann man Web-Server Anwendungen für Linux, Windows, Mac OS und Android in C++ entwickeln. Die API entspricht weitgehend der Java Servlet API. Ein sehr kleines Anwendungs-Beispiel:

// Der Controller beantwortet HTTP Requests
void MyController::service(HttpRequest& request, HttpResponse& response) {

    // Frage zwei Request-Parameter ab
    QByteArray path=request.getPath();
    QByteArray username=request.getParameter("username");

    // Setze zwei Header
    response.setHeader("Content-Type", "text/html; charset=ISO-8859-1");
    response.setCookie(HttpCookie("myCookie","any value",600));

    // Erzeuge die Webseite als Antwort
    response.write("<html><body>");
    response.write("Hello ");
    response.write(username);
    response.write("</body></html>");
}

// Das Hauptprogramm startet einen Listener, der den obigen Controller verwendet
int main(int argc, char *argv[]) {
    QCoreApplication app=new QCoreApplication(argc,argv);
    
    QSettings* settings=new QSettings("configfile.ini",QSettings::IniFormat,app);
    MyController* controller=new MyController(app);
    HttpListener* listener=new HttpListener(settings,controller,app);

    return app->exec();
}

//configfile.ini
port=8080
minThreads=1
maxThreads=10
cleanupInterval=1000
readTimeout=60000
maxRequestSize=16000
maxMultiPartSize=1000000

QtWebApp enthält:

Der HTTP Server verarbeitet hereinkommende Requests in mehreren Threads, welche in einem dynamischen Pool verwaltet werden. Er unterstützt persistente Verbindungen, Sessions, sowie Datei-Uploads. Im obigen Beispiel werden alle Requests von einem einzigen Controller beantwortet. Echte Anwendungen würden an dieser Stelle je nach angefordertem Pfad zu anderen spezifischen Klassen verzweigen, so wie es im Demo-Programm vorgeführt wird.

Eine einfache mehrsprachige Template Engine ist enthalten. Sie füllt Platzhalter in HTML Dateien mit dynamischen Werten auf, die zur Laufzeit ermittelt werden. Die Template Engine unterstützt auch bedingte Ausgaben und Schleifenkonstrukte. Andere größere Template Engines wie z.B. ClearSilver lassen sich problemlos einbinden.

Der Logger klinkt sich in QT ein und leitet Meldungen von qDebug(...) bis qFatal(...) in Dateien um, während sie mit konfigurierbaren Zusatzinformationen, wie Zeitstempel, Thread ID, Session ID, etc. ergänzt werden. Änderungen an der Konfigurationsdatei des Loggers werden automatisch ohne Neustart des Programms übernommen.

Die QtService Library von Nokia ermöglicht, das Programm als Linux Daemon bzw. als Windows Dienst auszuführen. Sie können den Web-Server aber auch in ihr bereits bestehendes Programm einbetten.

Durch den geringen Speicherbedarf von ca. 2MB eignet sich der Webserver für embedded Systeme und Android.

Sie dürfen QtWebApp frei downloaden und unter Einhaltung der LGPL Lizenz verwenden.

Dankeschön

Die aktuelle hohe Qualität des Programmes ist nicht alleine mein Werk. Ich möchte an dieser Stelle den Helfern danken, die das Programm in produktiver Umgebung umfangreich getestet haben und so zur Korrektur von Fehlern beigetragen haben.