URL-маршрутизация и относительные ссылки в Tomcat 5.5 - PullRequest
2 голосов
/ 07 февраля 2009

Я пытаюсь добавить 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/ в работе, и я действительно не хочу иметь написать код для переноса каждой внутренней ссылки на сайте или настроить виртуальный сервер для каждого сайта на тестовом сервере.

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

Ответы [ 2 ]

3 голосов
/ 07 февраля 2009

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

Мы используем пакет под названием urlrewrite , который по сути является переписчиком apache tomcat, созданным как фильтр j2ee. Это круто, но я столкнулся с этой же проблемой.

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

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

Система здесь.

Ищите любой таксон (MACROPODIDAE - хороший выбор). Все остальные ссылки на ссылки превращаются в параметры запроса с помощью преобразователя URL.

напишите мне на работе - Paul.Murray@environment.gov.au, если вам нужен какой-то источник. Это не секрет, но это работа, поэтому мне нужно разрешение.

1 голос
/ 07 февраля 2009

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

  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-адреса. В большинстве каркасов приложений, таких как Struts и Spring, такие теги уже определены.
...