Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring MVC 2.5, не отрабатывает dispatch view name 
:(
    Опции темы
UnicornMirage
Дата 27.8.2009, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: нет
Всего: 1



Привет.
Использую Spring MVC 2.5 и annotation based controllers.
Тоесть например есть некий контроллер, который маппится на некий url:

Код

@Controller
public class SomeController {

   @RequestMapping(value = "/someController.do")
   public ModelAndView getView() {
         return new ModelAndView("somePage");  // view resolver настроен так, что редиректится потом на /somePage.jsp
   }
}



Соответственно в web.xml все такие контроллеры обрабатывает spring mvc servlet по такой маске:

Код

<servlet-mapping>
   <servlet-name>springmvc</servlet-name>
   <url-pattern>*.do</url-pattern>
</servlet-mapping>


Так вот, мне например не нравится маска *.do, и я хочу чтобы все мои контроллеры обрабатывались по маске *
Если так сделаю:

Код

<servlet-mapping>
   <servlet-name>springmvc</servlet-name>
   <url-pattern>/*</url-pattern>
</servlet-mapping>



То при GET запросе метод SomeController.getView вызовется нормально. Затем ViewResolver правильно припишет к имени вьюхи расширение jsp. Но вот потом request dispatcher эту somePage.jsp уже не находит.

Вероятно почему не находит - потому что он опять пытается по маске * определить среди контроллеров нужный маппинг на запрос уже страницы somePage.jsp, а такого контроллера нет!

Как быть? Как заставить, чтобы после отработки контроллера в этом случае нормально шел форвард на нужную jsp?
В принципе наверное в моем случае это невозможно? Так как forward на jsp страницы также использует маппинг, описанный в web.xml?

Это сообщение отредактировал(а) UnicornMirage - 27.8.2009, 23:10
PM MAIL   Вверх
MisterCleric
Дата 28.8.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



А почему, собственно, тебя не устраивает мэппинг с суфиксом? 
Поблема как раз и заключается в том, что диспатчер нужен для того, что бы определить, какой сервис вызывать. А какой сервис надо вызывать, если у тебя на вход пришел запрос почти на статику - jsp.
А как должен себя повести этот диспатчер, если такое у тебя на странице:
Код

<link href='[path_to_css_file]' rel="stylesheet" type="text/css">
<script type="text/javascript" src="[path_to_js_file]"></script>
<img src="[path_to_img_file]">


Эти запросы ведь тоже соответствуют паттерну /*

ты можешь разрулить например так:

Код

<servlet-mapping>
   <servlet-name>springmvc</servlet-name>
   <url-pattern>/springmvc/*</url-pattern>
</servlet-mapping>


Тогда тебе надо везде, где вызов твоих экшенов добавить этот префикс. Но тогда скажи мне, пожалуйста, в чем разница со способом по суфиксу?

Можно еще попробовать через через принцип UrlRewrite:
UrlRewriteFilter
И вот тоже нашел интересное решение
http://www.carbonfive.com/community/archiv...spring_mvc.html



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
UnicornMirage
Дата 28.8.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: нет
Всего: 1



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/archiv...spring_mvc.html

Это сообщение отредактировал(а) UnicornMirage - 28.8.2009, 10:59
PM MAIL   Вверх
MisterCleric
Дата 28.8.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Цитата

чтобы было http://somehost.org/user/12345


Это как раз и есть REST Url и разруливается оно через UrlRewrite. Spring3 не смотрел, пока не выйдет релиз. Но что-то такое видел в примерах - конфигурируется аннотацией на уровне метода контроллера

Добавлено через 1 минуту и 15 секунд
Да, и темы по friendly url здесь уже подымались. Посмотри, мож чем поможет


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
garbuz
Дата 28.8.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



UnicornMirage, я наелся помню этих урлов. Средствами спринга 2.5 это не обойти, в третьем, как уже сказал 
MisterCleric, уже есть вроде такое. Домой приду, могу выложить небольшой пример с urlRewrite. Надо? 
PM MAIL   Вверх
MisterCleric
Дата 28.8.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Цитата

уже есть вроде такое. Домой приду, могу выложить небольшой пример с urlRewrite. Надо?  

Думаю, нормально будет, если прям сюда выложишь. Там достаточно всего лишь конфига этого urlRewrite и как Spring это разруливает


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
garbuz
Дата 29.8.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Добавляем в web.xml
Код

 <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
        <init-param>
        <param-name>logLevel</param-name>
        <param-value>DEBUG</param-value>
        </init-param>

    </filter>

 <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


Пишем urlrewrite.xml, в нем правила для урлов, что-то типа того
Код

<rule>
       <from>.*/tag/([A-Za-zА-Яа-я\d]+)/$</from>
       <to>/showTag.htm?tagName=$1</to>
   </rule>

  

    <rule>
        <from>/category/all/</from>
        <to>/showAllCategories.htm</to>
    </rule>

    <rule>
        <from>.*/category/([\w\d]*)/$</from>
        <to>/showCategory.htm?categoryName=$1</to>
    </rule>


А сами ссылки уже формируешь так
Код

<a href="<c:url value="/tag/${tag.tagName}/"/>"><c:out value="${tag.tagName}"/></a><br>
<a href="<c:url value="/category/all/"/>">Все категории</a>


Короче как-то так smile

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0957 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.