如何在GAE/GWT应用程序中添加动态Facebook元标记

如何在GAE/GWT应用程序中添加动态Facebook元标记,facebook,google-app-engine,gwt,guice,Facebook,Google App Engine,Gwt,Guice,我见过一些在其他平台上实现这一点的技术,但我想知道是否有人有一个干净的方法来实现这一点 我的应用程序只有一个主机HTML文件,并使用标准MVP/Places/Activities解析哈希片段。它为不同的元素显示各种相似的按钮。FB(使用lint工具确认)将只读取主机页面的静态HTML,因此我需要在它返回给请求者之前对其进行处理(在GWT中处理这个问题没有意义) 我使用Guice-ycom.google.inject.servlet.servlet模块,以便创建如下内容: serve("/fb/*

我见过一些在其他平台上实现这一点的技术,但我想知道是否有人有一个干净的方法来实现这一点

我的应用程序只有一个主机HTML文件,并使用标准MVP/Places/Activities解析哈希片段。它为不同的元素显示各种相似的按钮。FB(使用lint工具确认)将只读取主机页面的静态HTML,因此我需要在它返回给请求者之前对其进行处理(在GWT中处理这个问题没有意义)

我使用Guice-ycom.google.inject.servlet.servlet模块,以便创建如下内容:

serve("/fb/*").with(MetaTagAdder.class);
http://example.com/fb/mypage.html?foo=baz#place:foo=baz
我可以使用/fb/*作为类似的按钮URL。因此,输出托管页面的HTML(根据需要添加动态元标记)。然后*.nocache.js文件跳入EntryPoint.OnModuleLoad()


这看起来有点笨重。有谁有更好的主意吗?

所以我最终选择了这条路,而且效果很好。创建一个servlet,其doPost/doGet方法写出宿主html并将参数传递给它。因此url看起来像:

serve("/fb/*").with(MetaTagAdder.class);
http://example.com/fb/mypage.html?foo=baz#place:foo=baz
然后,您可以使用参数创建元标记等:

// the first chunk of the static html
resp.getWriter().println("<html><head><script type=\"text/javascript\" language=\"javascript\" src=\"/myMoodule/myModule.nocache.js\"></script>");

// the dynamic meta tags
resp.getWriter().println("<meta property=\"og:title\" content=\"" + req.getParameter("foo") + "\" />");

// the rest of the static html
resp.getWriter().println("</head><body></body></html>");
//静态html的第一个块
resp.getWriter()println(“”);
//动态元标记
resp.getWriter()println(“”);
//静态html的其余部分
resp.getWriter()println(“”);
然后,当您在类似fb的div上设置data href属性时,请使用上面的url。也适用于搜索引擎优化。生产系统的注意事项:

  • 站点中的导航元素应该会让用户回到直接托管的版本。这可能很棘手。请理解,当散列片段演变为对用户作出反应时,HTTP请求中的查询字符串将保持静态
  • 如果参数范围有限并对参数进行处理,请在HttpServlet中使用memcache来缓存返回给客户端的html的半静态副本
  • 不要把东西放在身体里试图让你的搜索引擎优化变得活泼。心痛就在这个方向
我仍然在调音,但在这一点上看不到任何死气沉沉的节目停顿