2012-11-14 34 views
7

मैंने Google, stackoverflow scoured किया है, और हर फोरम मैं कुछ दिनों के लिए देख सकता हूं और मेरे कीबोर्ड को हेडबूट का लक्ष्य होने का गंभीर खतरा है।एक्सएमएल मुक्त स्प्रिंग 3.1 HTTP अनुरोध के लिए कोई मैपिंग नहीं मिली

मैं एक एक्सएमएल मुक्त सेटअप के साथ एक बहुत छोटा वसंत 3.1 एमवीसी चला रहा हूं। समस्या यह है कि जब मैं इसे शुरू करता हूं तो मैं देखता हूं;

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) 

फिर भी जब मैं उन यूआरएल में से किसी एक को मारने का प्रयास करता हूं तो मैं अपने नियंत्रक आग के अंदर अपने लॉगिंग स्टेटमेंट देखता हूं और फिर तुरंत मिलता हूं;

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' 

यहां मेरी स्रोत फ़ाइलें हैं।

प्रारंभकर्ता -

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 
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); 
    } 
} 

डिस्पैचर मानचित्रण बदलने के लिए "/" के रूप में कई पदों मैं सुझाव पाया यह पूरी तरह से तोड़ने के लिए लग रहे हैं । अगर मैं सर्वर को "/" से पुनरारंभ करता हूं तो वसंत द्वारा कुछ भी रिपोर्ट नहीं किया जाता है, कुछ भी मैप नहीं होता है, बस एक टॉमकैट स्टार्टअप लॉग और कुछ और काम नहीं करता है।

मेरे फ़ाइल संरचना है -

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

तो यह मेरी नियंत्रक सही ढंग से हिट करने के लिए प्रकट होता है लेकिन जब यह दृश्य का नाम हो जाता है यह सही जगह पर हल नहीं होती है। मैं यहाँ क्या याद आ रही है, यह कुछ सरल मैं अनदेखी की है की तरह लगता है ...

उत्तर

3

मुझे लगता है कि jsp DispatcherServlet द्वारा प्रदान की गई किया जा रहा है, यह similar question

में चर्चा की है आपको एक अधिक सटीक उपयोग करने पर विचार करना चाहिए HomeController और WebApplicationInitializer दोनों में मैपिंग्स।

+0

@ सरफिम यह स्पष्ट नहीं है कि प्रेषक सर्वलेट के लिए गलत/मैपिंग के साथ क्या गलत हो सकता है, आपको सबसे पहले यह जांचना चाहिए कि नियंत्रक मैपिंग गैर-रूट अनुरोधों जैसे 'hello.html' के लिए काम करता है। –

+0

लिंक के लिए बहुत बहुत धन्यवाद। समाधान पर मृत था। मैंने अपना प्रेषक कोड 'dispatcher.addMapping ("*। Action") में बदल दिया; ' – Sarophym

3

आप अपने HomeController

dispatcher.addMapping("/*"); 

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

के साथ ही दोनों DispatcherServlet को \* भेजने होते हैं और मैं यह है कि समस्या का कारण है लगता है।

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

कुछ ऐसा करने में मदद करता है कि आपके नियंत्रक मानचित्रण को बदलें।

+1

यह ठीक नहीं हुआ लेकिन मुझे लगता है कि आप सही समस्या पर थे, यह पता चला कि प्रेषक मैपिंग को बदलना इस मुद्दे को हल करता है। – Sarophym