Spring Boot页面访问404,日志提示WEB-INF路径异常,加依赖仍未解决
问题:访问页面出现404,日志提示WEB-INF路径资源无法直接访问
访问页面时触发404错误,日志输出如下:
o.s.w.s.r.ResourceHttpRequestHandler: "Path with "WEB-INF" or "META-INF": [WEB-INF/views/main.html]"
相关配置及代码如下:
应用配置(application.properties)
spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.html
控制器代码
@RestController @RequestMapping(value = "/main") public class MainController { @GetMapping(value = "/") public ModelAndView showMainPage() { ModelAndView mv = new ModelAndView(); mv.setViewName("main"); return mv; } }
项目结构
标准Spring Boot Web项目结构,WEB-INF/views目录下存在main.html文件
已导入的Maven依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency>
已尝试上述配置但问题仍未解决,请求排查原因并给出解决方案。
解决方案
核心问题:控制器注解错误
你使用的@RestController注解会让控制器方法的返回值直接作为响应体(如JSON或字符串)返回,而非通过视图解析器渲染页面。视图解析器生成的/WEB-INF/views/main.html路径被当成普通字符串返回后,浏览器直接请求该路径,但WEB-INF是受保护目录,外部无法直接访问,因此触发404。
修复步骤
- 将控制器上的
@RestController替换为@Controller:@Controller @RequestMapping(value = "/main") public class MainController { @GetMapping(value = "/") public ModelAndView showMainPage() { ModelAndView mv = new ModelAndView(); mv.setViewName("main"); return mv; } } - 验证依赖配置(当前依赖已满足要求,无需修改):
tomcat-embed-jasper是Spring Boot渲染HTML/JSP视图的必需依赖spring-boot-starter-tomcat在打包成WAR包时需设置provided作用域;若直接运行Jar包,可移除该依赖(Spring Boot会自动嵌入Tomcat)
- 确认项目结构:确保
main.html确实放在src/main/webapp/WEB-INF/views目录下(Maven项目),Gradle项目对应src/main/webapp路径。
补充说明
@RestController等价于@Controller + @ResponseBody,适合编写API接口;渲染页面必须用@Controller,让Spring MVC通过视图解析器找到对应HTML文件并返回渲染后的页面。- WEB-INF目录的资源只能通过控制器转发访问,直接请求会被拦截,这也是日志提示相关信息的原因。
内容的提问来源于stack exchange,提问作者SealAnia
相关产品推荐
相关产品推荐

