Kurztipp: Routing in Tntnet

Standard

Gestern habe ich eine Weile an einem Routing-Problem geknobelt. Für statische Dateien (statisches html, Bilder, css usw.) gibt es in Tntnet die Möglichkeit diese fest einzukompilieren. Das Verfahren ist in einem Howto ganz gut beschrieben: Static files with Tntnet. Ich hatte nur das Problem, dass ich nicht genau wusste, mit welchem Pfad ich die einkompilierte Datei erreichen kann.

Ich habe jetzt herausgefunden, dass man in die .cpp-Datei vom ecppc hinein schauen kann. Dort findet sich dann dieser Abschnitt:


static const char* urls[] = {
  "./src/core/resources/favicon.ico",
  "./src/core/resources/normalize.css",
  "./src/core/resources/tntnet.png",
  "./src/core/resources/tntwebwizard.css",
};

Das sind die Pfade, unter denen die Dateien später zu erreichen sind. Wurden die Ressourcen beispielsweise in der Datei „resources.cpp“ zusammengestellt, würde die Route so aussehen:


    app.mapUrl("^/core/tntnet.png$", "resources")
        .setPathInfo("./src/core/resources/tntnet.png");

Sie ist im Browser unter der URL „http://meineseite.de/core/tntnet.png“ das Bild „tntnet.png“ zu erreichen ist. Unschön ist der relative Pfad. Das sind die Pfade, die vom ecppc-Kompiler übernommen werden, wenn man ihn so aufruft:


ecppc -bb -z -n resources -p -o bulid/resources ./src/core/resources/favicon.ico ./src/core/resources/normalize.css ./src/core/resources/tntnet.png ./src/core/resources/tntwebwizard.css

Mit dem „-I./src/core/resources“-Flag lässt sich das jedoch ändern:


ecppc -bb -z -I./src/core/resources -n resources -p -o bulid/resources favicon.ico normalize.css tntnet.png tntwebwizard.css

Mit dem „-I“-Flag wird der Pfad angegeben, in dem die Sourcen gesucht werden. Deshalb kann der Pfad verkürzt werden. Jetzt sieht das Routing auch besser aus:


    app.mapUrl("^/core/tntnet.png$", "resources")
        .setPathInfo("tntnet.png");

Dieser Umgang mit statischen Inhalten ist jedoch nur für Dinge geeignet, die sich selten ändern. Das Logo einer Website zum Beispiel. Der Vorteil ist, dass die Inhalte extrem schnell ausgeliefert werden, so dass alle Elemente sich in einer Datei befinden und  Hacker nicht so einfach fremde Inhalte unterschieben können.


Creative Commons Lizenzvertrag

Advertisements