java – 无XML的Spring 3.1没有找到HTTP请求的映射

前端之家收集整理的这篇文章主要介绍了java – 无XML的Spring 3.1没有找到HTTP请求的映射前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经搜索了谷歌,stackoverflow,以及我可以看几天的每个论坛,我的键盘很可能成为头部的目标.

我正在运行一个非常小的Spring 3.1 MVC,它具有无XML设置.问题是,当我启动它时,我看到了;

  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)
  2. INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/*],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.xxxxxx.info.HomeController.home(java.util.Locale,org.springframework.ui.Model)

然而,当我尝试点击这些URL中的任何一个时,我看到我的控制器内的日志语句会激活然后立即获取;

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

这是我的源文件.

初始化 –

  1. public class Initializer implements WebApplicationInitializer {
  2.  
  3. public void onStartup(ServletContext servletContext) throws ServletException {
  4. AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext();
  5. mvcContext.register(MvcConfig.class);
  6.  
  7. ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher",new DispatcherServlet(mvcContext));
  8. dispatcher.setLoadOnStartup(1);
  9. dispatcher.addMapping("/*");
  10. }
  11. }

MvcConfig –

  1. @Configuration
  2. @EnableWebMvc
  3. @ComponentScan(basePackages = "com.xxxxxx.info")
  4. public class MvcConfig {
  5. @Bean
  6. public InternalResourceViewResolver configureInternalResourceViewResolver() {
  7. InternalResourceViewResolver resolver = new InternalResourceViewResolver();
  8. resolver.setPrefix("/WEB-INF/jsps/");
  9. resolver.setSuffix(".jsp");
  10. return resolver;
  11. }
  12. }

控制器 –

  1. @Controller
  2. public class HomeController {
  3.  
  4. private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
  5.  
  6. /** Simply selects the home view to render by returning its name. */
  7. @RequestMapping(value = "/*")
  8. public ModelAndView home(Locale locale,Model model) {
  9. logger.info("Welcome home! the client locale is " + locale.toString());
  10.  
  11. Date date = new Date();
  12. DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,locale);
  13. String formattedDate = dateFormat.format(date);
  14.  
  15. model.addAttribute("serverTime",formattedDate);
  16. return new ModelAndView( "home",model.asMap() );
  17. }
  18.  
  19. @RequestMapping( value = "/start.action")
  20. public ModelAndView start(HttpServletRequest request) {
  21. logger.info("Starting!");
  22. return new ModelAndView( "start",null );
  23. }
  24. }

将调度程序映射更改为“/”我发现建议的帖子似乎完全打破了它.如果我用“/”重新启动服务器,那么Spring没有报告任何内容,没有任何内容被映射,只是一个tomcat启动日志,没有其他工作.

我的文件结构是 –

  1. | com.xxxxxx.info
  2. - Initializer.java
  3. - MvcConfig.java
  4. - HomeController.java
  5. | src
  6. | main
  7. | webapp
  8. | WEB-INF
  9. | jsps
  10. - home.jsp
  11. - start.jsp

因此它似乎正确地击中了我的控制器,但是当它获得视图名称时它没有解析到正确的位置.我在这里想念的是什么,这似乎是我忽略的简单……

解决方法

我猜这个jsp是由DispatcherServlet呈现的,它在 similar question中讨论过

您应该考虑在HomeController和WebApplicationInitializer中使用更具体的映射.

猜你在找的Java相关文章