Отображение контроллера MVC Spring 3.x и URI действия (/tag1/tag1/../tag1/action)

Всем привет и большое спасибо за помощь и извините за мой ржавый английский :). Я пытался создать веб-сайт mvc со страницами spring 3.x, spring-security и .jsp, я могу вставить сюда много кода, но я думаю, что это будет бесполезно, потому что это своего рода логическая проблема того, как URI действия и uri контроллера работает:

1) Jsp-страницы: логин: доступен для всех гостей и return homeAdmin для администраторов с действием "home" или
homeUser: для пользователей с действием
homeAdmin: предоставляет меню с различными действиями, сопоставленными с "admin / action"
HomeUser: предоставляет меню с различными действиями, сопоставленными с «пользователем / действием».
UserLIst: страница, на которой перечислены все пользователи и их информация в таблице

2) Контроллер: гостевой контроллер: нет контроллера класса, есть только два метода. Сначала для сопоставления value = {"/, home"}, а затем для "входа в систему". Таким образом, каждый, кто пытается выполнить запрос, будет перенаправлен на страницу входа в систему, чтобы иметь возможность войти в систему.

@Controller
   public class LoginController {

   @RequestMapping(value={"/home","/"}
   (code)//if admin homeAdmin else homeUser
   return new ModelAndView("home");

   @RequestMapping(value="/login", method = RequestMethod.GET)
   (code)
   return new ModelAndView("login");
....

Существует сопоставление запросов для класса со значением «/ admin /» для сопоставления первой части Uri-действия, а также существуют различные методы сопоставления запросов для определенного действия, например, список User. AdminController

@controller
@RequestMapping("/admin")
public class AdminController {

@RequestMapping(value={"/list", "/adminFilm"})
(code)
return new ModelAndView("adminFilm");
...

Теперь я вхожу в систему как администратор, и мой URL-адрес стал
"localhost:8080/name_project/homeAdmin.jsp"
который является URI, соответствующим URL-адресу
"/webapp/metainf/views/homeAdmin.jsp"
(сгенерирован методом InternalResuorceViewResolver на его xml-странице).
Нажатие кнопки «Список пользователей "Я выполняю действие =" admin / list ", теперь мой URI -
"localhost:8080/name_project/admin/listUser.jsp"
На этом этапе ни одно из моих действий не требует создания" admin / ", потому что оно уже есть на пути, но если попытаться logout (j_springsecurity_Logout) мой URL-адрес вверху стал с
"localhost:8080/name_project/admin/listUser",
до
"localhost:8080/name_project/admin/j_spring_Logout", поэтому я получаю (естественно) ошибку из-за того, что сопоставление не найдено.
Та же проблема появляется для запроса домашней страницы потому что он отображается в LoginController, а не в AdminController, поэтому, когда я запрашиваю его с любой страницы, имеющей путь «/ admin / home», он не обнаруживается и не может вызвать контроллер в loginController. Я мог бы решить эту проблему, задав пути к страницам jsp, но это плохое программирование (и генерирует ошибки). Как я могу решить эту проблему путей?

Если проблема непонятна, попробую переписать.

Спасибо.


person Lupo D. Ghiaccio    schedule 02.07.2013    source источник


Ответы (1)


Насколько я понимаю, текущий URL в адресной строке браузеров - localhost:8080/name_project/admin/listUser. Теперь вы нажимаете ссылку (или кнопку, не имеет значения) с URL-адресом j_springsecurity_Logout. Это относительно текущего пути, поэтому вы получите ожидаемое поведение: разрешенный URL - это localhost:8080/name_project/admin/j_spring_Logout.

Вам нужно, чтобы URL-адрес ссылки был относительно пути к приложению. Для этого <c:url />. Итак, в случае ссылки вместо

<a href="j_spring_Logout">

ты пишешь

<a href="<c:url value="j_spring_Logout" />">
person a better oliver    schedule 02.07.2013