Создание удобных URL-адресов для динамических ресурсов в struts2

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

  •  03-07-2019
  •  | 
  •  

Вопрос

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

department.action?id=2

и DepartmentAction загрузит Department с id = 2 для отображения.Все это прекрасно, если пользователь просто просматривает сайт, но становится неудобно, если я хочу предоставить ссылку, скажем, на Инженерный отдел в газетах.Ссылка должна быть www.myschooldomain.com/department.action?id=2.Я вижу в этом ряд проблем.

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

Я бы предпочел напечатать URL-адрес, подобный этому:www.myschooldomain.com/department/engineering и пусть это каким-то образом перейдет в department.action?id=2.

Мои мысли до сих пор:создайте действие, которое будет анализировать URL-адрес для названия отдела в конце, а затем искать его по названию.Возможно, я мог бы добавить поле friendlyurl в базу данных для каждого отдела.

Но вопрос в том,:Есть ли лучший способ сделать это в struts2?

Спасибо.

Обновление (май 2009): Я просто случайно наткнулся на этот вопрос и подумал, что хотел бы рассказать, что я сделал, чтобы решить его.

Я создал новый пакет в struts.xml называемых отделах.В этом пакете есть только одно действие, сопоставленное с *.Таким образом, он перехватывает все запросы на mydomain.com/departments/anything.html.

В классе action я просто анализирую URL-адрес и ищу часть между departments / и .html, и это название отдела, чтобы я мог выполнить поиск по нему в базе данных.Это работает нормально уже почти 5 месяцев, и я внедрил это для других областей сайта.

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

Решение

Обычно это делается путем сопоставления сервлета с, в вашем случае '/department', а затем с помощью путь информация (например, '/engineering') внутри сервлета для определения идентификатора.

Поскольку диспетчер Struts2 не реализует это поведение, возможно, было бы проще всего написать свой собственный сервлет.Этот сервлет был бы сконфигурирован с сопоставлением допустимых "дружественных" имен с недружественными числовыми идентификаторами.Это могло бы быть реальным Map или это можно было бы сделать с помощью метода поиска по базе данных.

В результате getPathInfo() будет использоваться для поиска идентификатора, и запрос будет перенаправленный в департамент.действие.Обращаться с null случае тоже, что означает, что пользователь пытается просмотреть /departments/ справочник.

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

Вы могли бы использовать Фильтр перезаписи URL-адресов

Это позволяет избежать необходимости в каком-либо дополнительном сервлете или Java-коде, но требует XML-дескрипторов.

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