You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成JSP路径映射及Maven运行命令差异问题咨询

问题解答

1. 视图解析器映射逻辑及target目录无文件仍可渲染的原因

InternalResourceViewResolver 拼接完前缀后缀得到完整路径 /WEB-INF/views/index.jsp 后,是通过ServletContext.getResource()方法读取资源,而非直接读取target目录的文件。
你用mvn spring-boot:run启动项目时,Spring Boot默认会将src/main/webapp作为Servlet上下文的资源目录直接加载,不需要提前把该目录下的文件拷贝到target目录就能读取源文件,同时JSP是由内置的Tomcat容器在运行时动态编译的,所以就算target中没有WEB-INF目录,也能正常渲染src/main/webapp/WEB-INF/views/index.jsp的内容。

2. 两个Maven命令的差异

  • mvn spring-boot:run 是Spring Boot Maven插件提供的启动目标,仅会触发编译类的生命周期阶段,默认仅将src/main/resources下的文件拷贝到target/classes目录,不会处理src/main/webapp下的内容,因此不会生成WEB-INF目录。
  • mvn clean package spring-boot:run 额外执行了package打包阶段:如果你的pom.xml中打包类型设置为war,Maven的war插件会在打包阶段将src/main/webapp下的所有内容拷贝到target的war解压目录或者war包内部,自然就会生成WEB-INF目录;如果是jar包类型,需要额外配置Maven插件才会将webapp目录打入jar包的META-INF/resources下。

3. 优先返回WEB-INF下JSP的原因

你访问的/indexA路径已经匹配到了IndexController的接口,控制器直接返回了视图名index,会直接走你配置的InternalResourceViewResolver视图解析逻辑,不会进入静态资源匹配流程。
而/resources和/static下的index.jsp属于静态资源,只有当请求路径没有匹配到任何控制器接口时,Spring才会到静态资源路径下搜索对应文件,因此控制器的视图解析优先级远高于静态资源匹配,最终返回的是WEB-INF下的JSP内容。

内容的提问来源于stack exchange,提问作者sak18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 08:42:03