2013-09-30 10 views
6

Mam problem z zaimplementowaniem bardzo prostej strony przy użyciu polecenia spring mvc 3.2.4.RELEASE.Spring DispatcherServlet: Nie znaleziono mapowania dla żądania HTTP

Mój kontroler wygląda następująco:

@Transactional 
@Controller 
public class MembersDetailsController { 
    @Autowired 
    private MemberService memberService; 

    @RequestMapping(value = "/member/{name}", method = RequestMethod.GET) 
    public String displayMember(@PathVariable String name) { 
     System.out.println(name); 
     return "member"; 
    } 

    @RequestMapping(value = "/member", method = RequestMethod.GET) 
    public String displayMember() { 
     System.out.println("Empty"); 
     return "member"; 
    } 
} 

Kiedy zadzwonić

http://127.0.0.1:8080/member 

dana metoda jest realizowane zgodnie z potrzebami. Jednak wenn Wzywam

http://127.0.0.1:8080/member/test 

lub

http://127.0.0.1:8080/member/test/ 

dostaję 404 z dziennika wyjścia:

WARN org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/member/test] in DispatcherServlet with name 'mvc-dispatcher' 

Co naprawdę weired jest poprzedni dziennik pisze:

INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/member/{name}],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String 
INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/member],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String 

Co oznacza, że ​​mapowanie powinno być poprawne, o ile rozumiem to.

To mój web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> 

<web-app> 
    <display-name>Mitgliederdatenbank</display-name> 

    <!--Configuration--> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring-security.xml, /WEB-INF/applicationContext.xml</param-value> 
    </context-param> 

    <filter> 
     <filter-name>hibernateFilter</filter-name> 
     <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> 
     <init-param> 
      <param-name>sessionFactoryBeanName</param-name> 
      <param-value>hibernateSessionFactory</param-value> 
     </init-param> 
    </filter> 

    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 

    <!--Spring Security Filter--> 
    <filter-mapping> 
     <filter-name>hibernateFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

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

    <!--Context Loader--> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- Servlets --> 
    <servlet> 
     <servlet-name>springGwtRemoteServiceServlet</servlet-name> 
     <servlet-class>org.spring4gwt.server.SpringGwtRemoteServiceServlet</servlet-class> 
    </servlet> 

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


    <!-- Mapping --> 
    <servlet-mapping> 
     <servlet-name>springGwtRemoteServiceServlet</servlet-name> 
     <url-pattern>/ui/springGwtServices/*</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/welcome</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/login</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/logout</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/loginfailed</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/member/*</url-pattern> 
    </servlet-mapping> 

    <!-- Default page to serve --> 
    <welcome-file-list> 
    <welcome-file>/login</welcome-file> 
    </welcome-file-list> 

</web-app> 

Czy ktoś proszę mi dać wskazówkę co poszło źle tutaj?

+0

Czy to działa, jeśli usuniesz adnotację '@ Transactional'? –

+0

Czy inne kontrolery działają normalnie lub czy jest to jedyny kontroler w Twojej aplikacji? Dołączony dziennik mapowania jest przycinany w dół? Zwykle wyświetla (przynajmniej w Spring 3.1) klasę kontrolera, do której również została zmapowana. –

+0

Pokaż swój web.xml i ścieżkę kontekstu. –

Odpowiedz

7

Uważam, że problem jest taki sam jak opisany tutaj URL Mapping issue - Spring web MVC.

O ile nie użyjesz opcji alwaysUseFullPath spring mvc zostanie dopasowana * część do określonego przez ciebie odwzorowania (np./Member/member/test). Zobacz dokument dla alwaysUseFullPath tutaj (sekcja 17.4) http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html.

Niestety, ta właściwość nie jest widoczna poprzez element konfiguracji XML (jeśli korzystasz z konfiguracji xml), więc jeśli chcesz, aby twoje odwzorowania działały tak, jak opisałeś w pytaniu, musisz je skonfigurować jak opisano tutaj: http://blog.sarathonline.com/2013/07/enable-alwaysusefullpath-with.html

0

miałem do czynienia z tym samym problemem i rozwiązać problem za pomocą

<mvc:annotation-driven/> 

ten tag będzie skonfigurować dwa fasola DefaultAnnotationHandlerMapping i AnnotationMethodHandlerAdapter.

Dodałem również znacznik do pliku konfiguracyjnego serwletu wysyłającego.

Powiązane problemy