课程概述
从零开始搭建一个完整的 Java 后端项目,包含数据库操作、RESTful API、前端页面和打包部署。全程不依赖任何框架,只使用 JDK 内置 API。
课程目录
- 环境配置
- 项目结构
- 类与对象
- 集合与业务逻辑
- 数据库操作
- 控制台交互
- HTTP API
- 前端页面
- 打包部署
1. 环境配置
- JDK 17 (Amazon Corretto 17.0.19 LTS)
- VS Code + Extension Pack for Java
- 配置
settings.json指定 JDK 路径和第三方库
2. 项目结构
Java 项目采用 Maven 标准目录布局,以下是最终的项目结构:
java-project/
├── lib/ # 第三方 jar 包
│ ├── sqlite-jdbc-3.45.3.0.jar # SQLite 数据库驱动
│ ├── json-20231013.jar # JSON 解析库
│ └── slf4j-*.jar # 日志库
├── src/main/java/com/example/
│ ├── Main.java # 控制台交互入口
│ ├── user/
│ │ ├── User.java # 用户实体类
│ │ ├── UserRepository.java # 数据库操作层
│ │ └── DatabaseUtil.java # 数据库连接工具
│ └── server/
│ ├── ApiServer.java # HTTP 服务入口
│ ├── UserController.java # 用户 CRUD API
│ ├── LoginController.java # 登录 API
│ └── StaticFileHandler.java # 静态文件托管
├── src/main/resources/static/
│ └── index.html # 前端页面
├── build/ # 编译产物
├── user-management.jar # 可独立运行的 jar 包
┌── MANIFEST.MF # jar 清单文件
└── .vscode/settings.json # VS Code 配置
包名规范
- 包名 = 域名反写,如
com.example.user - 目录结构 = 包名对应路径
src/main/java— Java 源代码src/main/resources— 配置文件/静态资源
3. 类与对象
public class User {
private int id; // private 封装
private String username;
private String password;
private String email;
public User() {} // 无参构造
public User(int id, String username, String password, String email) {
this.id = id; // this 指向当前实例
this.username = username;
}
public int getId() { return id; } // Getter
public void setId(int id) { this.id = id; } // Setter
}
核心概念:
package— 声明包名,必须与目录路径一致public class— 类名与文件名一致private字段 +publicgetter/setter = 封装this— 指向当前对象实例
4. 集合与业务逻辑
第一阶段使用 ArrayList 在内存中模拟数据库,实现增删改查:
public class UserRepository {
private List<User> users = new ArrayList<>();
public User addUser(...) // 新增
public List<User> findAll() // 查询所有
public User findById(int id) // 根据 ID 查询
public boolean updateUser(...) // 修改
public boolean deleteById(int id) // 删除
public User login(String, String) // 登录鉴权
}
5. 数据库操作
使用 SQLite + JDBC — 轻量级嵌入式数据库,无需安装服务端。
DatabaseUtil
public class DatabaseUtil {
private static final String URL = "jdbc:sqlite:user.db";
public static Connection getConnection() throws Exception {
Class.forName("org.sqlite.JDBC");
return DriverManager.getConnection(URL);
}
public static void initDatabase() {
// CREATE TABLE IF NOT EXISTS users (...)
}
}
PreparedStatement — 防 SQL 注入
String sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, username); // 参数化查询
stmt.setString(2, password);
stmt.executeUpdate();
try-with-resources
try (Connection conn = getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
// 使用后自动关闭 conn 和 stmt
}
6. 控制台交互
使用 Scanner 实现菜单循环:
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("1. 添加用户 2. 查看所有 ... 0. 退出");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 1: addUser(repo, scanner); break;
// ...
}
}
7. HTTP API
使用 JDK 内置 HttpServer,无需任何框架:
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
server.createContext("/api/users", new UserController());
server.createContext("/api/login", new LoginController());
server.start();
RESTful 接口列表
| 方法 | 路径 | 功能 |
|---|---|---|
| GET | /api/users | 获取所有用户 |
| GET | /api/users/{id} | 获取单个用户 |
| POST | /api/users | 新增用户 |
| PUT | /api/users/{id} | 修改用户 |
| DELETE | /api/users/{id} | 删除用户 |
| POST | /api/login | 用户登录 |
JsonUtil — JSON 数据交换
// 解析请求
String body = readBody(exchange);
JSONObject json = new JSONObject(body);
String username = json.getString("username");
// 返回 JSON
JSONObject obj = new JSONObject();
obj.put("id", user.getId());
obj.put("username", user.getUsername());
return obj.toString();
8. 前端页面
纯 HTML + CSS + JavaScript,通过 fetch API 调用后端:
const API = "/api";
async function loadUsers() {
const res = await fetch(API + "/users");
const users = await res.json();
// 渲染表格
}
async function addUser() {
const res = await fetch(API + "/users", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ username, password, email })
});
}
9. 打包部署
打包为 jar
# 编译
javac -cp "lib/*" -d build src/main/java/com/example/**/*.java
# 复制静态资源
cp -r src/main/resources/static build/static
# 打包
jar -cfm user-management.jar MANIFEST.MF -C build .
MANIFEST.MF
Manifest-Version: 1.0
Main-Class: com.example.server.ApiServer
Class-Path: lib/sqlite-jdbc-3.45.3.0.jar lib/json-20231013.jar ...
服务器部署
# 本地运行
java -jar user-management.jar
# 服务器部署
scp user-management.jar root@server:/app/
scp -r lib root@server:/app/
ssh root@server "java -jar /app/user-management.jar &"
课程路线图
环境配置 (JDK 17 + VS Code)
↓
Java 基础 (类、对象、封装)
↓
内存存储版用户管理 (ArrayList)
↓
SQLite 数据库持久化 (JDBC)
↓
控制台交互菜单 (Scanner)
↓
RESTful HTTP API (HttpServer)
↓
前端页面 (HTML + fetch API)
↓
打包部署 (jar 包 → 服务器)
课程成果
完成本课程后,你已具备以下能力:
- Java 环境配置与开发工具使用
- 面向对象编程(类、封装、构造方法)
- 集合框架与业务逻辑实现
- SQLite 数据库 + JDBC 操作(增删改查)
- RESTful API 设计(GET/POST/PUT/DELETE)
- JSON 数据交换
- 前后端分离开发
- 项目打包与服务器部署
- 不依赖任何框架,纯 JDK 内置 API
