Обработка ссылок на контекстные пути при переносе сайта "/" в упаковку Java EE - PullRequest
1 голос
/ 27 сентября 2008

Существующий сайт Java спроектирован для работы в tomcat под "/", и есть много конкретных ссылок на фиксированные абсолютные пути, такие как "/dir/dir/page".

Хотите перенести это в пакет Java EE, где сайт должен будет работать в корне контекста, например "/ dir / dir / page" становится "/ my-context-root / dir / dir / page"

Теперь, контекст-корень может быть легко с ServletRequest.getContextPath (), но это все еще означает, что много изменений кода для миграции большой базы кода. Большинство из этих ссылок в буквальном HTML.

Я экспериментировал с использованием фильтров сервлетов для переписывания исходящего HTML, и это, кажется, работает нормально. Но это вносит некоторые накладные расходы, и я не считаю это постоянным решением. (см. EnforceContextRootFilter-1.0-src.zip для подхода фильтра сервлета).

Есть ли лучшие подходы к решению этой проблемы? Что-нибудь очевидное, что я скучаю? Все комментарии приветствуются!

Ответы [ 2 ]

1 голос
/ 27 сентября 2008

Проверьте связанный вопрос

Также рассмотрим URLRewriteFilter

Другое дело (я продолжаю редактировать эту чертову запись). Если вы используете JSP (в отличие от статического HTML или чего-то еще), вы также можете создать файл тегов, чтобы заменить общие HTML-теги ссылками (в частности, в форме img, форме). Таким образом, ссылка может стать ссылкой </ t: a>. Тогда тег может сделать перевод для вас.

Это изменение может быть легко сделано "массово", используя что-то вроде sed.

sed -e 's/<a/<t:a/g' -e 's/<\/a>/<\/t:a>/g' old/x.jsp > new/x.jsp

Действия с формой могут быть немного сложнее, чем sed, но вы поняли.

0 голосов
/ 27 сентября 2008

мир Apache использовал Redirects (mod_rewrite), чтобы сделать то же самое.

Мир сервлетов начал использовать фильтры

Рубиновый мир (или RoR) делает больше того же, и они называют это маршрутизацией.

Итак, обойти это невозможно (если только вы не хотите использовать интеллектуальное регулярное выражение - что было опробовано и работает просто отлично).

...