Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Проблема с HelloWorld на Spring MVC (annotation)


Автор: MrNoob 16.11.2009, 20:25
Здравствуйте!
Начинаю изучать Spring. Вот накидал простой пример, но он почему то не работает.

web.xml
Код

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">

  <servlet>
    <servlet-name>my</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

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

</web-app>


my-servlet.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
         http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="controller"/>
    
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix">
            <value>/WEB-INF/views/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>    

</beans>


HelloWorldController.java
Код

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloWorldController{
    
    @RequestMapping("/helloWorld")
    public ModelAndView hello() {
        ModelAndView mav = new ModelAndView("hello");
        return mav;
    }
    
}


при переходе на /helloWorld выскакивает 404 ошибка:
Код

HTTP Status 404 -
type Status report
message
description The requested resource () is not available.
Apache Tomcat/6.0.18


в папке WEB-INF\views\ лежит hello.jsp

mav.getView() возвращает null

Помогите, пожалуйста, разобраться.

Автор: MisterCleric 16.11.2009, 21:43
привет. А точно jsp там лежит? посмотри содержимое варника

Автор: MrNoob 16.11.2009, 23:10
да вроде лежит...
вот структура каталога:
  • WEB-INF
    • classes
      • controller
        • HelloWorldController.class
    • views
      • hello.jsp
    • my-servlet.xml
    • web.xml

Автор: MrNoob 17.11.2009, 11:19
изменил в web.xml:
<url-pattern>*.html</url-pattern>

и в HelloWorldController.java:
@RequestMapping("/helloWorld.html")

теперь при переходе на /helloWorld.html все работает... а как организовать маппинг, чтобы по переходу на /helloWorld работало?

Автор: garbuz 17.11.2009, 13:03
Цитата(MrNoob @  17.11.2009,  11:19 Найти цитируемый пост)
теперь при переходе на /helloWorld.html все работает... а как организовать маппинг, чтобы по переходу на /helloWorld работало?

Если спринг второй, то не получится. Тоже в свое время натыкался на эти грабли, тут поможет http://tuckey.org/urlrewrite/. В третьем спринге вроде есть что-то из коробки на эту тему.

Автор: Juggernaut 17.11.2009, 13:18
Попробуй:
<servlet-mapping>
    <servlet-name>my</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
Такой маппинг будет по маппингом по умолчанию, т.е. будет перехватывать все запросы, что и нужно. 

@RequestMapping("/helloWorld") - должно заработать


Автор: MrNoob 17.11.2009, 18:10
Вау!

Juggernaut, спасибо большое! Помогло.

Всем спасибо за помощь.

Автор: Juggernaut 18.11.2009, 09:39
MrNoob

You are welcome!!

Изначально был неправильно записан шаблон url-pattern, из-за чего не вызывался DispatcherServlet, запускающий всю работу SpringMVC.

http://www2.roguewave.com/support/docs/leif/leif/html/bobcatug/7-3.html можно почитать про формат url-pattern. На буржуйском, но вполне доступно.

Автор: MrNoob 18.11.2009, 16:49
 smile полезно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)