Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Перехват запроса к виртуальным ресурсам


Автор: FlasH 17.3.2009, 17:24
Всем привет,

Решаю проблему сл. типа: есть ряд сервлетов, которые принимают одинаковый параметр id=xyz (например 
Код

http://host/webapp/pages?id=14
,  где pages - это маппинг на com.company.app.PagesServlet). Имя параметра одинаково, ну  а назначение в каждом сервлете своё.

Нужно заменить ссылки вида 
Код

webapp/servlet/id=xyz 
на 
Код

webapp/servlet/xyz
. При этом получается неопределенное количество виртуальных ресурсов. 

Соответственно, было бы неплохо перехватить такие или вообще любые запросы к вебаппу, разобрать у них значение xyz и сфорвардить к нужному сервлету, подсунув xyz в качестве параметра id = xyz. И оставить все сервлеты на своих местах и без изменений.

Капнул фильтры: в Filter.doFilter() приходит ServletRequest у котого URI попросить нельзя, соотвественно ничего разобрать на этапе фильтра не получается.
Может RequestDispatcher нужно собственный смастерить? Только куда его подсунуть?
Или на худой конец сделать свой DispatchingServlet который будет мапиться на webapp/* и форвардить запросы по сервлетам. Но webapp/* вроде тоже нельзя замапить.  Как быть?


Tomcat 5.5.27, Java 1.5

Автор: mbasil 17.3.2009, 18:08
Решение известно. Надо не RequestDispatcher писать, а сервлет контроллер,
который будет перехватывать все виртуальные запросы и транслировать их 
в физические адреса. Нужно что-то похожее на сервлет контроллер Struts,
только попроще. В старой книжке Тейта "Горький вкус Java" есть простой
пример контроллера. 
Однако переводя вопросы навигации на ресурсы в плоскость параметров вы
похоже только усложняете приложение.


Автор: Evgeni68 21.3.2009, 00:05
Цитата(FlasH @  17.3.2009,  17:24 Найти цитируемый пост)
Капнул фильтры: в Filter.doFilter() приходит ServletRequest у котого URI попросить нельзя, соотвественно ничего разобрать на этапе фильтра не получается.

Откастить ServletRequest к HttpServletRequest.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)