{"id":709,"date":"2009-11-16T14:54:08","date_gmt":"2009-11-16T13:54:08","guid":{"rendered":"http:\/\/hjacob.com\/blog\/?p=709"},"modified":"2009-11-16T15:19:21","modified_gmt":"2009-11-16T14:19:21","slug":"google-app-engine-als-cdn-verwenden","status":"publish","type":"post","link":"https:\/\/hjacob.com\/blog\/google-app-engine-als-cdn-verwenden\/","title":{"rendered":"Google App Engine als CDN verwenden"},"content":{"rendered":"<p><a href=\"http:\/\/hjacob.com\/blog\/2009\/11\/google-app-engine-als-cdn-verwenden\/google-app-engine-logo\/\" rel=\"attachment wp-att-737\" title=\"Artikel zur Google App Engine als CDN Verwendung lesen\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/google-app-engine-logo.gif\" alt=\"Logo der Google App Engine\" title=\"Logo der Google App Engine\" width=\"142\" height=\"109\" class=\"floatright size-full wp-image-737\" \/><\/a>Wer sich mit der Performance von Webseiten besch\u00e4ftigt hat, hat bestimmt auch schon von den <b>Content Delivery Networks<\/b> (<i>CDN<\/i>) geh\u00f6rt. Darunter versteht man spezielle Hosting Anbieter, die darauf spezialisiert sind, statische Inhalte zu hosten. Stark frequentierte Seiten nutzen die CDNs um darauf Bilder, Javascripts, Stylesheets, Downloads etc. zu hosten. Die prim\u00e4ren Vorteile der Content Delivery Networks sind:<\/p>\n<ul>\n<li>Schnelle Zugriffszeiten, da die Server auf das schnelle Ausliefern der statischen Daten optimiert sind<\/li>\n<li>Regionale Datencenter reduzieren die Antwortzeiten<\/li>\n<li>Zugriffe auf die eigenen Server werden reduziert und so werden Ressourcen f\u00fcr das Ausliefern der dynamischen Inhalte verf\u00fcgbar<\/li>\n<li>Durch schnellere Ladezeiten der Webseite, k\u00f6nnen die Rankings in den Suchmaschinen positiv beeinflusst werden<\/li>\n<\/ul>\n<p>F\u00fcr kleinere Seiten ist ein CDN nicht umbedingt n\u00f6tig, da die Server eh nicht ausgelastet sind und es den Betreibern meistens nichts ausmacht, wenn die Seite ein paar Sekunden mehr braucht um zu laden.<\/p>\n<p>In diesem Artikel will ich erkl\u00e4ren, <b>wie man Google&#8217;s App Engine dazu verwenden kann, sein eigenes, kostenloses CDN aufzubauen<\/b>.<\/p>\n<p><!--more weiterlesen --><\/p>\n<h2>Allgemeines zur Google&#8217;s App Engine<\/h2>\n<p>Die App Engine von Google ist ein kostenloser Hosting Service f\u00fcr Phyton und Java Anwendungen. Man l\u00e4dt die Apps bei Google hoch und danach sind sie direkt \u00fcber eine Subdomain von appspot.com verf\u00fcgbar &#8211; man ben\u00f6tigt also eigentlich keinen eigenen Server mehr.<\/p>\n<p>Allerdings ist die &#8222;gew\u00f6hnliche&#8220; Website eher in Skriptsprache wie PHP oder Ruby on Rails geschrieben &#8211; oder ist gar eine ganz statische HTML Seite. Dennoch k\u00f6nnen auch diese Seiten von der App Engine profitieren und zwar indem sie ihre statischen Daten dahin auslagern. Statische Dateien sind Bilder, Javascripts und CSS Files &#8211; also Dateien, die sich nicht t\u00e4glich \u00e4ndern oder dynamisch generiert werden.<\/p>\n<p>In dieser Anleitung werde ich erkl\u00e4ren, wie man eine <b>Java<\/b> Anwendung mit Hilfe von Eclipse erstellt und diese bei der App Engine ver\u00f6ffentlicht.<\/p>\n<h2>Vorbereitung<\/h2>\n<p>Folgende Dinge werden ben\u00f6tigt:<\/p>\n<ul>\n<li>Ein <a href=\"https:\/\/appengine.google.com\/\" rel=\"external\">Account bei App Engine<\/a><\/li>\n<li>Das Programm <a href=\"http:\/\/www.eclipse.org\/downloads\/\" rel=\"external\">Eclipse<\/a> (ich habe die Classic Version verwendet)<\/li>\n<li>Die Dateien die man bei der App Engine hosten m\u00f6chte, m\u00fcssen auf der lokalen Festplatte abgelegt sein.<\/li>\n<\/ul>\n<p>Die Screenshots wurden in Mac OS X aufgenommen &#8211; allerdings ist Eclipse genauso f\u00fcr Windows erh\u00e4ltlich daher sollten alle Schritte 1:1 \u00fcbertragbar sein.<\/p>\n<h2>1. Schritt &#8211; Installation des App Engine Plugins<\/h2>\n<p>Um Anwendungen \u00fcber Eclipse auf der App Engine deployen zu k\u00f6nnen, wird noch ein Plugin ben\u00f6tigt. Hier die Schritt f\u00fcr Schritt Anleitung zur Installation:<\/p>\n<ol summary=\"Installation von Google App Engine Plugins in Eclipse\">\n<li><i>Install New Software<\/i> im <b>Help<\/b> Menu ausw\u00e4hlen<\/li>\n<li>Die URL zum Plugin in das Feld f\u00fcr <b>Work with:<\/b> einf\u00fcgen. Die URL findet man bei <a href=\"http:\/\/code.google.com\/intl\/de\/eclipse\/docs\/download.html\" rel=\"external\">Googles Info Seite<\/a>. Zum Zeitpunkt des Schreibens ist die 3.5 die aktuelle Version &#8211; daf\u00fcr lautet die Plugin URL &#8222;http:\/\/dl.google.com\/eclipse\/plugin\/3.5&#8220;. Nachdem man die URL eingef\u00fcgt hat, noch <b>Add<\/b> klicken.<\/li>\n<li>Es erscheint ein Popup in dem man die neue Plugin Ressource betiteln soll. Also schnell als Name &#8222;Google App Engine&#8220; eintippen und <b>OK<\/b> dr\u00fccken.<\/li>\n<li>Als n\u00e4chstes erscheint die Liste der verf\u00fcgbaren Plugins &#8211; ein H\u00e4ckchen neben alle Eintr\u00e4ge setzen und weiter gehts mit dem <b>Next<\/b> Button.<\/li>\n<li>Darauf erscheint ein Fenster der zur Zustimmung der Lizenzbestimmung auffordert <b>I accept the terms of the license agreements<\/b> ausw\u00e4hlen und <b>Finish<\/b> klicken.<\/li>\n<li>Die Installation beginnt &#8211; das kann ein bisschen Zeit in Anspruch nehmen. Also Zeit f\u00fcr nen Kaffee \ud83d\ude42<\/li>\n<li>Nach der Installation will Eclipse <b>neugestartet<\/b> werden.<\/li>\n<\/ol>\n<p>Hier die einzelnen Schritte als Screenshots:<br \/>\n<a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-1-plugin-hinzufuegen.png\" rel=\"lightbox[cdn]\" title=\"Eclipse: Neues Plugin hinzuf\u00fcgen\" rel=\"lightbox[cdn]\" title=\"Eclipse: Neues Plugin hinzuf\u00fcgen\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-1-plugin-hinzufuegen-275x171.png\" alt=\"Eclipse: Neues Plugin hinzuf\u00fcgen\" title=\"Eclipse: Neues Plugin hinzuf\u00fcgen\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-710\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-1-plugin-hinzufuegen-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-1-plugin-hinzufuegen-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-1-plugin-hinzufuegen-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-1-plugin-hinzufuegen.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a><a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-2-plugin-namen-waehlen.png\" rel=\"lightbox[cdn]\"  title=\"Eclipse: Der Plugin Ressource einen Namen geben\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-2-plugin-namen-waehlen-275x171.png\" alt=\"Eclipse: Der Plugin Ressource einen Namen geben\" title=\"Eclipse: Der Plugin Ressource einen Namen geben\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-711\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-2-plugin-namen-waehlen-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-2-plugin-namen-waehlen-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-2-plugin-namen-waehlen-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-2-plugin-namen-waehlen.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a><br \/>\n<a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-3-plugin-auswahl.png\" title=\"Eclipse: Die zuinstallierenden Plugins ausw\u00e4hlen\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-3-plugin-auswahl-275x171.png\" alt=\"Eclipse: Die zuinstallierenden Plugins ausw\u00e4hlen\" title=\"Eclipse: Die zuinstallierenden Plugins ausw\u00e4hlen\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-712\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-3-plugin-auswahl-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-3-plugin-auswahl-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-3-plugin-auswahl-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-3-plugin-auswahl.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a><a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-4-lizenz-annehmen.png\" title=\"Eclipse: Lizenz der Plugins akzeptieren\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-4-lizenz-annehmen-275x171.png\" alt=\"Eclipse: Lizenz der Plugins akzeptieren\" title=\"Eclipse: Lizenz der Plugins akzeptieren\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-713\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-4-lizenz-annehmen-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-4-lizenz-annehmen-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-4-lizenz-annehmen-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-4-lizenz-annehmen.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a> <a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-5-installation.png\" rel=\"lightbox[cdn]\" title=\"Eclipse: Installation der Plugins abwarten\" ><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-5-installation-275x171.png\" alt=\"Eclipse: Installation der Plugins abwarten\" title=\"Eclipse: Installation der Plugins abwarten\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-714\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-5-installation-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-5-installation-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-5-installation-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-5-installation.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a> <a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-6-neustart.png\" title=\"Eclipse: Nach der Installation neustarten\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-6-neustart-275x171.png\" alt=\"Eclipse: Nach der Installation neustarten\" title=\"Eclipse: Nach der Installation neustarten\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-715\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-6-neustart-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-6-neustart-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-6-neustart-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-6-neustart.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a><\/p>\n<h2>2. Schritt: Neues Projekt in Eclipse erstellen<\/h2>\n<ol summary=\"Ein neues Google App Engine Projekt in Eclipse erstellen\">\n<li><b>File<\/b> &#8211; <b>New<\/b> &#8211; <b>Web Application Project<\/b> w\u00e4hlen um ein neues Web Projekt in Eclipse zu erstellen<\/li>\n<li>Die Details f\u00fcr das Projekt eingeben. Das H\u00e4ckchen bei <b>Use Google Web Toolkit<\/b>  kann entfernt werden &#8211; bei der <b>Use Google App Engine<\/b> nat\u00fcrlich das H\u00e4ckchen aktivieren.<\/li>\n<li>Unter Umst\u00e4nden springt Eclipse im Anschluss nicht automatisch zu der <b>Workbench<\/b> &#8211; dann einfach auf das entsprechende Symbol im Eclipse Dashboard klicken (s. Screenshot).<\/li>\n<\/ol>\n<p><a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-7-neues-projekt-erstellen.png\" title=\"Eclipse: Neues App Engine Projekt erstellen\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-7-neues-projekt-erstellen-275x171.png\" alt=\"Eclipse: Neues App Engine Projekt erstellen\" title=\"Eclipse: Neues App Engine Projekt erstellen\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-716\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-7-neues-projekt-erstellen-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-7-neues-projekt-erstellen-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-7-neues-projekt-erstellen-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-7-neues-projekt-erstellen.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a><a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-8-daten-des-projektes.png\" title=\"Eclipse: Projekt Details eingeben\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-8-daten-des-projektes-275x171.png\" alt=\"Eclipse: Projekt Details eingeben\" title=\"Eclipse: Projekt Details eingeben\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-717\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-8-daten-des-projektes-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-8-daten-des-projektes-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-8-daten-des-projektes-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-8-daten-des-projektes.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a><a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-9-zur-workbench-wechseln.png\" title=\"Eclipse: Zum Abschluss zur Workbench wechseln\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-9-zur-workbench-wechseln-275x171.png\" alt=\"Eclipse: Zum Abschluss zur Workbench wechseln\" title=\"Eclipse: Zum Abschluss zur Workbench wechseln\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-718\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-9-zur-workbench-wechseln-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-9-zur-workbench-wechseln-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-9-zur-workbench-wechseln-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-9-zur-workbench-wechseln.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a><\/p>\n<h2>3. Schritt: Dateien einf\u00fcgen<\/h2>\n<p>Als n\u00e4chstes f\u00fcgen wir die <b>statischen Dateien<\/b> in das Projekt ein.<\/p>\n<ol summary=\"Die statischen Dateien eines Webprojektes in das Google App Engine Projekt einf\u00fcgen\">\n<li>In dem Ordner <b>war<\/b> des Projektbaumes (linke Spalte in der Workbench) erstellen wir die Unterordner &#8222;images&#8220;, &#8222;stylesheets&#8220;, &#8222;javascripts&#8220; und &#8222;downloads&#8220; (nat\u00fcrlich kann man aber auch die Ordner nennen wie man will).<\/li>\n<li>Wir w\u00e4hlen im lokalen Dateisystem die jeweiligen Dateien (+ Unterordner) aus und ziehen sie in den jeweiligen Ordner in Eclipse. In dem Screenshot werden beispielhaft die Bilder in den Ordner &#8222;images&#8220; gezogen.<\/li>\n<li>Als n\u00e4chstes \u00f6ffnet man die Datei <b>appengine-web.xml<\/b> im Ordner <b>war\/WEB-INF<\/b> (des Eclipse Projektes).<\/li>\n<li>In der XML Datei in dem <application> Feld den Namen der Anwendung eingeben (also den Namen den man bei der App Engine Registrierung verwendet hat).<\/li>\n<li>Dann f\u00fcgt man noch die Definitionen der statischen Inhalte in die XML Datei ein:<br \/>\n[sourcecode lang=&#8220;html&#8220;]<br \/>\n<!-- Static Files for CDN --><br \/>\n<static-files><br \/>\n<include path=\"\/images\/*\" expiration=\"1d\" \/><br \/>\n<include path=\"\/stylesheets\/*\" expiration=\"1d\" \/><br \/>\n<include path=\"\/javascripts\/*\" expiration=\"1d\" \/><br \/>\n<\/static-files><br \/>\n[\/sourcecode]<br \/>\nDas Attribut <i>exparation<\/i> definiert wie lang die Datei im Client Cache gehalten werden soll &#8211; ich habe den Wert &#8222;1d&#8220; gew\u00e4hlt, also einen Tag. Nat\u00fcrlich kann man dort auch &#8222;1w&#8220; oder &#8222;1y&#8220; w\u00e4hlen, wenn man in n\u00e4chster Zeit nicht vor hat, an den Dateien was zu \u00e4ndern.\n<\/li>\n<li>Wer testen mag, ob bis dahin alles richtig war, kann nun mit &#8222;Run <projectname>&#8220; (gr\u00fcnes Play-Symbol in der Menuleiste) den lokalen Testserver starten. Danach kann man im Browser unter der URL &#8222;http:\/\/localhost:8080\/[ORDNER]\/[DATEI] testen ob die Datei angezeigt wird. (s. Screenshot)<\/li>\n<li>Klickt man nun auf die blaue Turbine in der Menuleiste (<b>Deploy App Engine Project<\/b>) erscheint ein Popup bei dem man seinen Google Login eingeben muss (den Account mit dem der App Engine Account verkn\u00fcpft ist!).<\/li>\n<li>Nach dem Best\u00e4tigen mittels <b>Deploy<\/b> f\u00e4ngt Eclipse an die Dateien zu Google zu \u00fcbertragen.<\/li>\n<li>Das wars! Unter <b>http:\/\/[APP-NAME].appspot.com\/<\/b> sind nun die Dateien abrufbar.<\/li>\n<\/ol>\n<p><a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-10-ordner-im-app-engine-projekt-erstellen.png\" title=\"App Engine: Die gew\u00fcnschten Ordner erstellen\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-10-ordner-im-app-engine-projekt-erstellen-275x171.png\" alt=\"App Engine: Die gew\u00fcnschten Ordner erstellen\" title=\"App Engine: Die gew\u00fcnschten Ordner erstellen\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-722\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-10-ordner-im-app-engine-projekt-erstellen-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-10-ordner-im-app-engine-projekt-erstellen-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-10-ordner-im-app-engine-projekt-erstellen-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-10-ordner-im-app-engine-projekt-erstellen.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a> <a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-11-lokale-dateien-rueberziehen.png\" title=\"Lokales Dateisystem: Die gew\u00fcnschten Dateien in den Ordner (in Eclipse) r\u00fcberziehen\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-11-lokale-dateien-rueberziehen-275x171.png\" alt=\"Lokales Dateisystem: Die gew\u00fcnschten Dateien in den Ordner (in Eclipse) r\u00fcberziehen\" title=\"Lokales Dateisystem: Die gew\u00fcnschten Dateien in den Ordner (in Eclipse) r\u00fcberziehen\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-723\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-11-lokale-dateien-rueberziehen-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-11-lokale-dateien-rueberziehen-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-11-lokale-dateien-rueberziehen-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-11-lokale-dateien-rueberziehen.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a> <a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-12-lokale-dateien-rueberziehen.png\" title=\"Eclipse: Die Dateien in den jeweiligen Ordner ablegen\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-12-lokale-dateien-rueberziehen-275x171.png\" alt=\"Eclipse: Die Dateien in den jeweiligen Ordner ablegen\" title=\"Eclipse: Die Dateien in den jeweiligen Ordner ablegen\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-724\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-12-lokale-dateien-rueberziehen-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-12-lokale-dateien-rueberziehen-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-12-lokale-dateien-rueberziehen-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-12-lokale-dateien-rueberziehen.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a><a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-13-appengine-xml-anpassen.png\" title=\"App Engine: Die appengine-web.xml anpassen\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-13-appengine-xml-anpassen-275x171.png\" alt=\"App Engine: Die appengine-web.xml anpassen\" title=\"App Engine: Die appengine-web.xml anpassen\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-725\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-13-appengine-xml-anpassen-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-13-appengine-xml-anpassen-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-13-appengine-xml-anpassen-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-13-appengine-xml-anpassen.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a>  <a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-14-testen-ob-alles-ok-ist.png\" title=\"Google App Engine: Im lokalen Browser testen ob bisher alles korrekt war (Port 8080!)\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-14-testen-ob-alles-ok-ist-275x171.png\" alt=\"Google App Engine: Im lokalen Browser testen ob bisher alles korrekt war (Port 8080!)\" title=\"Google App Engine: Im lokalen Browser testen ob bisher alles korrekt war (Port 8080!)\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-726\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-14-testen-ob-alles-ok-ist-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-14-testen-ob-alles-ok-ist-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-14-testen-ob-alles-ok-ist-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-14-testen-ob-alles-ok-ist.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a> <a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-15-appengine-deploy.png\" title=\"Eclipse: Den Upload zur Google App Engine starten\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-15-appengine-deploy-275x171.png\" alt=\"Eclipse: Den Upload zur Google App Engine starten\" title=\"Eclipse: Den Upload zur Google App Engine starten\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-727\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-15-appengine-deploy-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-15-appengine-deploy-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-15-appengine-deploy-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-15-appengine-deploy.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a> <a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-16-upload.png\" title=\"Eclipse: So schauts aus, wenn alles richtig gemacht wurden\" rel=\"lightbox[cdn]\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-16-upload-275x171.png\" alt=\"Eclipse: So schauts aus, wenn alles richtig gemacht wurden\" title=\"Eclipse: So schauts aus, wenn alles richtig gemacht wurden\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-728\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-16-upload-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-16-upload-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-16-upload-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-16-upload.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a> <a href=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-17-finale-url-testen.png\" title=\"App Engine: Die Dateien sind jetzt unter der jeweiligen Projekt-Appspot-URL zu finden\" rel=\"lightbox[cdn]\"  title=\"App Engine: Die Dateien sind jetzt unter der jeweiligen Projekt-Appspot-URL zu finden\" ><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-17-finale-url-testen-275x171.png\" alt=\"App Engine: Die Dateien sind jetzt unter der jeweiligen Projekt-Appspot-URL zu finden\" title=\"App Engine: Die Dateien sind jetzt unter der jeweiligen Projekt-Appspot-URL zu finden\" width=\"275\" height=\"171\" class=\"aligncenter size-medium wp-image-729\" srcset=\"https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-17-finale-url-testen-275x171.png 275w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-17-finale-url-testen-150x93.png 150w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-17-finale-url-testen-560x350.png 560w, https:\/\/hjacob.com\/blog\/wp-content\/uploads\/2009\/11\/screenshot-17-finale-url-testen.png 1280w\" sizes=\"(max-width: 275px) 100vw, 275px\" \/><\/a><\/p>\n<h2>4. Schritt: Verweise anpassen<\/h2>\n<p>Zu guter letzt m\u00fcssen nun noch die Verweise auf die statischen Dateien in den <b>Javascript<\/b>, <b>CSS<\/b> und <b>HTML<\/b> Dateien angepasst werden. Also \u00fcberall dort wo bisher auf den lokalen Server verwiesen wurde durch die entsprechende Appspot URL ersetzen. Auch an die relativen Pfade denken!<br \/>\n[sourcecode lang=&#8220;html&#8220;]<br \/>\n<img decoding=\"async\" src=\"\/images\/hallo.jpg\" alt=\"Hallo!\"\/><br \/>\n[\/sourcecode]<br \/>\nwird also zu:<br \/>\n[sourcecode lang=&#8220;html&#8220;]<br \/>\n<img decoding=\"async\" src=\"http:\/\/[APP-NAME].appspot.com\/images\/hallo.jpg\" alt=\"Hallo!\"\/><br \/>\n[\/sourcecode]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Artikel erkl\u00e4rt wie man mit Hilfe der Google App Engine sein eigenes CDN bauen kann und so Geld und Ressourcen spart.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,115,36,3],"tags":[238,239,242,100,237,240,379,241],"_links":{"self":[{"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/posts\/709"}],"collection":[{"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/comments?post=709"}],"version-history":[{"count":12,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/posts\/709\/revisions"}],"predecessor-version":[{"id":739,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/posts\/709\/revisions\/739"}],"wp:attachment":[{"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/media?parent=709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/categories?post=709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/tags?post=709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}