Существует ли фильтр Java EE для переноса и изменения ответов? - PullRequest
0 голосов
/ 05 марта 2012

Я хочу обернуть и изменить ответ на HTTP-запрос к моему приложению Java EE / tomcat. То есть у меня есть ряд действий в Struts 2, которые генерируют результаты, и я хотел бы добавить к ним внешний интерфейс, который модифицирует ответ для таких вещей, как скрытие ссылок и т. Д. Изменение каждого из источников исключено. из-за их большого количества и разнообразия.

Я знаю, что могу написать фильтр сервлетов, который делает то, что я хочу, но я бы хотел использовать стандартное, хорошо протестированное решение, а не заново изобретать колесо. Я искал один, и в документах Java EE есть места, описывающие такого зверя, но я не смог найти тот, который мог бы загрузить.

Редактировать : Есть комментарии, что это ужасная идея. Я открыт для предложений относительно лучшего. Ситуация такова, что у меня есть большое количество действий, написанных в течение длительного периода времени, и есть различные системные модификации, которые я хотел бы сделать для их вывода. Я не хочу изменять все действия, потому что это нарушает СУХОЙ (и это будет тонна работы). Мне кажется, что это именно то, для чего созданы фильтры - по сути, AOP для HTTP-ответов. Я не так думаю?

Редактировать # 2 : Что касается значимости изменений, сказать сложно. Как правило, это не имеет значения в смысле добавления большого количества нового контента на страницу. Это скорее сканирование ответа и внесение сравнительно небольших изменений: например, добавление классов в ссылки при определенных условиях, добавление небольших фрагментов кода в различные места на странице или (в крайнем случае) отсечение элемента div, который не должен отображаться. Пользователь. Я бы сказал, что самая большая проблема заключается в том, что система состоит из приблизительно 4000 уникальных страниц, каждая из которых создается отдельным действием и / или просмотром с использованием нескольких различных технологий. Можно сказать, что эта структура системы воняет, но это реальность жизни, работающей над очень большим 15-летним программным обеспечением. Моя другая идея состоит в том, чтобы реализовать только фильтр для сканирования и внести изменения в javascript. Это не помогает в ситуации, которая действительно связана с безопасностью (то есть не хочу, чтобы пользователь даже видел контент), но это может помочь в ряде других случаев, которые делаются в первую очередь для удобства пользователя. Спасибо всем за обсуждение, пожалуйста, продолжайте.

Ответы [ 3 ]

1 голос
/ 18 марта 2012

Если ваши изменения могут быть классифицированы, я рекомендую использовать jQuery.Все, что вам нужно сделать, это добавить jQuery на свою страницу, выбрать теги в соответствии с вашими условиями, а затем применить к ним то, что вам нужно.

Если у вас есть менеджер макетов (я полагаю, у вас должен быть SiteMesh илиTiles, если это приложение Struts 2), вы можете просто добавить то, что вам нужно, в свои шаблоны макетов, и все будет хорошо.


Другое решение, которое приходит мне в голову, применимо, если вы использовалисогласованные библиотеки тегов внутри вашего проекта.Например, если вы использовали тег <xyz:myLink/> для всего своего проекта (даже если это стандартные теги Strtus2 или ....), вы можете просто повторно реализовать теги и назначить их старым именам в файлах TLD.

Я полагаю, что комбинация моего предыдущего решения (jQuery) и этого решения (переопределение тегов) могла бы вам сильно помочь, и это было бы намного проще и эффективнее, чем анализ результата DOM и повторное его воссоздание.


И еще одно решение, если ваши страницы результатов - XHTML (правильно сформированный XML), вы можете использовать преобразователь XSLT для преобразования вашего XHTML в другой XHTML.

1 голос
/ 05 марта 2012

Звучит как ужасная идея, но взгляните на фильтр urlrewrite http://www.tuckey.org/urlrewrite/, который позволяет вам делать практически все, что вы захотите.Вы также можете посмотреть на http://www.sitemesh.org/

0 голосов
/ 06 марта 2012

У вас сложная система обслуживания. Пришло время укрепиться и начать решать проблему как можно лучше с самого начала. Выясните архитектуру, которую вы хотели бы иметь, а затем начните медленно двигаться к этому. Попытка исправить ситуацию с помощью фильтра сверху ухудшает удобство обслуживания и увеличивает стоимость вашей организации.

...