2013-09-30 16 views
6

Tôi gặp sự cố khi triển khai một trang rất đơn giản bằng cách sử dụng mvc mùa xuân 3.2.4.RELEASE.Spring DispatcherServlet: Không tìm thấy bản đồ nào cho yêu cầu HTTP

điều khiển của tôi trông như thế này:

@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"; 
    } 
} 

Khi tôi gọi

http://127.0.0.1:8080/member 

phương pháp tương ứng đang được thực hiện như mong muốn. Tuy nhiên, wenn tôi gọi

http://127.0.0.1:8080/member/test 

hoặc

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

tôi nhận được một 404 với log-đầu ra:

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

Whats thực sự weired là một bản ghi trước đó nói:

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 

Điều này có nghĩa là ánh xạ phải là đúng như tôi hiểu điều này.

Đây là web.xml của tôi:

<?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> 

thể ai xin vui lòng cho tôi một gợi ý những gì đã xảy ra ở đây?

+0

Tính năng này có hoạt động nếu bạn xóa chú thích '@ Transactional' không? –

+0

Các trình điều khiển khác có hoạt động bình thường hay chỉ là bộ điều khiển này trong ứng dụng của bạn? Nhật ký ánh xạ mà bạn đã bao gồm, nó có được cắt bớt không? Nó thường hiển thị (ít nhất là trong Spring 3.1) Controller class nó cũng được ánh xạ tới. –

+0

Vui lòng hiển thị web.xml và đường dẫn ngữ cảnh của bạn. –

Trả lời

7

Tôi tin rằng sự cố là vấn đề tương tự như được mô tả ở đây URL Mapping issue - Spring web MVC.

Trừ khi bạn sử dụng luôn luônUseFullPath spring mvc sẽ khớp * phần với ánh xạ mà bạn đã chỉ định (ví dụ:/thành viên/thành viên/thử nghiệm). Xem tài liệu cho alwaysUseFullPath tại đây (mục 17.4) http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html. Tuy nhiên, rất tiếc, thuộc tính này không được hiển thị thông qua phần cấu hình xml (nếu bạn đang sử dụng cấu hình xml) vì vậy nếu bạn muốn ánh xạ của bạn hoạt động theo cách bạn đã phân loại trong câu hỏi, bạn cần phải định cấu hình nó như đã mô tả ở đây: http://blog.sarathonline.com/2013/07/enable-alwaysusefullpath-with.html

0

tôi đã phải đối mặt với cùng một vấn đề và giải quyết vấn đề bằng cách sử dụng

<mvc:annotation-driven/> 

thẻ này sẽ cấu hình hai đậu DefaultAnnotationHandlerMapping và AnnotationMethodHandlerAdapter.

Ngoài ra tôi đã thêm thẻ vào tệp cấu hình servlet của bộ điều phối của tôi.

<context:component-scan base-package="PATH WHERE FIND CONTROLLERS" /> 
Các vấn đề liên quan