2010-03-12 10 views
8

ich die #! Token verwenden möchten meine GWT-Anwendung gecrawlt zu machen, wie hier beschrieben: http://code.google.com/web/ajaxcrawling/GWT-Anwendung zu machen gecrawlt durch eine Suchmaschine

Es gibt eine GWT Beispielanwendung online verfügbar, die diese verwendet, zum Beispiel: http://gwt.google.com/samples/Showcase/Showcase.html#!CwRadioButton

wird die folgende statische Webseite der googlebot dienen: http://gwt.google.com/samples/Showcase/Showcase.html?_escaped_fragment_=CwRadioButton

ich meine GWT app ähnlich etwas tun wollen. Kurz gesagt, möchte ich einen anderen Geschmack der Seite servieren, wenn der _escaped_fragment_ Parameter in der URL gefunden wird.

Was muss ich ändern, damit der Server etwas anderes bedient (eine statische Seite oder eine Seite, die dynamisch über einen kopflosen Browser wie HTML Unit generiert wird)? Ich vermute, es könnte die web.xml Datei sein, aber ich bin mir nicht sicher.

(Anmerkung: Ich dachte an der Überprüfung des Showcase App mit dem GWT SDK zur Verfügung gestellt, aber leider scheint es nicht auf _escaped_fragment_ dient statische Dateien zu unterstützen und es nicht die #! Token verwenden ..)

+0

Cross-Posted auf GWT Google Group. Vielleicht möchten Sie auch die Antworten dort lesen: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/15a922e701e9e2db?hl=en –

+0

Ich habe eine Frage gestellt, um weitere Diskussionen darüber zu entfachen Thema. "AJAX-Anwendungen crawlierbar machen? Wie erstellt man einen einfachen Web-Service in Google App Engine, um HTML-Snapshots zu erstellen?" http://stackoverflow.com/questions/3517944/making-ajax-applications-crawlable-how-to-build-a-simple-web-service-on-google-a –

Antwort

2

Wenn du web.xml benutzen willst, dann denke ich, dass es nicht mit einem Servlet-Mapping funktionieren wird, da die URL-Muster die get-Parameter ignorieren. (Nicht 100% sicher, wenn es eine andere Möglichkeit gibt, dies zu ermöglichen.)

Sie könnten Showcase.html natürlich einem Servlet zuordnen, und in diesem Servlet entscheiden Sie, was zu tun ist, basierend auf dem get-Parameter "_escaped_fragment_" . Aber es ist ein bisschen teuer, ein Servlet aufzurufen, nur um eine statische Seite für die Mehrheit der Anfragen zu liefern (nicht schlecht, aber immer noch. Sie könnten Cache-Header setzen, wenn Sie sicher sind, dass es sich nicht ändert).

Oder Sie könnten einen Apache oder etwas vor Ihrem Server haben - aber ich verstehe, ich würde das auch nicht tun müssen. Vielleicht stellt Ihr JavaEE-Server (welchen verwenden Sie BTW?) Einen Mechanismus zur URL-Filterung bereit, bevor die Anfrage an den Webcontainer weitergeleitet wird - das würde ich auch gerne wissen!

+0

Danke für den aufschlussreichen Kommentar. Ich führe mein Projekt auf der Google App Engine aus, daher bin ich mir nicht sicher, wie viel Zugriff (oder sogar welcher) Servlet-Container ich verwende ... ich könnte es wahrscheinlich herausfinden. Nach einigem Lesen dachte ich, dass Filter den Trick machen könnten, wenn sie nur den get-Parameter erhalten. Ich werde das überprüfen. –

+0

Die Verwendung eines Filters ist in diesem Fall der Verwendung eines Servlets ziemlich ähnlich (ich glaube nicht, dass es einen großen Leistungsunterschied gibt). In jedem Fall sollten Sie den get-Parameter über servletRequest.getParameter (...) abrufen können. –

+0

Sinnvoll. Der Filter macht es jedoch möglich, mit dem Rest der Filterkette fortzufahren, wenn ich die Anfrage nicht behandeln möchte (d. H.Der Parameter _escaped_fragment_ ist nicht vorhanden. Gibt es eine Möglichkeit, dasselbe mit einem Servlet zu machen? –

2

Gefunden meine Antwort! Die Probe Showcase crawlbar Hyperlinks unterstützt, ist in dem folgenden Zweig: http://code.google.com/p/google-web-toolkit/source/browse/branches/crawlability/samples/showcase/?r=7726

Es definiert einen Filter in den web.xml URLs an den Ausgang der Einheit mit dem HTML _escaped_fragment_ Token zu umleiten.

+0

Nur um das oben genannte zu kommentieren. Dies würde wahrscheinlich funktionieren, wenn Sie Ihren eigenen Tomcat verwenden. Ich arbeite auf Google App Engine. Das Problem ist momentan, dass HTML Unit nicht auf App Engine ausgeführt wird, aber möglicherweise bald in Übereinstimmung mit: http://www.google.com/url?sa=D&q=https://sourceforge.net /tracker/index.php%3Ffunc%3Ddetail%26aid%3D2962074%26group_id%3D47038%26atid%3D448269%23&usg=AFQjCNGGJuWPDqFfUuc4k44HormgSgEM6g –

+0

dieser Zweig existiert nicht mehr, dh, das ist keine hilfreiche, noch viel weniger richtige Antwort. –

+0

Entschuldigung. Ich kann es nirgends finden, ich habe es deaktiviert und korrigiert. –