📚 个人笔记管理系统
一个基于 Java Web 技术栈开发的个人笔记管理系统,支持笔记的创建、编辑、分类、置顶、收藏等功能,并提供数据统计和可视化展示。
📋 目录
🎯 系统介绍
个人笔记管理系统是一个轻量级的 Web 应用,旨在帮助用户高效地管理和组织个人笔记。系统采用经典的 MVC 架构模式,使用 Java Servlet + JSP 技术实现,提供了完整的笔记管理功能,包括笔记的增删改查、分类管理、置顶收藏、文件上传等核心功能。
核心特点
- ✅ 用户友好:简洁直观的界面设计,操作便捷
- ✅ 功能完善:涵盖笔记管理的各个方面
- ✅ 数据安全:用户数据隔离,密码 MD5 加密存储
- ✅ 可视化统计:提供数据统计图表,直观展示笔记数据
- ✅ 响应式设计:适配不同屏幕尺寸
✨ 功能特性
1. 用户管理
- 用户注册:支持新用户注册,用户名唯一性验证
- 用户登录:安全的登录验证机制,支持验证码
- 会话管理:基于 Session 的用户会话管理
- 密码加密:使用 MD5 算法加密存储用户密码
2. 笔记管理
- 创建笔记:支持创建新笔记,包含标题、内容、分类等信息
- 编辑笔记:修改已有笔记的内容和属性
- 删除笔记:安全删除笔记,带确认提示
- 笔记列表:查看所有笔记,支持置顶笔记优先显示
- 笔记搜索:按分类、时间等条件筛选笔记
3. 分类管理
- 创建分类:为笔记创建自定义分类
- 分类列表:查看和管理所有分类
- 分类编辑:修改分类名称和描述
- 分类删除:删除不需要的分类
4. 置顶功能
- 置顶笔记:将重要笔记置顶显示
- 取消置顶:快速取消笔记置顶状态
- 置顶列表:查看所有置顶笔记
- 置顶标识:置顶笔记显示红色向上箭头(↑)标识
5. 收藏功能
- 收藏笔记:标记重要笔记为收藏
- 取消收藏:移除笔记收藏状态
- 收藏管理:快速管理收藏的笔记
6. 文件管理
- 图片上传:支持上传图片到笔记
- 附件上传:支持上传文件附件
- 文件下载:下载笔记中的附件文件
- 图片预览:在笔记列表中预览图片
7. 数据统计
- 笔记统计:显示笔记总数、总字数、分类数量
- 分类统计:饼图展示各分类笔记分布
- 月度统计:柱状图展示每月笔记创建趋势
- 最近笔记:显示最近创建的笔记列表
8. 其他功能
- 近期笔记:查看最近更新的笔记
- 时间显示:笔记创建和更新时间记录
- 内容预览:笔记列表显示内容预览
- 响应式布局:适配不同设备屏幕
🛠 技术栈
后端技术
- Java:核心开发语言
- Servlet:处理 HTTP 请求和响应
- JSP:动态页面渲染
- JDBC:数据库连接和操作
- MySQL:关系型数据库
前端技术
- HTML5:页面结构
- CSS3:样式设计
- JavaScript:交互逻辑
- Chart.js:数据可视化图表库
开发工具
- IDE:IntelliJ IDEA / Eclipse
- 服务器:Apache Tomcat
- 数据库:MySQL 8.0+
依赖库
mysql-connector-java-8.0.15.jar:MySQL 数据库驱动jstl.jar、standard.jar:JSP 标准标签库commons-*:Apache Commons 工具库json-lib-2.4-jdk15.jar:JSON 处理库
🏗 系统架构
系统采用经典的 MVC(Model-View-Controller) 架构模式:
┌─────────────────────────────────────────┐
│ View Layer (JSP) │
│ - dashboard.jsp │
│ - note_list.jsp │
│ - note_add.jsp / note_edit.jsp │
│ - category_list.jsp │
│ - login.jsp / register.jsp │
└─────────────────────────────────────────┘
↕
┌─────────────────────────────────────────┐
│ Controller Layer (Servlet) │
│ - DashboardServlet │
│ - NoteListServlet / NoteAddServlet │
│ - NoteEditServlet / NoteDeleteServlet │
│ - CategoryServlet │
│ - LoginServlet / RegisterServlet │
└─────────────────────────────────────────┘
↕
┌─────────────────────────────────────────┐
│ Model Layer (DAO + Entity) │
│ - NoteDAO / CategoryDAO / UserDAO │
│ - Note / Category / User │
└─────────────────────────────────────────┘
↕
┌─────────────────────────────────────────┐
│ Database (MySQL) │
│ - user / note / category │
└─────────────────────────────────────────┘
架构说明
- View 层:JSP 页面负责用户界面展示
- Controller 层:Servlet 处理业务逻辑和请求路由
- Model 层:DAO 数据访问对象和 Entity 实体类
- 数据库层:MySQL 存储持久化数据
💾 数据库设计
用户表 (user)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | INT | 用户ID(主键,自增) |
| username | VARCHAR(50) | 用户名(唯一) |
| password | VARCHAR(100) | 密码(MD5加密) |
| VARCHAR(100) | 邮箱 | |
| create_time | DATETIME | 创建时间 |
笔记表 (note)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | INT | 笔记ID(主键,自增) |
| user_id | INT | 用户ID(外键) |
| title | VARCHAR(200) | 笔记标题 |
| content | TEXT | 笔记内容 |
| image_path | VARCHAR(500) | 图片路径 |
| file_path | VARCHAR(500) | 附件文件路径 |
| category_id | INT | 分类ID(外键) |
| is_pinned | TINYINT(1) | 是否置顶(0-否,1-是) |
| is_favorite | TINYINT(1) | 是否收藏(0-否,1-是) |
| create_time | DATETIME | 创建时间 |
| update_time | DATETIME | 更新时间 |
分类表 (category)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | INT | 分类ID(主键,自增) |
| user_id | INT | 用户ID(外键) |
| name | VARCHAR(50) | 分类名称 |
| description | VARCHAR(200) | 分类描述 |
| create_time | DATETIME | 创建时间 |
索引设计
user表:uk_username(用户名唯一索引)note表:idx_user_id、idx_category_id、idx_is_pinned、idx_is_favoritecategory表:idx_user_id
🚀 安装部署
环境要求
- JDK 1.8 或更高版本
- Apache Tomcat 8.5 或更高版本
- MySQL 8.0 或更高版本
- Maven(可选,用于依赖管理)
部署步骤
-
克隆项目
git clone <repository-url> cd mybj -
创建数据库
CREATE DATABASE mybj_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -
导入数据库
mysql -u root -p mybj_db < mybj_db.sql -
配置数据库连接
编辑
src/com/mybj/util/DBUtil.java,修改数据库连接信息:private static final String URL = "jdbc:mysql://localhost:3307/mybj_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai"; private static final String USERNAME = "root"; private static final String PASSWORD = "your_password"; -
配置 Tomcat
- 在 IDE 中配置 Tomcat 服务器
- 将项目部署到 Tomcat
- 设置项目上下文路径
-
启动服务
- 启动 MySQL 数据库服务
- 启动 Tomcat 服务器
- 访问
http://localhost:8080/mybj
默认账户
系统初始化后,可以使用以下测试账户登录:
- 用户名:
zs - 密码:
123(MD5: 202cb962ac59075b964b07152d234b70)
📖 使用说明
用户注册与登录
-
注册新用户
- 访问注册页面
- 填写用户名、密码、邮箱信息
- 输入验证码完成注册
-
用户登录
- 访问登录页面
- 输入用户名和密码
- 输入验证码完成登录
笔记管理
-
创建笔记
- 点击"发布新笔记"按钮
- 填写笔记标题和内容
- 选择分类(可选)
- 上传图片或附件(可选)
- 设置置顶状态(可选)
- 保存笔记
-
编辑笔记
- 在笔记列表中点击"编辑"按钮
- 修改笔记内容
- 保存更改
-
删除笔记
- 在笔记列表中点击"删除"按钮
- 确认删除操作
-
置顶笔记
- 在笔记列表中点击"置顶"按钮
- 置顶的笔记会显示红色向上箭头(↑)
- 置顶笔记会优先显示在列表顶部
分类管理
-
创建分类
- 进入"分类管理"页面
- 点击"添加分类"
- 填写分类名称和描述
- 保存分类
-
使用分类
- 在创建或编辑笔记时选择分类
- 笔记会按分类进行组织
数据统计
- 访问首页(Dashboard)查看数据统计
- 查看笔记总数、总字数、分类数量
- 查看分类分布饼图
- 查看月度笔记创建趋势柱状图
- 查看最近笔记列表
📁 项目结构
mybj/
├── src/ # 源代码目录
│ └── com/
│ └── mybj/
│ ├── dao/ # 数据访问层
│ │ ├── CategoryDAO.java
│ │ ├── NoteDAO.java
│ │ └── UserDAO.java
│ ├── entity/ # 实体类
│ │ ├── Category.java
│ │ ├── Note.java
│ │ └── User.java
│ ├── servlet/ # 控制器层
│ │ ├── CategoryServlet.java
│ │ ├── DashboardServlet.java
│ │ ├── FileDownloadServlet.java
│ │ ├── FileUploadServlet.java
│ │ ├── IndexServlet.java
│ │ ├── LoginServlet.java
│ │ ├── LogoutServlet.java
│ │ ├── NoteAddServlet.java
│ │ ├── NoteDeleteServlet.java
│ │ ├── NoteEditServlet.java
│ │ ├── NoteListServlet.java
│ │ ├── NotePinnedServlet.java
│ │ ├── NoteRecentServlet.java
│ │ ├── NoteTogglePinnedServlet.java
│ │ ├── RegisterServlet.java
│ │ └── VerifyCodeServlet.java
│ └── util/ # 工具类
│ ├── DBUtil.java
│ └── MD5Util.java
├── WebContent/ # Web 资源目录
│ ├── css/ # 样式文件
│ │ └── style.css
│ ├── js/ # JavaScript 文件
│ │ ├── chart.min.js
│ │ └── common.js
│ ├── uploads/ # 上传文件目录
│ ├── WEB-INF/ # Web 配置目录
│ │ ├── lib/ # 依赖库
│ │ └── web.xml # Web 配置文件
│ ├── category_list.jsp # 分类列表页面
│ ├── dashboard.jsp # 首页
│ ├── header.jsp # 公共头部
│ ├── login.jsp # 登录页面
│ ├── note_add.jsp # 添加笔记页面
│ ├── note_edit.jsp # 编辑笔记页面
│ ├── note_list.jsp # 笔记列表页面
│ └── register.jsp # 注册页面
├── mybj_db.sql # 数据库脚本
└── README.md # 项目说明文档
📝 主要功能模块
1. 用户认证模块
- 用户注册、登录、退出
- 密码加密存储
- Session 会话管理
- 验证码功能
2. 笔记管理模块
- 笔记的增删改查
- 笔记分类关联
- 笔记置顶/取消置顶
- 笔记收藏/取消收藏
- 笔记列表展示和筛选
3. 分类管理模块
- 分类的增删改查
- 分类与笔记关联
- 分类统计展示
4. 文件管理模块
- 图片上传和预览
- 附件上传和下载
- 文件路径管理
5. 数据统计模块
- 笔记数量统计
- 字数统计
- 分类分布统计
- 月度趋势统计
- 图表可视化展示
🔒 安全特性
- 密码加密:使用 MD5 算法加密存储用户密码
- 用户隔离:每个用户只能访问自己的笔记和分类
- Session 验证:所有操作都需要登录验证
- SQL 注入防护:使用 PreparedStatement 防止 SQL 注入
- 文件上传限制:文件上传路径和类型控制
🎨 界面特色
-
现代化设计:简洁美观的用户界面
-
响应式布局:适配不同屏幕尺寸
-
数据可视化:使用 Chart.js 展示统计图表
-
交互友好:清晰的操作反馈和提示信息
-
置顶标识:红色向上箭头(↑)标识置顶笔记