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), но фильтр не распознается.Сервлет-фильтр не считается для файла приветствия

Мой 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.

ответ

1

Я решил его использовать приветственный сервлет, который выполняет RequestDispatcher вперед. Обратите внимание, что диспетчер 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); 
    } 
} 
Смежные вопросы