| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Spring MVC 2.5, не отрабатывает dispatch view name |
| Автор: UnicornMirage 27.8.2009, 23:03 | ||||||
| Привет. Использую Spring MVC 2.5 и annotation based controllers. Тоесть например есть некий контроллер, который маппится на некий url:
Соответственно в web.xml все такие контроллеры обрабатывает spring mvc servlet по такой маске:
Так вот, мне например не нравится маска *.do, и я хочу чтобы все мои контроллеры обрабатывались по маске * Если так сделаю:
То при GET запросе метод SomeController.getView вызовется нормально. Затем ViewResolver правильно припишет к имени вьюхи расширение jsp. Но вот потом request dispatcher эту somePage.jsp уже не находит. Вероятно почему не находит - потому что он опять пытается по маске * определить среди контроллеров нужный маппинг на запрос уже страницы somePage.jsp, а такого контроллера нет! Как быть? Как заставить, чтобы после отработки контроллера в этом случае нормально шел форвард на нужную jsp? В принципе наверное в моем случае это невозможно? Так как forward на jsp страницы также использует маппинг, описанный в web.xml? |
| Автор: MisterCleric 28.8.2009, 10:37 | ||||
| А почему, собственно, тебя не устраивает мэппинг с суфиксом? Поблема как раз и заключается в том, что диспатчер нужен для того, что бы определить, какой сервис вызывать. А какой сервис надо вызывать, если у тебя на вход пришел запрос почти на статику - jsp. А как должен себя повести этот диспатчер, если такое у тебя на странице:
Эти запросы ведь тоже соответствуют паттерну /* ты можешь разрулить например так:
Тогда тебе надо везде, где вызов твоих экшенов добавить этот префикс. Но тогда скажи мне, пожалуйста, в чем разница со способом по суфиксу? Можно еще попробовать через через принцип UrlRewrite: http://tuckey.org/urlrewrite/ И вот тоже нашел интересное решение http://www.carbonfive.com/community/archives/2007/06/parameterized_rest_urls_with_spring_mvc.html |
| Автор: UnicornMirage 28.8.2009, 10:50 |
| MisterCleric, спасибо за ответ! вобщем почему меня не устраивает маппинг с суффиксом - потому что хочу сделать friendly url, наподобие такого: вместо http://somehost.org/getUser.html?uid=12345 чтобы было http://somehost.org/user/12345 Поэтому придется использовать маппинг с префиксом. 1) в спринге 2.5 нет механизма REST Url, чтобы можно было написать в маппинге контроллеров: @RequestMapping(value= "/user/{userId}", этот механизм есть в spring 3.0, но он к сожалению пока еще не релиз. И его использовать нельзя. Поэтому пришлось самому написать аналог этого friendly url. 2) http://tuckey.org/urlrewrite/ - замечательный продукт! Но не могу использовать, потому что его нет в maven-репозиториях.. А наш проект имеет строгие ограничения на этот счет. Мы используем только то, что лежит в стандартных maven-репозиториях. Поэтому тащить в svn jar-библиотеки urlrewrite не имеет смысла. 3) насчет статических ресурсов js, css, images - то в будущем я бы их разнес на отдачу какому нибудь серверу hginx или apache. спасибо за интересную ссылку: http://www.carbonfive.com/community/archives/2007/06/parameterized_rest_urls_with_spring_mvc.html |
| Автор: MisterCleric 28.8.2009, 11:02 | ||
Это как раз и есть REST Url и разруливается оно через UrlRewrite. Spring3 не смотрел, пока не выйдет релиз. Но что-то такое видел в примерах - конфигурируется аннотацией на уровне метода контроллера Добавлено через 1 минуту и 15 секунд Да, и темы по friendly url здесь уже подымались. Посмотри, мож чем поможет |
| Автор: garbuz 28.8.2009, 13:45 |
| UnicornMirage, я наелся помню этих урлов. Средствами спринга 2.5 это не обойти, в третьем, как уже сказал MisterCleric, уже есть вроде такое. Домой приду, могу выложить небольшой пример с urlRewrite. Надо? |
| Автор: MisterCleric 28.8.2009, 13:50 | ||
Думаю, нормально будет, если прям сюда выложишь. Там достаточно всего лишь конфига этого urlRewrite и как Spring это разруливает |
| Автор: garbuz 29.8.2009, 21:18 | ||||||
Добавляем в web.xml
Пишем urlrewrite.xml, в нем правила для урлов, что-то типа того
А сами ссылки уже формируешь так
Короче как-то так |