Netbeans+Tomcat环境下SpringBoot RestController访问报404错误
问题根因
这根本不是上下文路径配置的问题,核心错误是创建项目时选错了模板:你建的是Netbeans默认的传统Spring MVC Java Web项目,不是SpringBoot项目。
你现在能正常访问的/SpringTemplate/index.html,走的是Netbeans自动生成的传统Spring MVC配置逻辑,和你写的SpringBoot启动类、@RestController没有任何关系:
- 自动生成的
web.xml里手动定义了DispatcherServlet,映射规则是仅拦截*.htm后缀的请求,你访问的/hello没有匹配后缀,根本不会被Spring处理,直接返回404 - 自动生成的
dispatcher-servlet.xml是传统Spring的XML配置,只配了index.htm的路由,没有开启注解扫描,你写的WebController根本没被Spring容器识别 - 你现在是把项目作为war包部署到外部Tomcat启动的,SpringBoot的内嵌Tomcat、自动配置、main方法启动逻辑完全没生效,你加的SpringBoot依赖没有发挥作用。
正确解决方法(推荐,符合SpringBoot使用逻辑)
- 清理传统Web项目的冗余配置:
- 删除
WEB-INF目录下的web.xml、dispatcher-servlet.xml、applicationContext.xml - 删除自动生成的
redirect.jsp、WEB-INF/jsp/下的示例jsp文件
- 删除
- 你之前写的POM依赖和插件配置是正确的,不需要额外添加传统Spring MVC相关依赖。
- 在
src/main/resources目录下新建application.properties配置文件,如果需要保留/SpringTemplate的项目访问前缀,加一行配置:
如果不需要前缀,不用加任何配置,默认上下文路径是server.servlet.context-path=/SpringTemplate/。 - 不要用「部署到Tomcat」的方式启动项目,直接在Netbeans里运行你写的
Application类的main方法,等控制台打印SpringBoot启动标识后,访问http://localhost:8080/SpringTemplate/hello就能正常返回<h1> Hi!</h1>。
提示:后续创建SpringBoot项目不要选Netbeans的「Java Web 应用」模板,直接选SpringBoot初始化项目向导,生成项目后导入不会自带一堆冲突的传统XML配置。
临时凑用方案(不推荐,本质还是跑传统Spring MVC)
如果你非要保留现有Netbeans生成的项目结构,需要改两处配置才能跑通接口:
- 修改
web.xml里的DispatcherServlet映射规则,把拦截范围从*.htm改成所有请求:<servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> - 在
dispatcher-servlet.xml里补上context和mvc的命名空间,再开启注解驱动和组件扫描,让Spring能识别你写的@RestController:<context:component-scan base-package="com.springboot.springtemplate" /> <mvc:annotation-driven />
改完重新部署到Tomcat就能访问/hello接口,但这种方式完全没用到SpringBoot的自动配置能力,后续会遇到大量配置冲突问题,新手不要用这种方式。
内容的提问来源于stack exchange,提问作者Discipulos
相关产品推荐
相关产品推荐

