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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring MVC. Friendly url. 
:(
    Опции темы
garbuz
Дата 5.6.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день.
Создаю новую тему  smile
Хочу спросить об опыте создания и использования спринговых веб приложений с использованием чпу.
Например есть у меня список категорий, хочу иметь урл вида myhost.com/blog/category/java для категории "java", урл для создания категории типа myhost.com/blog/category/create, для редактирования myhost.com/blog/category/edit/java Ну вот как-то так.
Что для этого нужно? Просто грамотный URL-mapping? Или еще что-то требуется. Каким про этом дожен быть контроллер? Как должен обрабатывать урлы и действовать в дальнейшем?

Добавлено через 1 минуту и 36 секунд
Перенесите пожалуйста в java EE.
PM MAIL   Вверх
AntonSaburov
Дата 5.6.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



В твоем варианте - да, нужен нормальный url-mapping.

Есть еще вариант разбираться в контроллере по какому-нибудь параметру и вызывать что-то соотвествующее.
PM MAIL WWW ICQ   Вверх
garbuz
Дата 15.6.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Появилось немного свободного времени. Едем дальше smile
С красивыми урлами вот что вышло. (точнее пока ничего не вышло)
Маппинг переписал, вот что есть
Код

 <bean name="homePage" class="ru.blog.web.controllers.HomePageController">
        <property name="daoFacade" ref="daoFacade"/>
    </bean>

    <bean name="showPost" class="ru.blog.web.controllers.ShowPostController">
        <property name="daoFacade" ref="daoFacade"/>
         <property name="formView" value="post"/>
        <property name="successView" value="post"/>
         <property name="validator">
            <bean class="ru.blog.web.validators.CommentValidator"/>
        </property>
    </bean>

  
    <bean name="createPost" class="ru.blog.web.controllers.CreatePostController">
        <property name="daoFacade" ref="daoFacade"/>
        <property name="formView" value="newPost"/>
        <property name="successView" value="home"/>
        <property name="validator">
            <bean class="ru.blog.web.validators.PostValidator"/>
        </property>
      </bean>


 <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/home">homePage</prop>
                <prop key="/post/show">showPost</prop>
                <prop key="/post/create">createPost</prop>
                
            </props>
        </property>
    </bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value=""></property>
        <property name="suffix" value=".jsp"></property>
    </bean>


Но что-то даже главная страница не грузится. В web.xml
Код

 <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
...
<welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>


Сам index.jsp
Код

<%@ include file="include.jsp" %>
<c:redirect url="/home"/>


Вот что пишет спринг
Код

15.06.2009 22:56:51 org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/blog/] in DispatcherServlet with name 'dispatcher'

Если руками в строку браузера дописать home или же запустить сразу с /home, то контроллер отрабатывает, выбирает данные, это видно по консоли, но 
Код

15.06.2009 22:57:43 org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/blog/home.jsp] in DispatcherServlet with name 'dispatcher'
и ошибка 404

PM MAIL   Вверх
NeoNYura
Дата 15.6.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



могу ошибаться, со спрингом мало работал но.

Код

15.06.2009 22:57:43 org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/blog/home.jsp] in DispatcherServlet with name 'dispatcher'


У тебя нету маппинга, по урлу которому ты обращаешься

у тебя ****-servlet.xml должна быть разводка на контроллеры springa, например:

Код


 <bean name="/blog/login.html" class="ru.test.test.client.LoginController"/>





Ой не заметил SimpleUrlHandlerMapping
Но в мапе у тебя только

Код

                <prop key="/home">homePage</prop>
                <prop key="/post/show">showPost</prop>
                <prop key="/post/create">createPost</prop>


а обращаешься по урлу ты к  /blog/

Это сообщение отредактировал(а) NeoNYura - 15.6.2009, 23:12
PM MAIL   Вверх
garbuz
Дата 15.6.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



NeoNYura, это потому, что тут не срабатывает редирект

Цитата(garbuz @  15.6.2009,  22:35 Найти цитируемый пост)
<%@ include file="include.jsp" %>
<c:redirect url="/home"/>


Если руками дописать /home или же сразу запуститься с /home, то... выше написано что происходит smile
PM MAIL   Вверх
Старовъръ
Дата 16.6.2009, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробуй 
Код
<prop key="/home*">homePage</prop>
.
PM MAIL WWW   Вверх
garbuz
Дата 16.6.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Старовъръ @  16.6.2009,  00:05 Найти цитируемый пост)
Попробуй 

Пробовал уже smile
Цитата

javax.servlet.ServletException: Circular view path [home.jsp]: already dispatched to this view path within the same request [/blog/home.jsp]. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
    org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:280)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:216)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:258)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1174)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:901)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:240)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:258)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1174)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:901)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)


PM MAIL   Вверх
Kangaroo
Дата 16.6.2009, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



garbuz, ну так ты Спрингу сказал все урлы через диспатчер пропускать (даже джсп страницы). Он в шоке.


На сколько я знаю  в Спринг МВС нет поддержки ЧПУ. Попробуй сделать с UrlRewriteFilter, небольшой пример - тут


--------------------
Lost....
PM MAIL MSN   Вверх
MisterCleric
Дата 16.6.2009, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



стоп. А почему действительно не сделать такой мепинг?
Код

 <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>



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


Опытный
**


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

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



Цитата(MisterCleric @  16.6.2009,  09:27 Найти цитируемый пост)
стоп. А почему действительно не сделать такой мепинг?

Такой не хочется smile

Цитата(Kangaroo @  16.6.2009,  01:34 Найти цитируемый пост)
garbuz, ну так ты Спрингу сказал все урлы через диспатчер пропускать (даже джсп страницы). Он в шоке.

А нет другого способа указать без всяких там .htm .html .do etc ?

Цитата(Kangaroo @  16.6.2009,  01:34 Найти цитируемый пост)

На сколько я знаю  в Спринг МВС нет поддержки ЧПУ. Попробуй сделать с UrlRewriteFilter, небольшой пример - тут 

Видел этот реврайтер, думал обойдусь без него. Ладно, спасибо, гляну smile
PM MAIL   Вверх
garbuz
Дата 16.6.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Господа, а если попробовать использовать аннотации? Типа
Код

@Controller
@RequestMapping("/home")
public class HomePageController {

    private DAOFacade daoFacade;

    public void setDaoFacade(DAOFacade daoFacade) {
        this.daoFacade = daoFacade;
    }
    
    @RequestMapping(method = RequestMethod.GET)
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
        List<Post> posts =  daoFacade.getPostDAO().getAll();
        List<Tag> tags = daoFacade.getTagDAO().getAll();
        List<Category> categories = daoFacade.getCategoryDAO().getAll();
        HashMap<String, Object> model = new HashMap<String, Object>();
        model.put("posts", posts);
        model.put("categories", categories);
        model.put("tags", tags);
        return new ModelAndView("home", model);
    }
}

Сейчас сам попробывать не могу, нету проекта по рукой. 
Если мы в web.xml укажем диспетчеру обрабатывать все урлы с .htm, а у контроллера явно укажем /home, то диспетчер схавает его?

PM MAIL   Вверх
Asal
Дата 23.6.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 7



Цитата(garbuz @  16.6.2009,  13:43 Найти цитируемый пост)
Если мы в web.xml укажем диспетчеру обрабатывать все урлы с .htm, а у контроллера явно укажем /home, то диспетчер схавает его?

насколько я помню - нет
пользуйте UrlRewrite - прост и удобен


--------------------
PM MAIL ICQ   Вверх
garbuz
Дата 23.6.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Asal @  23.6.2009,  17:41 Найти цитируемый пост)
насколько я помню - нет
пользуйте UrlRewrite - прост и удобен 

Спасибо, уже использую UrlRewrite.
В третьем спринге будет следующее http://blog.springsource.com/2009/03/08/re...n-spring-3-mvc/
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.1445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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