创建Spring Web App(Jar+Maven)时缺失webapp等视图层文件夹
问题:Spring Boot项目缺少web-app/WEB-INF文件夹无法放置JSP页面
使用Jar打包和Maven构建Spring Web App,创建项目后找不到存放JSP的视图层目录,缺少web-app、WEB-INF和META-INF文件夹,无法放置JSP页面,原本期望有webapp或WebContent目录。
项目pom.xml内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.app</groupId> <artifactId>EonEsports</artifactId> <version>0.0.1-SNAPSHOT</version> <name>EonEsports</name> <description>EonEsports</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
项目结构

解决方案
原因说明
Spring Boot默认Jar打包的项目采用Jar包目录结构,而非传统WAR包的webapp目录规范,因此不会自动生成web-app这类目录。若要使用JSP,需手动配置相关内容。
步骤1:手动创建webapp目录结构
在项目根目录下创建如下目录:
src/main/webapp/ ├── WEB-INF/ │ └── views/ # 存放JSP页面 └── META-INF/
步骤2:添加JSP相关依赖
修改pom.xml,添加JSP引擎和JSTL依赖(spring-boot-starter-web默认不含JSP支持):
<dependencies> <!-- 保留原有依赖 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> </dependencies>
步骤3:配置JSP视图解析
在src/main/resources/application.properties中添加视图解析配置:
spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp
步骤4:Jar打包的JSP限制(可选)
Spring Boot官方不推荐在Jar包中使用JSP,因为Tomcat内嵌容器对Jar包中的JSP支持有限,运行时易出现404错误。若需稳定使用JSP,建议改为WAR打包:
- 修改pom.xml的
<packaging>为war:<packaging>war</packaging> - 添加Tomcat依赖(用于外部容器部署):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> - 修改启动类继承
SpringBootServletInitializer:@SpringBootApplication public class EonEsportsApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(EonEsportsApplication.class); } public static void main(String[] args) { SpringApplication.run(EonEsportsApplication.class, args); } }
内容的提问来源于stack exchange,提问作者kevinpcf
相关产品推荐
相关产品推荐

