我正在使用过滤器生成动态内容,以便对于webcrawler(https://developers.google.com/webmasters/ajax-crawling/docs/specification)可见。如果传入的URL包含路径(http://www.unclestock.com/app.jsp#!s=GOOG),则此过滤器工作正常。如果传入的URL仅包含我的域(和片段),比如http://www.unclestock.com#!s=GOOG,则会返回欢迎文件(app.jsp),但不会过滤掉过滤器。
我的web.xml包含以下过滤器映射:
<filter-mapping>
<filter-name>crawler</filter-name>
<url-pattern>/app.jsp</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>app.jsp</welcome-file>
</welcome-file-list>
我尝试使用index.html欢迎文件,重定向到app.jsp。然后执行过滤器。但是,这并没有解决我的问题:客户端重定向后面没有抓取器(这是主意),而对于服务器端重定向,我会丢失我的url片段(我也需要)。
您是否看到任何其他解决方案?
我正在使用Google Appengine。
答案 0 :(得分:1)
我通过使用一个RequestDispatcher转发的welcome servlet来解决它。请注意,必须将调度程序FORWARD添加到过滤器映射中,以使过滤器在前期工作。
web.xml:
<filter-mapping>
<filter-name>crawler</filter-name>
<url-pattern>*.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<welcome-file-list>
<welcome-file>welcome</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>welcome</servlet-name>
<servlet-class>Welcome</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>welcome</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
Welcome.java:
public class Welcome extends RemoteServiceServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
RequestDispatcher rd = req.getRequestDispatcher("app.jsp");
rd.forward(req, resp);
}
}