我正在开发一个RAP网站,并希望像谷歌这样的机器人可以访问它(我在这里只指谷歌;但我认为其他搜索引擎的工作方式类似)。 Webapp包含我从数据库加载的动态内容,具体取决于用户搜索的内容。如何为Google提供此内容? 我已经阅读了Google的ajax抓取指南,但不知道如何将它应用于RAP:
提前致谢!
答案 0 :(得分:6)
Ajax的想法是应用程序不会一直加载新页面,而是在后台使用Ajax请求加载新内容。无论如何,要在您的应用程序中提供“深层链接”,您需要包含片段部分的URL,例如example.com/myapp#mystate
。使用此技巧是因为当只有URL的片段部分发生更改时,浏览器不会重新加载页面。
这与RAP没什么不同。为了处理这种URL,RWT提供了浏览器历史API。当您的申请状态发生变化时,例如当用户选择某种标签或触发搜索时,您可以在浏览器历史记录中添加新条目,从而有效地更改浏览器中URL的片段:
RWT.getBrowserHistory().createEntry( "!mystate", "Example" );
这会将URL更改为example.com/app/entrypoint#!mystate
(此状态的“深层链接”)并在浏览器历史记录中添加名为“Example”的条目,因此您可以使用浏览器的后退按钮返回到此状态以后说。
为了能够对URL的更改做出反应,您必须向浏览器历史记录添加一个侦听器。每次片段部分更改时都会通知此侦听器。当应用程序以片段启动时(有人跟随深层链接)也是如此。然后,您的应用程序负责重新安装此片段所代表的状态。
RWT.getBrowserHistory().addBrowserHistoryListener( new BrowserHistoryListener() {
public void navigated( BrowserHistoryEvent event ) {
// show state represented by event.entryId
}
} );
对不同“子页面”使用片段URL的RAP应用程序的示例是RAP examples demo。
故事的其余部分应在Google's AJAX crawling guide中解释。您的ID必须以!
开头,以生成包含#!mystate
这样的片段的网址。这些网址是您应添加到网站地图的网址。要提供爬网程序,您可以实现一个servlet过滤器,用于捕获对URL模式?_escaped_fragment_=mystate
的请求,并返回特定状态的HTML表示。