Как я могу определить, какой jsp включает веб-страницу, используемую в веб-приложении

Я хочу определить, когда в веб-приложении происходит включение в jsp и, в частности, какая страница включается. Я хочу сделать это, когда запрашивается страница меню. Один из вариантов — перезаписать PageContext, но оказывается, что вы нигде не можете получить к нему доступ, чтобы обернуть его. Насколько я вижу, PageContext — единственный класс, который обеспечивает обратные вызовы include. Я мог бы использовать фильтр ответа, чтобы определить, когда происходит включение, но похоже, что это тоже невозможно.

Есть идеи ?

Чего я хочу добиться, так это того, что когда запрашивается jsp, я хочу добавить все включения в качестве комментария в конце запрошенного jsp.


person Benjamin    schedule 07.07.2009    source источник


Ответы (1)


Некоторые (большинство?) серверов приложений будут повторно использовать объект запроса для динамических включений - я знаю, что это делают Tomcat и Weblogic. Таким образом, вы можете создать фильтр, который вставляет список в качестве атрибута запроса при первом вызове и обновляет его при последующих вызовах, а затем ваша страница выгружает содержимое этого списка.

Но я должен спросить: какова реальная причина для этого? Я не могу представить это в производственном коде, поэтому я предполагаю, что вы хотите построить какой-то граф зависимостей. И если это так, я бы рекомендовал создать инструмент статического анализа, а не динамический. Если ваше приложение настолько сложное, что вам нужна такая карта, велика вероятность, что оно будет иметь условные включения, которые не будут обнаружены динамическим инструментом, если только вы не сможете выполнить все возможные пути (а это маловероятно).

person kdgregory    schedule 07.07.2009
comment
Спасибо, это сработало бы, хотя я решил создать отдельную программу для определения зависимостей, потому что вы не можете поймать декларативные включения, и в первую очередь это кажется более приятным решением. Я хотел бы добавить, что если кто-нибудь когда-нибудь попытается это сделать, не забудьте добавить элементы диспетчера в ваш фильтр xml в web.xml, например: ‹filter-mapping› ‹filter-name›DependencyFilter‹/filter-name› ‹url- pattern›*.jsp‹/url-pattern› ‹dispatcher›REQUEST‹/dispatcher› ‹dispatcher›INCLUDE‹/dispatcher› ‹dispatcher›ERROR‹/dispatcher› ‹dispatcher›FORWARD‹/dispatcher› ‹/filter-mapping› - person Benjamin; 08.07.2009