Обработка ссылок на контекстный путь при переносе сайта “/” в Java EE packaging

StackOverflow https://stackoverflow.com/questions/142965

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

Ознакомьтесь с соответствующим вопрос

Также рассмотрите UrlRewriteFilter Фильтр UrlRewriteFilter

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

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

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

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

Другие советы

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

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

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

Таким образом, обойти это невозможно (если только вы не хотите использовать smart regex через out - что было опробовано, и оно работает просто отлично).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top