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


Автор: MakTpaxep 24.12.2012, 05:05
Всем привет!
Передо мной встала задача сделать простое приложение с использованием spring MVC и hibernate.
С этой темой ознакомился http://javatalks.ru/topics/13391. Всё получилось.
Далее делал по образу и подобию http://javatalks.ru/topics/14912.
Начались проблемы.
Постепенно пришло понимание, что не в гибернейте дело.
Решил отложить его пока в сторону и сделать правильный "Hello World!" с аннотациями.
Сейчас я создал новый проект и попытался заставить контроллер маппиться через аннотации.
Что-то не получается - по всем адресам "The requested resource () is not available."
Пробую:
http://localhost:8080/First/helloWorld
http://localhost:8080/First/
http://localhost:8080/First

web.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <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>
    
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    
    <welcome-file-list>
        <welcome-file>redirect.jsp</welcome-file>
    </welcome-file-list>
    
</web-app>


applicationContext.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: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:annotation-config/>
 
</beans>


dispatcher-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"
       xmlns:mvc="http://www.springframework.org/schema/tx"
       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
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
 
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
 
    <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="/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
 
    <mvc:annotation-driven/>
 
</beans>


helloWorld.jsp
Код

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>


HelloWorldController.java
@Controller
Код

public class HelloWorldController {
 
    @RequestMapping("/")
    public String foo() {
        return "redirect:/helloWorld";
    }
    
    @RequestMapping("/helloWorld")
    public ModelAndView helloWorld() {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("helloWorld");
        mav.addObject("message", "Hello World!");
        return mav;
    }
}



За компом уже 16 часов, в голове каша. Где начинал, туда считай и вернулся.
Укажите, пожалуйста, где тут косяк?

Автор: danilych 24.12.2012, 07:55
Косяк у тебя в конфигурации. Обратимся к документации по http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-servlet. Upon initialization of a DispatcherServlet, Spring MVC looks for a file named [servlet-name]-servlet.xml in the WEB-INF. В твоем случае файл конфигурации должен называться вот так: dispatcher-servlet.xml, у тебя он называется dispatcherServlet.xml. Если хочешь использовать другое имя, то конфигурация Dispatcher сервлета должна выглядеть вот так
Код

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/dispatcherServlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

Автор: MakTpaxep 24.12.2012, 14:03
Ой, это я неправильно сюда имя файла написал. Исправил в посте

Автор: MakTpaxep 24.12.2012, 15:10
Всё, проблема решена! 
Строчка
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
в dispatcher-servlet.xml
Как я понял серваку не понравилось, что для этого бина не было маппинга.

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