2012-11-14 39 views
7

Tôi đã xóa google, stackoverflow và mọi diễn đàn mà tôi có thể xem trong vài ngày và bàn phím của tôi có nguy cơ là mục tiêu của headbutt.Mùa xuân không có XML 3.1 Không tìm thấy bản đồ nào cho yêu cầu HTTP

Tôi đang chạy một phiên bản Spring 3.1 MVC rất nhỏ với cài đặt không có XML. Vấn đề là khi tôi bắt đầu nó tôi thấy;

INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/start.action],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.xxxxxx.info.HomeController.start(javax.servlet.http.HttpServletRequest) 
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/*],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.xxxxxx.info.HomeController.home(java.util.Locale,org.springframework.ui.Model) 

Tuy nhiên, khi cố gắng nhấn một trong các URL này, tôi thấy các câu lệnh ghi nhật ký bên trong bộ điều khiển của tôi và sau đó ngay lập tức nhận được;

INFO : com.xxxxxx.info.HomeController - Welcome home! the client locale is en_US 
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/WEB-INF/jsps/home.jsp] in DispatcherServlet with name 'dispatcher' 

Đây là các tệp nguồn của tôi.

Initializer -

public class Initializer implements WebApplicationInitializer { 

    public void onStartup(ServletContext servletContext) throws ServletException { 
     AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext(); 
     mvcContext.register(MvcConfig.class); 

     ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(mvcContext)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("/*"); 
    } 
} 

MvcConfig -

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = "com.xxxxxx.info")  
public class MvcConfig { 
    @Bean 
    public InternalResourceViewResolver configureInternalResourceViewResolver() { 
     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/WEB-INF/jsps/"); 
     resolver.setSuffix(".jsp"); 
     return resolver; 
    } 
} 

Controller -

@Controller 
public class HomeController { 

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class); 

    /** Simply selects the home view to render by returning its name. */ 
    @RequestMapping(value = "/*") 
    public ModelAndView home(Locale locale, Model model) { 
     logger.info("Welcome home! the client locale is " + locale.toString()); 

     Date date = new Date(); 
     DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); 
     String formattedDate = dateFormat.format(date); 

     model.addAttribute("serverTime", formattedDate); 
     return new ModelAndView("home", model.asMap()); 
    } 

    @RequestMapping(value = "/start.action") 
    public ModelAndView start(HttpServletRequest request) { 
     logger.info("Starting!"); 
     return new ModelAndView("start", null); 
    } 
} 

Thay đổi bản đồ điều phối để "/" như nhiều bài viết tôi thấy đề nghị dường như để phá vỡ nó hoàn toàn . Nếu tôi khởi động lại máy chủ với "/" sau đó không có gì được báo cáo bởi Spring, không có gì được ánh xạ, chỉ cần một nhật ký khởi động tomcat và không có gì khác hoạt động.

cấu trúc tập tin của tôi là -

| com.xxxxxx.info 
    - Initializer.java 
    - MvcConfig.java 
    - HomeController.java 
| src 
    | main 
     | webapp 
      | WEB-INF 
       | jsps 
        - home.jsp 
        - start.jsp 

Vì vậy, nó dường như nhấn điều khiển của tôi một cách chính xác nhưng khi nó được tên xem nó không giải quyết được đến đúng nơi. Tôi đang thiếu gì ở đây, điều này có vẻ như một cái gì đó đơn giản, tôi đã bỏ qua ...

Trả lời

3

Tôi đoán rằng jsp đang được đưa ra bởi các DispatcherServlet, nó được thảo luận trong similar question

Bạn nên xem xét sử dụng một cụ thể hơn ánh xạ cả trong số HomeController và trong số WebApplicationInitializer.

+0

@Sarophym nó không rõ ràng những gì có thể đi sai với/ánh xạ cho servlet dispatcher, trước tiên bạn nên kiểm tra xem ánh xạ điều khiển có hoạt động với các yêu cầu không phải root như 'hello.html' hay không. –

+0

Cảm ơn nhiều về liên kết. Giải pháp đã chết. Tôi đã thay đổi mã điều phối của mình thành 'dispatcher.addMapping (" *. Action ");' – Sarophym

3

Bạn đang cử \* cho cả DispatcherServlet cũng như bạn HomeController

dispatcher.addMapping("/*"); 

@RequestMapping(value = "/*") 
    public ModelAndView home(Locale locale, Model model) 

Và tôi nghĩ rằng đó là gây ra vấn đề. Thay đổi ánh xạ điều khiển của bạn thành một cái gì đó như

@RequestMapping(value = "/home") 
    public ModelAndView home(Locale locale, Model model) 

Hy vọng điều đó sẽ hữu ích.

+1

Điều này không khắc phục được nhưng tôi nghĩ bạn đã gặp vấn đề đúng, hóa ra việc thay đổi ánh xạ điều phối đã khắc phục được sự cố. – Sarophym

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