SpringMVC错误:org.springframework.web.servlet.DispatcherServlet noHandlerFound

在做关于SpringMVC的相关操作时经常会出现这个错误,下面的原因会导致这个错误

org.springframework.web.servlet.DispatcherServlet noHandlerFound
警告: No mapping found for HTTP request with URI [/myspring/WEB-INF/jsp/hello.jsp] in DispatcherServlet with name 'springDispatcherServlet'

原因一:在 web.xml 中对 springDispatcherServlet 的配置出错

  
    springDispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:springmvc.xml
    
    1
  
  
    springDispatcherServlet
    /
  

 注意如果  / 中的 / 写成了 /* 会出错
原因:
/  会匹配到/login这样的路径型url,不会匹配到模式为 /*.jsp这样的后缀型url


< url-pattern>/* 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等),无论有多少层目录都一样会被匹配到 如 :/view/*jsp 这种也会被匹配到。

采用 /*  你会发现就是直接访问 jsp 页面也会出现这个错误,因为这个访问请求也会被这个Servlet拦截,然后请求的 URI 匹配不到 Http request 中的 URI, 因为 Http request 中不存在这个 URI。

 

原因二:Handler 类没有加上 @Controller 注解
       若 Handler 类没有加上 @Controller 注解,处理器将不会扫描到该类是否使用了 @RequestMapping 注解。

 

原因三:可能只是 @RequestMapping 的值跟页面的请求值不一致
       如:有个@RequestMapping("/test")  页面跳转 Test 会出错    应为  Test  

 

原因四:访问静态资源时,也会出现这个错

        SpringMVC 会将这些访问静态资源的请求也当成一个普通请求处理,然后这个请求会被 DispatcherServlet 拦截器拦截,因找不到对应处理器将导致错误。
        解决办法一:
        在 SpringMVC 的配置文件上加 


        解决方法二:
        在 SpringMVC 的配置文件中配置
        注意方法一、二都还需要加上这个标签:,不然之前可以的普通请求会失效。
        的处理原理:

        将在 SpringMVC 上下文中定义一个 DefaultServletHttpRequestHandler,它会对进入 DispatcherServlet 的请求进行筛查,如果发现是没有经过映射的请求,就将该请求交由 WEB 应用服务器默认的 Servlet 处理,如果不是静态资源的请求,才由 DispatcherServlet 继续处理
       一般 WEB 应用服务器默认的 Servlet 的名称都是 default。若所使用的 WEB 服务器的默认 Servlet 名称不是 default,则需要通过 default-servlet-name 属性显式指定
       查看默认的 Servlet 的名称可以到 Tomcat\apache-tomcat-8.5.24\conf\web.xml 文件下查看 DefaultServlet 的配置名称。

 

你可能感兴趣的:(SpringMVC)