Idea启动Tomcat后访问localhost:8080报404:DispatcherServlet noHandlerFound错误

将springmvc项目配置好,启动的时候,前台访问页面报404,后台出现一个警告:
在这里插入图片描述
后在网上查阅大量资料,并没有解决问题,困扰了我很长时间,后来重新创建一个项目并启动测试,访问成功,然后发现,原来是因为没有编译 class 导致,对比编译前后的out目录:
未编译:
在这里插入图片描述
编译后:
在这里插入图片描述
现将此问题可能出现的原因做一个整理,记录一下:

  1. 检查 web.xml 配置文件

检查 servlet-mapping 中的路径是否正确

<servlet-mapping>
	<servlet-name>dispatcherServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

此处的 url-pattern 应该是 /,不能是 /*,不然也是 404,两者区别

  1. 是否开启注解扫描
    需要在 applicationContext.xml 中开启注解扫描,否则 spring 识别不了 @Control、@Service、@RequestMapping 等注解,访问也是404
<context:component-scan base-package="com.test.control"/>
  1. applicationContext.xml 配置文件中添加:
<mvc:default-servlet-handler/>

此标签作用:

它会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:

<mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />
  1. 是否开启注解驱动
<mvc:annotation-driven/>

此标签作用:

主要是注册了 RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter bean,存储了请求url到Controller方法的映射关系

  1. 项目 class 是否进行了编译
  2. 项目访问路径是否正确
  3. 新增的 jar 包是否加入到了项目中
    在这里插入图片描述

版权声明:本文为qq_42177284原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。