Java Web开发实例:从零开始构建一个用户管理系统
这个实例将使用当前主流且稳定的Java EE 8 (Jakarta EE 8)技术栈,并采用Maven进行项目管理。

技术栈
- 后端框架: Spring Boot 2.7.x (简化配置,快速开发)
- Web服务器: 内嵌 Tomcat
- 持久层框架: Spring Data JPA (简化数据库操作)
- 数据库: H2 Database (内存数据库,无需安装,适合快速原型)
- 前端模板引擎: Thymeleaf (在服务器端渲染HTML,易于与Spring Boot集成)
- 项目管理: Maven
- 构建工具: Maven
- 开发工具: IntelliJ IDEA (或 Eclipse)
第一步:环境准备
在开始之前,请确保您的电脑上已安装以下软件:
- JDK 8 或更高版本: Oracle JDK 或 OpenJDK
- Maven: Maven 官网下载 (确保配置好环境变量
MAVEN_HOME和PATH) - IntelliJ IDEA: IntelliJ IDEA 官网 (社区版免费即可)
第二步:使用Spring Initializr创建项目
Spring Initializr 是一个在线项目生成器,可以帮我们快速创建一个标准化的Spring Boot项目结构。
- 访问 Spring Initializr。
- 配置项目参数:
- Project:
Maven Project - Language:
Java - Spring Boot: 选择一个稳定版本,如
7.17(与Java 8兼容性最好) - Project Metadata:
- Group:
com.example - Artifact:
user-management - Name:
user-management - Description:
A simple user management system - Package name:
com.example.usermanagement
- Group:
- Packaging:
Jar - Java:
8(或你安装的版本)
- Project:
- 添加依赖:
- 点击 "ADD DEPENDENCIES",搜索并添加以下依赖:
Spring Web: 用于构建Web应用,包含RESTful支持和Tomcat。Spring Data JPA: 用于数据库访问。H2 Database: 内存数据库。Thymeleaf: 用于服务器端页面渲染。
- 点击 "ADD DEPENDENCIES",搜索并添加以下依赖:
- 点击 "GENERATE" 按钮,下载生成的
user-management.zip压缩包。 - 将下载的压缩包解压,并用IntelliJ IDEA打开该文件夹。
第三步:项目结构与核心文件
创建成功后,你的项目结构应该如下:
user-management/
├── pom.xml <!-- Maven项目配置文件 -->
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── usermanagement/
│ │ │ ├── UserManagementApplication.java // 主启动类
│ │ │ ├── controller/
│ │ │ │ └── UserController.java // 控制器
│ │ │ ├── model/
│ │ │ │ └── User.java // 实体类
│ │ │ ├── repository/
│ │ │ │ └── UserRepository.java // 数据访问层
│ │ │ └── service/
│ │ │ ├── UserService.java // 业务逻辑层
│ │ │ └── impl/
│ │ │ └── UserServiceImpl.java // 业务逻辑层实现
│ │ ├── resources/
│ │ │ ├── application.properties // Spring Boot配置文件
│ │ │ ├── static/ // 存放静态资源 (CSS, JS, 图片)
│ │ │ └── templates/ // 存放Thymeleaf模板
│ │ │ ├── index.html
│ │ │ ├── add-user.html
│ │ │ └── list-users.html
│ │ └── ...
│ └── test/
└── ...
第四步:编写核心代码
配置文件 (src/main/resources/application.properties)
# 服务器端口 server.port=8080 # H2 数据库配置 spring.datasource.url=jdbc:h2:mem:userdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= # JPA/H2 自动建表策略 spring.jpa.hibernate.ddl-auto=update # 显示SQL语句,方便调试 spring.jpa.show-sql=true # H2 Web控制台配置 (方便在浏览器中查看数据库) spring.h2.console.enabled=true spring.h2.console.path=/h2-console
实体类 (src/main/java/com/example/usermanagement/model/User.java)
package com.example.usermanagement.model;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
数据访问层 (src/main/java/com/example/usermanagement/repository/UserRepository.java)
Spring Data JPA会自动帮我们实现CRUD(增删改查)方法。

package com.example.usermanagement.repository;
import com.example.usermanagement.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// 这里可以定义自定义查询方法,
// User findByName(String name);
}
业务逻辑层 (src/main/java/com/example/usermanagement/service/UserService.java 和 .../impl/UserServiceImpl.java)
接口 (UserService.java)
package com.example.usermanagement.service;
import com.example.usermanagement.model.User;
import java.util.List;
public interface UserService {
List<User> findAll();
User findById(Long id);
void save(User user);
void deleteById(Long id);
}
实现 (UserServiceImpl.java)
package com.example.usermanagement.service.impl;
import com.example.usermanagement.model.User;
import com.example.usermanagement.repository.UserRepository;
import com.example.usermanagement.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public List<User> findAll() {
return userRepository.findAll();
}
@Override
public User findById(Long id) {
Optional<User> result = userRepository.findById(id);
return result.orElse(null);
}
@Override
public void save(User user) {
userRepository.save(user);
}
@Override
public void deleteById(Long id) {
userRepository.deleteById(id);
}
}
控制器 (src/main/java/com/example/usermanagement/controller/UserController.java)
控制器是Web层的入口,负责处理HTTP请求,调用业务逻辑,并返回视图或数据。
package com.example.usermanagement.controller;
import com.example.usermanagement.model.User;
import com.example.usermanagement.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
@Controller
public class UserController {
@Autowired
private UserService userService;
// 显示用户列表
@GetMapping("/")
public String listUsers(Model model) {
model.addAttribute("users", userService.findAll());
return "list-users"; // 返回 templates/list-users.html
}
// 显示添加用户表单
@GetMapping("/add")
public String showAddUserForm(User user) {
return "add-user"; // 返回 templates/add-user.html
}
// 处理添加用户请求
@PostMapping("/save")
public String saveUser(@ModelAttribute User user) {
userService.save(user);
return "redirect:/"; // 重定向到根路径,刷新列表
}
// 处理删除用户请求
@GetMapping("/delete/{id}")
public String deleteUser(@PathVariable("id") Long id) {
userService.deleteById(id);
return "redirect:/";
}
}
第五步:创建前端页面
在 src/main/resources/templates 目录下创建HTML文件。
用户列表页面 (list-users.html)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">User List</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
table { width: 100%; border-collapse: collapse; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
a { margin-right: 10px; text-decoration: none; color: #007bff; }
</style>
</head>
<body>
<h1>User Management System</h1>
<a href="/add">Add New User</a>
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr th:each="user : ${users}">
<td th:text="${user.id}">1</td>
<td th:text="${user.name}">John Doe</td>
<td th:text="${user.email}">john.doe@example.com</td>
<td>
<a th:href="@{'/delete/' + ${user.id}}">Delete</a>
</td>
</tr>
</tbody>
</table>
</body>
</html>
添加用户页面 (add-user.html)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">Add User</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
form { max-width: 400px; }
label { display: block; margin-bottom: 5px; }
input[type="text"] { width: 100%; padding: 8px; margin-bottom: 10px; }
input[type="submit"] { background-color: #007bff; color: white; padding: 10px 15px; border: none; cursor: pointer; }
</style>
</head>
<body>
<h1>Add New User</h1>
<form th:action="@{/save}" th:object="${user}" method="post">
<div>
<label for="name">Name:</label>
<input type="text" id="name" th:field="*{name}" required>
</div>
<div>
<label for="email">Email:</label>
<input type="text" id="email" th:field="*{email}" required>
</div>
<input type="submit" value="Save User">
</form>
</body>
</html>
第六步:运行和测试
- 在IntelliJ IDEA中,找到
UserManagementApplication.java文件。 - 右键点击,选择
Run 'UserManagementApplication.main()'。 - 等待项目启动成功,你会看到控制台输出类似
Started UserManagementApplication in X.XXX seconds (JVM running for Y.YYY)的信息。 - 打开你的浏览器,访问
http://localhost:8080。- 你将看到一个用户列表页面(初始为空)。
- 点击 "Add New User" 链接,可以添加新用户。
- 添加用户后,会自动跳转到列表页面,显示新添加的用户。
- 点击用户行中的 "Delete" 链接,可以删除该用户。
- (可选) 访问
http://localhost:8080/h2-console,可以打开H2数据库的Web控制台,查看你创建的USER表和数据。
如何生成PDF
你已经拥有了一个完整可运行的Java Web实例,你可以使用以下方法将其整理成PDF:
-
使用Markdown + 工具链:
- 将上述所有代码和说明整理成一个
.md文件。 - 使用工具如 Pandoc 或在线转换器将Markdown文件转换为PDF。
- 优点: 格式清晰,版本控制友好。
- 将上述所有代码和说明整理成一个
-
使用Word + 另存为PDF:
- 复制粘贴到Microsoft Word中。
- 为代码片段使用 "代码块" 样式,使其有背景色和等宽字体。
- 调整好格式后,点击 "文件" -> "另存为" -> 选择 "PDF (*.pdf)"。
- 优点: 操作简单,大多数人熟悉。
-
使用IDE插件:
一些IDE(如IntelliJ IDEA)有插件可以将项目文档或代码导出为PDF。
-
在线文档平台:
进阶学习资源
当你掌握了这个基础实例后,可以继续学习以下内容来提升技能:
- RESTful API: 学习如何将
UserController改造成返回JSON数据的RESTful API,供前端(如Vue.js, React)调用。 - 安全框架: 集成 Spring Security 来保护你的应用,实现用户认证和授权。
- 更强大的数据库: 将H2数据库替换为 MySQL 或 PostgreSQL。
- 前端框架: 学习使用 Vue.js 或 React 构建现代化的前后端分离应用。
- 部署: 学习如何将你的应用打包成WAR文件,并部署到外部的Tomcat服务器或云服务器上。
希望这份详细的实例教程能帮助你完成Java Web开发的学习!
