Spring Boot 3.x + JSP 技术栈
最后更新: 2025年11月26日
技术栈概述
Spring Boot 3.x + JSP 是捷码AI支持的最新技术栈,基于Spring Framework 6和Java 17+,使用 JSP 作为视图层技术。
技术组成
| 组件 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 3.2.x | 核心框架 |
| Spring Framework | 6.1.x | 基础框架 |
| MyBatis-Plus | 3.5.x | ORM框架 |
| JSP | 2.3+ | 视图层模板引擎 |
| JDK | 17+ | 运行环境 |
| Maven | 3.8+ | 构建工具 |
核心特性
- ✅ 最新技术:Java 17新特性支持
- ✅ 性能优化:GraalVM原生编译支持
- ✅ 安全增强:Spring Security 6
- ✅ JSP视图层:使用 JSP 作为前端页面技术(非 Thymeleaf)
与 Spring Boot 2.x (BOOT) 的区别
| 对比项 | Spring Boot 3.x (SPRING_BOOT) | Spring Boot 2.x (BOOT) |
|---|---|---|
| Spring Boot 版本 | 3.2.x | 2.7.x |
| JDK 要求 | JDK 17+ | JDK 8+ |
| 视图层技术 | JSP | Thymeleaf |
| 适用场景 | 最新技术栈项目 | 兼容性项目/快速开发 |
| 页面后缀 | .jsp | .html |
💡 重要提示:如果需要 Thymeleaf,请选择 Spring Boot 2.x (BOOT) 平台。
环境要求
JDK版本
⚠️ 重要:Spring Boot 3.x 最低要求 JDK 17
| JDK版本 | 支持状态 |
|---|---|
| JDK 21 (LTS) | ✅ 推荐 |
| JDK 17 (LTS) | ✅ 支持 |
| JDK 11 | ❌ 不支持 |
| JDK 8 | ❌ 不支持 |
JDK安装
# 检查JDK版本 java -version # 期望输出 java version "17.0.x" 或 "21.0.x"
Maven配置
# 检查Maven版本 mvn -v # 期望输出 Apache Maven 3.8.x 或更高
项目结构
ProjectName/ ├── src/ │ ├── main/ │ │ ├── java/com/example/project/ │ │ │ ├── App.java # 启动类 │ │ │ ├── entity/ # 实体类 │ │ │ │ ├── Student.java │ │ │ │ └── Class.java │ │ │ ├── mapper/ # Mapper接口 │ │ │ │ ├── StudentMapper.java │ │ │ │ └── ClassMapper.java │ │ │ ├── service/ # 业务逻辑 │ │ │ │ ├── StudentService.java │ │ │ │ └── impl/ │ │ │ │ └── StudentServiceImpl.java │ │ │ ├── controller/ # 控制器 │ │ │ │ └── StudentController.java │ │ │ └── config/ # 配置类 │ │ │ └── WebConfig.java │ │ └── resources/ │ │ ├── mapper/ # MyBatis XML │ │ │ └── StudentMapper.xml │ │ └── application.yml # 配置文件 │ └── webapp/ # Web 资源目录(JSP) │ ├── WEB-INF/ │ │ └── pages/ # JSP 页面 │ │ └── student/ │ │ ├── list.jsp │ │ └── edit.jsp │ └── static/ # 静态资源 │ ├── css/ │ └── js/ │ └── test/ # 测试代码 ├── sql/ │ ├── schema.sql # 表结构 │ └── data.sql # 初始数据 └── pom.xml # Maven配置
核心代码示例
实体类 (Entity)
package com.example.project.entity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import java.time.LocalDateTime; @Data @TableName("student") public class Student { @TableId(type = IdType.AUTO) private Long id; @TableField("name") private String name; @TableField("student_no") private String studentNo; @TableField("gender") private Integer gender; @TableField("class_id") private Long classId; @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; }
Mapper接口
package com.example.project.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.project.entity.Student; import org.apache.ibatis.annotations.Mapper; @Mapper public interface StudentMapper extends BaseMapper<Student> { // 继承BaseMapper即可获得常用CRUD方法 // 复杂查询可在XML中定义 }
Service层
package com.example.project.service; import com.baomidou.mybatisplus.extension.service.IService; import com.example.project.entity.Student; public interface StudentService extends IService<Student> { // 自定义业务方法 }
package com.example.project.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.project.entity.Student; import com.example.project.mapper.StudentMapper; import com.example.project.service.StudentService; import org.springframework.stereotype.Service; @Service public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService { // 实现自定义业务方法 }
Controller层
package com.example.project.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.project.entity.Student; import com.example.project.service.StudentService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/student") @RequiredArgsConstructor public class StudentController { private final StudentService studentService; @GetMapping("/list") public IPage<Student> list( @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) { return studentService.page(new Page<>(page, size)); } @GetMapping("/{id}") public Student getById(@PathVariable Long id) { return studentService.getById(id); } @PostMapping public boolean save(@RequestBody Student student) { return studentService.save(student); } @PutMapping public boolean update(@RequestBody Student student) { return studentService.updateById(student); } @DeleteMapping("/{id}") public boolean delete(@PathVariable Long id) { return studentService.removeById(id); } }
配置文件
application.yml
server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: root password: your_password mvc: view: prefix: /WEB-INF/pages/ suffix: .jsp mybatis-plus: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.example.project.entity configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl logging: level: com.example: debug
启动与运行
步骤一:配置数据库
- 创建数据库
CREATE DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 执行建表语句
mysql -u root -p your_database < sql/schema.sql
步骤二:修改配置
编辑 application.yml,修改数据库连接信息。
步骤三:启动项目
# 方式一:Maven命令 mvn spring-boot:run # 方式二:运行Main类 # 在IDE中运行 App.java
步骤四:访问系统
常见问题
Q1: 启动报错"找不到主类"
解决方案:
# 清理并重新编译 mvn clean compile
Q2: 数据库连接失败
检查清单:
- MySQL服务是否启动
- 数据库是否存在
- 用户名密码是否正确
- 端口是否正确(默认3306)
Q3: JDK版本不兼容
解决方案:
- 安装JDK 17或21
- 设置JAVA_HOME环境变量
- 确认IDE使用正确的JDK
最佳实践
1. 使用Lombok简化代码
@Data // 自动生成getter/setter @Builder // 构建器模式 @NoArgsConstructor @AllArgsConstructor public class Student { }
2. 统一响应格式
@Data public class ApiResult<T> { private Integer code; private String message; private T data; public static <T> ApiResult<T> success(T data) { ApiResult<T> result = new ApiResult<>(); result.setCode(200); result.setMessage("success"); result.setData(data); return result; } }
3. 全局异常处理
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ApiResult<Void> handleException(Exception e) { return ApiResult.error(500, e.getMessage()); } }
4. JSP 页面配置
pom.xml 添加 JSP 依赖:
<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>
JSP 页面示例 (student/list.jsp):
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>学生列表</title> </head> <body> <h1>学生管理系统</h1> <table> <tr> <th>学号</th> <th>姓名</th> <th>性别</th> </tr> <c:forEach var="student" items="${students}"> <tr> <td>${student.studentNo}</td> <td>${student.name}</td> <td>${student.gender == 1 ? '男' : '女'}</td> </tr> </c:forEach> </table> </body> </html>
数据库支持
支持的数据库类型
| 数据库 | 版本 | 驱动类 |
|---|---|---|
| MySQL | 5.7+ | com.mysql.cj.jdbc.Driver |
| SQLite | 3.x | org.sqlite.JDBC |
| SQL Server | 2012+ | com.microsoft.sqlserver.jdbc.SQLServerDriver |
⚠️ 注意:系统当前仅支持以上 3 种数据库。如需其他数据库(如 PostgreSQL、Oracle),需要手动修改配置和驱动。
常见问题补充
Q4: 为什么使用 JSP 而不是 Thymeleaf?
原因:
- Spring Boot 3.x 平台(SPRING_BOOT)使用 JavaWeb 的 JSP 模板系统
- 如果需要 Thymeleaf,请选择 Spring Boot 2.x (BOOT) 平台
Q5: JSP 页面无法访问怎么办?
检查清单:
- 确认 pom.xml 中添加了
tomcat-embed-jasper依赖 - 确认 JSP 文件放在
src/main/webapp/WEB-INF/pages/目录 - 确认 application.yml 中配置了正确的 prefix 和 suffix
- 确认使用 WAR 打包方式(JSP 需要 WAR 包)
💡 提示:
- Spring Boot 3.x (SPRING_BOOT) 使用 JSP 作为视图层
- Spring Boot 2.x (BOOT) 使用 Thymeleaf 作为视图层
- 如果您的环境只有 JDK 8/11,请选择 Spring Boot 2.x (BOOT)
本文对您有帮助吗?
提交反馈