Zum Tutorial

Letzte Änderungen

1.6.6 25.07.2016
Removed useless mutex from TemplateLoader.
Add mutex to TemplateCache (which is now needed).

1.6.5 10.06.2016
Incoming HTTP request headers are now processed case-insensitive.
Add support for the HttpOnly flag of cookies.

1.6.4 27.03.2016
Fixed constructor of Template class did not load the source file properly.
Template loader and cache were not affected.

1.6.3 11.03.2016
Fixed a compilation error.
Added missing implementation of HttpRequest::getPeerAddress().

1.6.2 06.03.2016
Added mime types for some file extensions.

1.6.1 25.01.2016
Fixed parser of boundary value in multi-part request, which caused that QHttpMultipart did not work on client side.

1.6.0 29.12.2015
Much better output buffering, reduces the number of small IP packages.

1.5.13 29.12.2015
Add support for old HTTP 1.0 clients.
Add HttpResponse::flush() and HttpResponse::isConnected() which are helpful to support SSE from HTML 5 specification.

1.5.12 11.12.2015
Fix program crash when using SSL with a variable sized thread pool on Windows.
Changed name of HttpSessionStore::timerEvent() to fix compiler warnings since Qt 5.0.
Add HttpRequest::getRawPath().
HttpSessionStore::sessions is now protected.

1.5.11 21.11.2015
Fix project file for Mac OS.
Add HttpRequest::getPeerAddress() and HttpResponse::getStatusCode().

1.5.10 01.09.2015
Modified StaticFileController to support ressource files (path starting with ":/" or "qrc://").

1.5.9 06.08.2015
New listen() method, to restart listening after close.
Add missing include for QObject in logger.h.
Add a call to flush() before closing connections, which solves an issue with nginx.

1.5.8 26.07.2015
Fixed segmentation fault error when closing the application while a HTTP request is in progress.
New HttpListener::close() method to simplifly proper shutdown.

1.5.7 20.07.2015
Fix Qt 5.5 compatibility issue.

1.5.6 22.06.2015
Fixed compilation error if Qt does not support OpenSsl.

1.5.5 16.06.2015
Improved performance of SSL connections.

1.5.4 15.06.2015
Support for Qt versions without OpenSSL.

1.5.3 22.05.2015
Fixed Windows issue: QSslSocket cannot be closed from other threads than it was created in.

1.5.2 12.05.2015
Fixed Windows issue: QSslSocket cannot send signals to another thread than it was created in.

1.5.1 13.04.2015
Add support for pipelining.

1.5.0 03.04.2015
Add support for HTTPS.

...

1.4.0 14.03.2015
Add support the creation of a shared library (*.dll or *.so).

...

1.3.0 20.04.2013
Add support for logging source file name, line number and function name.

...

1.2.0 05.12.2010
Add a controller that serves static files, with cacheing.

...

1.1.0 19.10.2010
Add support for sessions.

...

1.0.0 17.10.2010
First release

Startseite    English version of this page

QtWebApp HTTP Webserver 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

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

Eine einfache mehrsprachige Template Engine ist enthalten. Sie füllt Platzhalter in Textdateien mit Werten aus, 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.

Das QtService Modul ermöglicht ihnen, ein Programm als Windows Dienst einzurichten.

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.

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=new QCoreApplication(argc,argv);
    
    QSettings* settings=new QSettings("configfile.ini",QSettings::IniFormat,app);
    MyRequestHandler* handler=new MyRequestHandler(app);
    HttpListener* listener=new HttpListener(settings,handler,app);

    return app->exec();
}

Sie dürfen QtWebApp.zip frei downloaden und unter Einhaltung der LGPL Lizenz verwenden. Das englische Tutorial erklärt ihnen, wie man die Library anwendet. Die API ist hier dokumentiert.

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 Verbesserung beigetragen haben.