一、项目结构搭建(MVC 分层)
在 IDEA 中创建 Web 项目,建立以下目录结构:
项目名
├─ src/main/java
│ ├─ com.xxx.entity // Model层:实体类
│ ├─ com.xxx.dao // Model层:数据访问接口
│ ├─ com.xxx.dao.impl // Model层:数据访问实现
│ ├─ com.xxx.service // 业务逻辑层接口
│ ├─ com.xxx.service.impl // 业务逻辑层实现
│ └─ com.xxx.servlet // Controller层:Servlet
├─ web
│ ├─ login.jsp // View层:登录页
│ ├─ index.jsp // View层:主页面(显示info列表)
│ ├─ add.jsp // View层:新增页面
│ ├─ edit.jsp // View层:修改页面
│ └─ WEB-INF
│ ├─ lib // 存放Jar包
│ └─ web.xml // 项目配置文件
└─ c3p0-config.xml // c3p0连接池配置文件(放src目录)
三、核心模块实现
1. 基础配置
- c3p0 配置 :编写
c3p0-config.xml,配置 MySQL 连接信息(驱动、URL、用户名、密码); - web.xml 配置 :配置 Servlet 映射、欢迎页(比如默认跳转到
login.jsp)、Session 超时时间。
2. Model 层实现
- 实体类(Info.java) :对应
info表字段,编写属性、getter/setter 方法; - DAO 层 :
- 写
InfoDao接口,定义增删改查方法(addInfo、deleteInfo、updateInfo、queryInfo等); - 写
InfoDaoImpl实现类,用 DBUtils 的QueryRunner(基于 c3p0 数据源)实现接口方法;
- 写
- Service 层 :
- 写
InfoService接口,封装 DAO 方法; - 写
InfoServiceImpl实现类,调用 DAO 层完成业务逻辑。
- 写
3. Controller 层(Servlet)
- LoginServlet :
- 接收登录页面的用户名 / 密码参数;
- 调用 Service 层验证(查询 info 表中是否存在该用户);
- 验证成功:用 Session 保存用户信息,跳转
index.jsp;失败:提示错误并返回登录页; - 可选:用 Cookie 保存用户名(实现 "记住我" 功能)。
- InfoListServlet :
- 检查 Session 是否有登录信息(无则跳登录页);
- 调用 Service 查询 info 表所有数据,存入 request;
- 转发到
index.jsp显示列表。
- AddInfoServlet:接收 add.jsp 的表单数据,调用 Service 新增记录,重定向到 InfoListServlet。
- DeleteInfoServlet:接收要删除的 id 参数,调用 Service 删除记录,重定向到 InfoListServlet。
- EditInfoServlet :
- 接收 id 参数,查询该记录信息,存入 request 并转发到
edit.jsp; - 接收 edit.jsp 的修改数据,调用 Service 更新记录,重定向到 InfoListServlet。
- 接收 id 参数,查询该记录信息,存入 request 并转发到
- QueryInfoServlet :接收查询条件参数,调用 Service 按条件查询,转发到
index.jsp显示结果。
4. View 层(JSP 页面)
(1)login.jsp:编写登录表单,提交到 LoginServlet;可读取 Cookie 自动填充用户名。
(2)index.jsp:
- 显示 info 表数据列表(用 JSTL/EL 表达式遍历 request 中的数据);
- 增加 "新增" 按钮(跳 add.jsp)、每条记录的 "修改""删除" 按钮(对应 Servlet);
- 增加查询表单,提交到 QueryInfoServlet。
(3)add.jsp/edit.jsp:编写表单,提交到对应 Servlet,实现数据录入 / 回显。
四、测试与优化
1、功能测
启动 Tomcat,测试登录、增删改查是否正常(检查数据库数据变化、页面显示是否正确);
2、异常处
添加空值判断、数据库操作异常捕获,给出友好提示;
3、Session 验
确保未登录时直接访问 Servlet 会跳转到登录页。