2012-07-09 34 views
8

Đây có lẽ là câu hỏi thứ 100 về lỗi Spring MVC này, nhưng tôi không thể làm cho nó hoạt động được.Không tìm thấy bản đồ nào cho yêu cầu HTTP (Spring MVC)

Tôi đang cố gắng ánh xạ một phương thức điều khiển đơn giản đến/tài khoản và sau đó tôi muốn thêm/account/{id}, nhưng tôi thậm chí không thể nhận/tài khoản để hoạt động.

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

<?xml version="1.0" encoding="ISO-8859-1" ?> 

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

    <display-name>My Spring MVC web application</display-name> 

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

    <servlet> 
     <servlet-name>springDispatcherServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath:application-context.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

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

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:application-context.xml</param-value> 
    </context-param> 
</web-app> 

Nội dung của ứng dụng context.xml:

<mvc:annotation-driven /> 
<context:component-scan base-package="org.example" /> 

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

AccountController.java:

@Controller 
public class AccountController { 

    @RequestMapping(value="/account", method = RequestMethod.GET) 
    public ModelAndView showAccount() throws Exception { 
     ModelAndView mav = new ModelAndView(); 
     mav.setViewName("account"); 
     mav.addObject("someText", "Hello World!"); 
     return mav; 
    } 
} 

src/main/webapps/lượt xem/account.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

<h1>${someText}</h1> 

Khi tôi khởi động ứng dụng trong Tomcat, tôi thấy dòng sau xuất hiện trong nhật ký:

[localhost-startStop-1] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/account], methods=[GET], params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.example.springmvc.controller.AccountController.showAccount() throws java.lang.Exception 

Đối với tôi, điều đó cho thấy localhost url: 8080/tài khoản được ánh xạ đúng và ít nhất nên đưa ra một số đầu ra. Nhưng khi tôi truy cập localhost: 8080/tài khoản tôi nhận được lỗi 404 và nhật ký cho biết:

No mapping found for HTTP request with URI [/views/account.jsp] in DispatcherServlet with name 'springDispatcherServlet' 
No mapping found for HTTP request with URI [/favicon.ico] in DispatcherServlet with name 'springDispatcherServlet' 

Bạn sẽ được nhiều người đánh giá cao.

Trả lời

4

Không có gì sai với cấu hình Spring của bạn, nó trông giống như /account URI đang được xử lý một cách chính xác bằng cách điều khiển của bạn và nó đang trở lại quan điểm tên account chính xác, đang được giải quyết bởi InternalViewResolver của bạn dưới dạng đường dẫn đến /views/account.jsp>. Bây giờ vì một lý do nào đó, điều này là sai (vì /* ánh xạ cho Spring DispatcherServlet của bạn, giả thiết là Spring cũng có thể xử lý/views này, đây có thể là lý do tại sao bạn thấy lỗi cụ thể này). bạn có thể làm điều này, thay vì đặt các quan điểm trong /views thư mục, di chuyển nó đến /WEB-INF/views thư mục và thay đổi viewresolver của bạn để:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/views/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 
+0

Vẫn không may mắn tôi sợ. Tôi thấy một số dòng phụ trong nhật ký khi tôi khởi động ứng dụng. đường dẫn URL Mapped [/ tài khoản] vào handler đường dẫn URL Mapped 'accountController' [/account.*] vào handler 'accountController' Mapped đường dẫn URL [/ tài khoản /] vào handler 'accountController' Nhưng khi tôi đi đến/tài khoản trong trình duyệt web của tôi, tôi vẫn nhận được cùng một loại thông báo: Cảnh báo http-apr-8080-exec-3 org.springframework.web.servlet.PageNotFound - Không tìm thấy ánh xạ nào cho yêu cầu HTTP với URI [/ WEB- INF/views/account.jsp] trong DispatcherServlet với tên 'springDispatcherServlet' – Julius

+4

Tôi đã nhận nó hoạt động! Whoohoo! Cuối cùng. Tôi đã thay đổi trong web.xml từ/* sang /. Tôi không hoàn toàn hiểu TẠI SAO nó bây giờ hoạt động, byt ít nhất tôi hạnh phúc lập trình viên. – Julius

+0

Xin chào @Biju, bạn có thể vui lòng xem http://stackoverflow.com/questions/17697899/how-to-map-dynamic-url-http-127-0-0-18080-prj-noticeopen-2-in -spring-mvc-cont này có chút khác biệt nhưng lạ khi tôi không đạt đến điều khiển –

4

thử thêm đậu sau để ứng dụng context.xml

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> 
+0

tôi vẫn nhận được lỗi tương tự .... – Julius

+0

cố định lỗi của tôi, cảm ơn! –

Các vấn đề liên quan