Article

我的第一个Java Web项目开发总结

更新于:2024-11-01

项目背景

这是我在大学期间完成的第一个完整的 Java Web 项目——在线图书管理系统。虽然功能不复杂,但是让我对整个开发流程有了更深的理解。

技术栈

  • 后端框架: SSM(Spring + Spring MVC + MyBatis)
  • 数据库: MySQL 8.0
  • 前端: Bootstrap + jQuery
  • 构建工具: Maven
  • 服务器: Tomcat 9

功能模块

1. 用户管理

  • 用户注册、登录
  • 个人信息管理
  • 借阅历史查询

2. 图书管理

  • 图书的增删改查
  • 图书分类管理
  • 图书库存管理

3. 借阅管理

  • 图书借阅
  • 图书归还
  • 逾期提醒

开发过程

第一阶段:需求分析和设计

花了大约一周时间进行需求分析和数据库设计。

数据库设计

-- 用户表
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(100),
    phone VARCHAR(20),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 图书表
CREATE TABLE books (
    id INT PRIMARY KEY AUTO_INCREMENT,
    isbn VARCHAR(20) UNIQUE,
    title VARCHAR(200) NOT NULL,
    author VARCHAR(100),
    publisher VARCHAR(100),
    stock INT DEFAULT 0,
    status TINYINT DEFAULT 1
);

-- 借阅记录表
CREATE TABLE borrow_records (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    book_id INT,
    borrow_date DATE,
    return_date DATE,
    actual_return_date DATE,
    status ENUM('borrowed', 'returned', 'overdue'),
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (book_id) REFERENCES books(id)
);

第二阶段:搭建项目框架

使用 Maven 创建项目,配置 SSM 框架。

pom.xml 主要依赖

<dependencies>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.20</version>
    </dependency>
    
    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.9</version>
    </dependency>
    
    <!-- MySQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
</dependencies>

第三阶段:编写业务代码

采用分层架构:Controller -> Service -> DAO

Controller 示例

@Controller
@RequestMapping("/book")
public class BookController {
    
    @Autowired
    private BookService bookService;
    
    @GetMapping("/list")
    public String listBooks(Model model) {
        List<Book> books = bookService.getAllBooks();
        model.addAttribute("books", books);
        return "book/list";
    }
    
    @PostMapping("/add")
    @ResponseBody
    public Result addBook(@RequestBody Book book) {
        try {
            bookService.addBook(book);
            return Result.success("添加成功");
        } catch (Exception e) {
            return Result.error("添加失败:" + e.getMessage());
        }
    }
}

第四阶段:前端开发

使用 Bootstrap 快速搭建页面,jQuery 处理交互。

// 添加图书
$('#addBookBtn').click(function() {
    var bookData = {
        isbn: $('#isbn').val(),
        title: $('#title').val(),
        author: $('#author').val(),
        stock: $('#stock').val()
    };
    
    $.ajax({
        url: '/book/add',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify(bookData),
        success: function(result) {
            if(result.code === 200) {
                alert('添加成功');
                location.reload();
            } else {
                alert('添加失败:' + result.message);
            }
        }
    });
});

遇到的问题和解决方案

问题1:中文乱码

问题描述:提交表单时中文显示乱码

解决方案

<!-- web.xml 配置字符编码过滤器 -->
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>

问题2:AJAX 请求 404

问题描述:前端 AJAX 请求后端接口返回 404

解决方案:检查请求路径和 @RequestMapping 注解,确保路径一致。

问题3:事务不生效

问题描述:数据库操作异常时没有回滚

解决方案

@Service
@Transactional // 添加事务注解
public class BookServiceImpl implements BookService {
    
    @Override
    public void borrowBook(int userId, int bookId) {
        // 减少库存
        bookDao.decreaseStock(bookId);
        
        // 创建借阅记录
        BorrowRecord record = new BorrowRecord();
        record.setUserId(userId);
        record.setBookId(bookId);
        borrowDao.insert(record);
    }
}

项目亮点

  1. 参数校验:使用 Hibernate Validator 进行参数校验
  2. 异常处理:统一的异常处理机制
  3. 日志记录:使用 Log4j 记录操作日志
  4. 分页查询:使用 PageHelper 实现分页

经验教训

做得好的地方

✅ 代码结构清晰,分层明确
✅ 注释比较完整,便于理解
✅ 数据库设计合理,使用了外键约束
✅ 完成了基本的单元测试

需要改进的地方

❌ 前端代码比较混乱,没有模块化
❌ 安全性不够,密码直接存储(应该加密)
❌ 没有做前端验证,完全依赖后端
❌ 性能优化不够,没有使用缓存

后续优化计划

  1. 使用 Spring Security 增强安全性
  2. 引入 Redis 做缓存
  3. 前端改用 Vue.js 重构
  4. 添加更多功能(如图书推荐、评论等)
  5. 部署到云服务器

收获与感悟

这个项目虽然简单,但让我对 Java Web 开发有了全面的认识:

  1. 理论与实践结合:课本上的知识在实践中才能真正理解
  2. 遇到问题不要慌:善用搜索引擎和官方文档
  3. 代码规范很重要:良好的代码习惯受益终身
  4. 测试不能少:完整的测试能避免很多问题

总结

第一个项目总会有很多不足,但这是成长的开始。通过这个项目,我不仅巩固了课堂知识,还学会了如何独立解决问题。接下来会继续学习 Spring Boot,开发更复杂的项目!


项目 GitHub 地址:(待上传)

欢迎大家交流学习!