2009-02-07 3 views
2

Я пытаюсь добавить URL-маршрутизацию в веб-приложение, работающее в Tomcat 5.5.URL-адрес маршрутизации и относительные ссылки в Tomcat 5.5

Я хочу, чтобы динамические URL-адреса страниц были более дружественными, меняя main.jsp?type=test&group=info на main/test/info, как и все ярость.

Я настроил следующее в web.xml

<servlet> 
    <servlet-name>main</servlet-name> 
    <jsp-file>/main.jsp</jsp-file> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>main</servlet-name> 
    <url-pattern>/main/*</url-pattern> 
    </servlet-mapping> 

и main.jsp я использую request.getPathInfo(), чтобы получить данные, которые мне нужно сделать маршрутизацию. Все это работает нормально, и когда я просматриваю http://mytestserver/example/main/test/info, я получаю html, который я ожидаю.

Проблема заключается в том, что все относительные ссылки на этой странице, изображения, стили, javascript и т. Д. Теперь все сломаны, поскольку они интерпретируются как относительно полного URL-адреса.

Я не могу придумать простой способ использования статических ссылок, потому что URL-адреса тестового сервера и производственного сервера находятся на разных уровнях: http://mytestserver/example/ отображает http://example.com/ на производстве, и я действительно не хочу писать код обернуть каждую внутреннюю ссылку на сайт или настроить виртуальный сервер для каждого сайта на тестовом сервере.

Есть ли что-нибудь еще, что я могу сделать?

+0

Я читал, что вы не хотите настраивать виртуальный сервер на тестовом сервере, но в долгосрочной перспективе это, вероятно, упрощает работу. И проблема в настройке минимальна. – Tiago

+0

Спасибо всем за ваш вклад. Я закончил писать фильтр, который обрабатывает ответы на страницы, изменяя URL-адреса на лету. Он отлично работает. –

ответ

3

У меня есть такая система на работе.

Мы используем пакет под названием urlrewrite, который в основном представляет собой перезаписывающий Tomcat Apache, выполненный как фильтр j2ee. Это круто, но я столкнулся с этой проблемой.

Чтобы исправить это, я написал еще один фильтр, который вставляется в цепочку фильтров до перезаписывающего устройства. Его задачей является захват pathinfo до того, как переписывает его перезаписывающий файл, и привязать эту информацию к атрибуту запроса. Он разрешает pathinfo запроса против pathinfo корня веб-приложения, чтобы выяснить, сколько «../» вам нужно получить в корневом веб-приложении (с точки зрения клиента).

Другие компоненты системы затем используют содержимое этого атрибута для построения своих относительных URL-адресов. Прекрасно работает.

The system is here.

Посмотрите на любой таксон (Macropodidae является прекрасным выбором). Все остальные поисковые ссылки превращаются в параметры reqest с помощью переназначения url.

напишите мне на работе - [email protected], если вы хотите получить какой-то источник. Это не секрет, но это работа, поэтому мне нужно разрешение.

1

Есть несколько подходов, которые можно использовать, которые могут сделать вашу жизнь проще:

  1. Поместите base элемент в голове вашего документа. Если вы добавите тег <base href="http://myserver/example/main"/>, то <a href="test/info">Hi!</a> будет ссылаться на http://myserver/example/main/test/info.
  2. Создайте тэг jsp (или функцию), который будет генерировать абсолютные URL-адреса для вас, так что примерно так: <myserver:a href="test/info">This is a link</myserver:a> И тогда у вас может быть логика в этом теге для создания абсолютного URL-адреса. Большинство фреймворков приложений, таких как распорки и пружина, уже имеют такие теги.

 Смежные вопросы

  • Нет связанных вопросов^_^