笔记管理系统
项目简介
这是一个基于JavaWeb技术栈开发的笔记管理系统,采用传统的Servlet+JSP+JDBC架构,实现了用户注册、登录、笔记发布、文件上传等核心功能。系统采用前后端分离的设计理念,所有页面请求统一通过Servlet处理,确保数据安全性和代码规范性。
技术栈
- 后端框架: Java Servlet (javax.servlet)
- 视图层: JSP (JavaServer Pages)
- 数据访问: JDBC (Java Database Connectivity)
- 数据库: MySQL 8.0
- 前端技术: HTML5 + CSS3 + JavaScript
- 服务器: 支持Servlet 3.0+的Web服务器(如Tomcat)
项目结构
biji/
├── database.sql # 数据库初始化脚本
├── src/ # Java源代码目录
│ └── com/biji/
│ ├── entity/ # 实体类
│ │ ├── User.java # 用户实体
│ │ └── Note.java # 笔记实体
│ ├── dao/ # 数据访问层
│ │ ├── UserDAO.java # 用户数据访问对象
│ │ └── NoteDAO.java # 笔记数据访问对象
│ ├── servlet/ # Servlet控制器
│ │ ├── LoginServlet.java # 登录处理
│ │ ├── RegisterServlet.java # 注册处理
│ │ ├── LogoutServlet.java # 退出登录
│ │ ├── VerifyCodeServlet.java # 验证码生成
│ │ ├── IndexServlet.java # 首页跳转
│ │ ├── NoteListServlet.java # 笔记列表
│ │ ├── NoteAddServlet.java # 笔记添加
│ │ ├── NoteEditServlet.java # 笔记编辑
│ │ ├── NoteDeleteServlet.java # 笔记删除
│ │ ├── FileUploadServlet.java # 文件上传
│ │ └── FileDownloadServlet.java # 文件下载
│ └── util/ # 工具类
│ ├── DBUtil.java # 数据库连接工具
│ └── MD5Util.java # MD5加密工具
├── WebContent/ # Web资源目录
│ ├── WEB-INF/
│ │ └── web.xml # Web应用配置文件
│ ├── css/
│ │ └── style.css # 样式文件
│ ├── js/
│ │ └── common.js # 公共JavaScript函数
│ ├── login.jsp # 登录页面
│ ├── register.jsp # 注册页面
│ ├── note_list.jsp # 笔记列表页面
│ ├── note_add.jsp # 笔记添加页面
│ └── note_edit.jsp # 笔记编辑页面
└── README.md # 项目说明文档
核心功能
1. 用户管理
- 用户注册: 支持用户名、密码、邮箱注册,密码采用MD5加密存储
- 用户登录: 支持用户名密码登录,包含验证码验证机制
- 会话管理: 使用Session管理用户登录状态,确保用户只能访问自己的数据
2. 笔记管理
- 笔记列表: 展示当前用户的所有笔记,支持按更新时间倒序排列
- 发布笔记: 支持标题、内容编辑,可上传图片和附件文件
- 编辑笔记: 支持修改笔记内容,可重新上传图片和文件
- 删除笔记: 支持删除笔记,自动清理关联数据
3. 文件管理
- 图片上传: 支持常见图片格式上传,自动生成唯一文件名
- 文件上传: 支持任意格式文件上传,最大支持10MB
- 文件下载: 支持已上传文件的下载功能
4. 安全特性
- 密码加密: 使用MD5算法对用户密码进行加密存储
- 验证码: 登录时生成图形验证码,防止暴力破解
- 权限控制: 用户只能查看和操作自己的笔记数据
- SQL注入防护: 使用PreparedStatement防止SQL注入攻击
代码特点
1. 架构设计
- MVC模式: 采用经典的MVC三层架构,职责分离清晰
- Model: 实体类(Entity)和数据访问层(DAO)
- View: JSP页面展示
- Controller: Servlet处理请求和响应
- 分层设计: 严格按照实体层、数据访问层、业务逻辑层、控制层进行组织
2. 代码规范
- 统一编码: 所有文件使用UTF-8编码,Servlet统一设置字符编码
- 命名规范: 遵循Java命名规范,类名使用大驼峰,方法名使用小驼峰
- 注释完整: 所有类和方法都有完整的JavaDoc注释
3. 安全性设计
- 密码加密: 用户密码使用MD5加密,确保即使数据库泄露也无法直接获取明文密码
- 参数验证: 前后端双重验证,防止非法数据提交
- 权限校验: 每个需要登录的操作都进行Session验证
- SQL安全: 使用PreparedStatement预编译,防止SQL注入
4. 用户体验
- 统一UI: 所有页面采用统一的样式设计,包含Header、左侧菜单、右侧内容区、Footer
- 响应式设计: 页面布局合理,适配不同屏幕尺寸
- 交互友好: 提供操作提示、确认对话框、错误提示等交互功能
- 文件预览: 图片上传后即时预览,文件上传后显示下载链接
5. 技术实现细节
- 字符编码处理: 所有Servlet在处理POST请求前设置UTF-8编码
- 文件上传: 使用Servlet 3.0的Part API实现文件上传,支持大文件
- 验证码生成: 使用Java Graphics API动态生成验证码图片
- 数据库连接: 使用JDBC连接池思想,封装数据库连接工具类
- 异常处理: 完善的异常处理机制,确保系统稳定运行
数据库设计
用户表(user)
id: 用户ID(主键,自增)username: 用户名(唯一索引)password: 密码(MD5加密)email: 邮箱create_time: 创建时间
笔记表(note)
id: 笔记ID(主键,自增)user_id: 用户ID(外键,关联user表)title: 笔记标题content: 笔记内容file_path: 附件文件路径image_path: 图片路径create_time: 创建时间update_time: 更新时间
部署说明
1. 环境要求
- JDK 1.8或更高版本
- MySQL 8.0数据库
- Tomcat 8.5或更高版本(支持Servlet 3.0+)
- 支持Servlet 3.0+的Web服务器
2. 数据库配置
- 执行
database.sql脚本创建数据库和表结构 - 修改
src/com/biji/util/DBUtil.java中的数据库连接信息:- URL: 数据库连接地址
- USERNAME: 数据库用户名
- PASSWORD: 数据库密码
3. 项目导入
- 将项目导入到IntelliJ IDEA
- 配置项目为Web项目,设置WebContent为Web资源根目录
- 添加必要的JAR包到
WebContent/WEB-INF/lib目录:mysql-connector-java-8.0.x.jar(MySQL驱动)servlet-api.jar(Servlet API,通常由Tomcat提供)jsp-api.jar(JSP API,通常由Tomcat提供)
4. 服务器配置
- 配置Tomcat服务器
- 部署项目到Tomcat
- 启动服务器
- 访问
http://localhost:8080/biji/login.jsp
使用说明
1. 用户注册
- 访问注册页面,填写用户名、密码、确认密码和邮箱
- 系统会验证用户名是否已存在
- 注册成功后跳转到登录页面
2. 用户登录
- 输入用户名和密码
- 输入验证码(点击验证码图片可刷新)
- 登录成功后跳转到笔记列表页面
3. 笔记管理
- 查看笔记: 在笔记列表页面查看所有笔记
- 发布笔记: 点击"发布新笔记",填写标题和内容,可选择性上传图片和文件
- 编辑笔记: 在笔记列表中点击"编辑"按钮,修改笔记内容
- 删除笔记: 在笔记列表中点击"删除"按钮,确认后删除
4. 文件上传
- 图片上传: 在发布/编辑笔记页面,点击图片上传区域选择图片,上传成功后自动显示预览
- 文件上传: 在发布/编辑笔记页面,点击文件上传区域选择文件,上传成功后显示下载链接
注意事项
- 数据库连接: 确保数据库服务已启动,连接信息正确
- 文件上传目录: 文件上传到
WebContent/uploads目录,确保该目录有写入权限 - 字符编码: 确保数据库、JSP页面、Servlet都使用UTF-8编码
- Session管理: 用户登录后Session有效,关闭浏览器后需要重新登录
- 文件大小限制: 默认最大文件上传大小为10MB,可在
FileUploadServlet中修改
开发历程
本项目采用传统的JavaWeb开发方式,不使用Maven等构建工具,所有依赖需要手动添加。项目严格按照用户需求实现,包括:
- 不使用Filter: 所有请求处理都在Servlet中完成
- 使用javax包: 使用传统的javax.servlet而非jakarta.servlet
- 统一Servlet跳转: 所有JSP页面链接都通过Servlet进行跳转
- 完整的前后端验证: 前后端都有相应的数据验证逻辑
- 区分GET和POST: 所有Servlet都正确区分GET和POST请求处理
- 本地资源: 所有CSS和JS文件都使用本地文件,不引用在线资源
后续优化建议
-
分页功能: 当笔记数量较多时,可以添加分页功能
-
搜索功能: 添加笔记标题和内容的搜索功能
-
分类管理: 为笔记添加分类功能,方便管理
-
富文本编辑器: 集成富文本编辑器,提升内容编辑体验
-
图片压缩: 上传图片时自动压缩,节省存储空间
-
文件类型限制: 限制可上传的文件类型,提高安全性