Zum Tutorial

Letzte Änderungen

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.

1.6.7 10.10.2016
Fix type of socketDescriptor in qtservice library.
Add support for INFO log messages (new since QT 5.5).
Improve indentation of log messages.

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.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

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 mehrsprachige Template Engine füllt Platzhalter in Text-Vorlagen mit variablen Daten aus. Die Template Engine unterstützt auch bedingte und wiederholbare Abschnitte. Andere größere Template Engines wie z.B. ClearSilver lassen sich problemlos einbinden.

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. Ä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.