English version of this page

Letzte Änderungen

1.7.11 28.12.2019
Fix Http Headers are not properly received if the two characters of a line-break (\r\n) were not received together in the same ethernet package.

1.7.10 04.12.2019
Add support for other SSL implementations than OpenSSL (as far Qt supports it).
Fix log bufffer was triggered only by severities above minLevel (should be "at least" minLevel).

1.7.9 20.06.2019
INFO messages do not trigger writing out buffered log messages anymore when bufferSize>0 and minLevel>0.

1.7.8 05.02.2019
HttpConnectionHandler closes the socket now in the thread of the socket.
Headers and Body sent to the browser are now separated into individual ethernet packets.

1.7.7 04.02.2019
HttpConnectionHandler creates a new Qthread instead of being itself a QThread.
Improved formatting of thread ID in logger.

1.7.6 18.01.2019
Code cleanup with const keywords and type conversions.
Update Documentation.

1.7.5 17.01.2019
Added content-types for *.xml and *.json to the StaticFileController.
Fixed locking and memory leak in HttpSession.

1.7.4 24.05.2018
Fixed two possible null-pointer references in case of broken HTTP requests.

1.7.3 25.04.2017
Wait until all data are sent before closing connections.

1.7.2 17.01.2017
Fixed compile error with MSVC.

1.7.1 10.11.2016
Fixed a possible memory leak in case of broken Multipart HTTP Requests.

1.7.0 08.11.2016
Introduced namespace "stefanfrings".
Improved performance a little.

Startseite  

QtWebApp HTTP Server in C++

QtWepApp ist eine HTTP Server Library in C++, inspiriert von Java Servlets. Für Linux, Windows, Mac OS und viele andere Betriebsysteme, die das Qt Framework unterstützt.

QtWebApp enthält folgende Komponenten

Diese Komponenten sind voneinander unabhängig verwendbar.

Der HTTP Server verarbeitet hereinkommende Requests in gleichzeitigen Threads. Er unterstützt IPv4 und IPv6, persistente Verbindungen, HTTPS, Session Cookies, sowie Datei-Uploads.

Die Template Engine hilft dabei, Webseiten auf Basis von Vorlagen zu erstellen, indem sie Platzhalter mit Daten ausfüllt. Sie unterstützt mehrere Sprachen und eignet sich für alle textbasierten Dateiformate (wie HTML, XML, CSV, ...). Andere größere Template Engines wie z.B. ClearSilver lassen sich ebenfalls problemlos verwenden.

Der Logger klinkt sich in Qt ein und schreibt Log-Meldungen in Dateien, während sie mit konfigurierbaren Zusatzinformationen, wie Zeitstempel, Thread ID, Session ID, etc. ergänzt werden. Ein Ringpuffer reichert Fehlermeldungen mit debug Meldungen an, ohne diese ständig ausgeben zu müssen. Änderungen an der Konfiguration des Loggers werden automatisch ohne Neustart aktiv.

Durch den geringen Speicherbedarf von ca. 2MB eignet sich der Webserver für embedded Systeme. Beispielsweise der Bier-brau Automat von Sebastian Düll. Aber er ist auch für große Web-Dienste geeignet.

Downloade den Quelltext von hier oder von GitHub

Du darfst die Software unter Einhaltung der LGPL Lizenz verwenden. Das Tutorial erklärt, wie man die Library anwendet. Die API ist hier dokumentiert.

Ein sehr kleines Anwendungs-Beispiel:

// Der Request Handler empfängt und beantwortet HTTP Requests
void MyRequestHandler::service(HttpRequest& request, HttpResponse& response)
{
    // Frage einen Request-Parameter ab
    QByteArray username=request.getParameter("username");

    // Setze einen Antwort-Header
    response.setHeader("Content-Type", "text/html; charset=ISO-8859-1");

    // Erzeuge das HTML Dokument
    response.write("<html><body>");
    response.write("Hello ");
    response.write(username);
    response.write("</body></html>");
}

// Das Hauptprogramm startet den HTTP Server
int main(int argc, char *argv[]) 
{
    QCoreApplication app(argc,argv);
        
    new HttpListener(
        new QSettings("configfile.ini",QSettings::IniFormat,&app),
        new MyRequestHandler(&app),
        &app);

    return app.exec();
}

Dankeschön

Die aktuelle hohe Qualität der Library ist das Ergebnis der Zusammenarbeit vieler Leute. Ich möchte an dieser Stelle den Helfern danken, die QtWebApp in produktiver Umgebung umfangreich getestet und so zur Verbesserung beigetragen haben.