2

웹 크롤러가 볼 수 있도록 동적으로 내용을 생성합니까? (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)이 반환되지만 필터는 무시됩니다. 내가 app.jsp 리디렉션 대신 index.html을 환영 파일을 사용하는 것을 시도했다환영 파일에 대한 서블릿 필터가 적용되지 않습니다.

<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> 

:

내 web.xml에 다음과 같은 필터지도가 포함되어 있습니다. 그런 다음 필터가 실행됩니다. 그러나 이것은 내 문제를 해결하지 못합니다. 클라이언트 쪽 리디렉션 뒤에는 크롤러 (아이디어)가 없으며 서버 쪽 리디렉션을 사용하면 URL 조각 (내가 필요로하는 부분)이 느슨해집니다.

대체 솔루션이 있습니까?

Google Appengine을 사용하고 있습니다.

답변

1

RequestDispatcher를 전달하는 환영 서블릿을 사용하여 해결했습니다. foward 동안 필터가 작동하도록하려면 발송자 전달을 필터 매핑에 추가해야합니다.

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); 
    } 
} 
관련 문제