Будет ли работать request.getDispatcher(/newurl).forward() при использовании apache, подключенного к tomcat через ajp?

Я пытался изменить поведение стороннего приложения, с которым я работаю, написав фильтр сервлета для пересылки запроса на определенный URL-адрес на основе определенных условий.

Сначала я пытался использовать request.getDispatcher(url).forward();, но всегда получал страницу 404, показывающую, что URL-адрес не найден. Я обошел это, используя вместо этого request.sendRedirect, но только теперь я понимаю, что экран 404 был тем, что я обычно вижу на сервере с помощью tomcat.

Это заставило меня задуматься о конфигурации в этом экземпляре. URL-адрес, на который я пытаюсь перенаправить, является сценарием cgi. У нас есть apache в качестве внешнего интерфейса, подключенного через разъемы ajp, и apache настроен на выполнение сценариев cgi.

Итак, мой вопрос: переадресация из фильтра сервлета когда-либо попадала в apache, или переадресация обрабатывается специально tomcat, и поэтому это не сработает?


person Mr Moose    schedule 13.01.2012    source источник


Ответы (1)


дошел ли когда-нибудь фильтр сервлетов до apache?

RequestDispatcher.forward — это внутренняя операция в веб-приложении сервера приложений, используемая для передачи управления потоком от одного внутреннего компонента (например, сервлета) к другому (например, JSP). Вы не можете перенаправлять ресурсы за пределы сервера приложений, например, ваш сценарий CGI. Для этого вам придется использовать перенаправление.

person skaffman    schedule 13.01.2012
comment
Спасибо. Я примерно так и подозревал, но мне потребовалось около 20 минут, чтобы понять, что происходит. Я думал, что в первую очередь это связано с кодировкой URL, поэтому я работал над устранением проблемы, которой не существовало. редирект работает нормально, так что все хорошо, что хорошо кончается. - person Mr Moose; 13.01.2012