编程自学指南:java程序设计开发,MVC 设计模式基础知识课件
一、课程信息
学习目标
- 理解 MVC 模式的核心思想:职责分离
- 掌握 MVC 三组件(Model-View-Controller)的协作流程
- 能使用 MVC 模式重构 Servlet/JSP 项目
- 理解 MVC 与 JavaWeb 技术栈的关系
二、课程导入:生活中的 MVC
🌰 餐厅模型类比
| 角色 | MVC 组件 | 对应技术 | 职责描述 |
|---|---|---|---|
| 顾客 | View | JSP/HTML | 展示菜单、提交订单 |
| 服务员 | Controller | Servlet | 接收订单、协调厨房与顾客 |
| 厨师 | Model | Java 业务类 | 烹饪食物(处理数据) |
三、MVC 核心概念
🔍 1. 模式定义
MVC(Model-View-Controller) 是一种软件架构模式,通过将程序分为三个核心组件,实现关注点分离:
- Model(模型):处理数据与业务逻辑
- View(视图):负责用户界面展示
- Controller(控制器):接收输入、协调 Model 与 View
🔍 2. 组件关系图

graph TD
User -->|请求| Controller
Controller -->|调用| Model
Model -->|返回数据| Controller
Controller -->|选择视图| View
View -->|展示| User
四、MVC 与 JavaWeb 技术映射
| MVC 组件 | JavaWeb 技术 | 典型实现方式 |
|---|---|---|
| Model | Java 类(POJO/Service/DAO) | 处理数据库操作、业务逻辑 |
| View | JSP/HTML/Thymeleaf | 渲染页面(EL+JSTL) |
| Controller | Servlet/Filter | 接收请求、转发数据 |
五、实战案例:学生管理系统
🔥 1. 项目结构
src/
├─ controller/
│ └─ StudentServlet.java # 控制器
├─ model/
│ ├─ Student.java # 实体类
│ └─ StudentService.java # 业务逻辑
└─ view/
├─ list.jsp # 列表页
└─ add.jsp # 添加页
🔥 2. Model 层开发
实体类(Student.java)
public class Student {
private int id;
private String name;
private int age;
// getter/setter 省略
}
业务逻辑(StudentService.java)
import java.util.ArrayList;
import java.util.List;
public class StudentService {
private static List<Student> students = new ArrayList<>();
static { // 初始化数据
students.add(new Student(1, "张三", 20));
students.add(new Student(2, "李四", 21));
}
public List<Student> getAllStudents() {
return students;
}
public void addStudent(Student student) {
students.add(student);
}
}
🔥 3. Controller 层开发(StudentServlet.java)
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/student")
public class StudentServlet extends HttpServlet {
private StudentService service = new StudentService();
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String action = req.getParameter("action");
if ("list".equals(action)) {
listStudents(req, resp);
} else if ("add".equals(action)) {
showAddForm(req, resp);
}
}
private void listStudents(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
List<Student> studentList = service.getAllStudents();
req.setAttribute("students", studentList);
req.getRequestDispatcher("/view/list.jsp").forward(req, resp);
}
private void showAddForm(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.getRequestDispatcher("/view/add.jsp").forward(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String name = req.getParameter("name");
int age = Integer.parseInt(req.getParameter("age"));
service.addStudent(new Student(students.size()+1, name, age));
resp.sendRedirect("/student?action=list");
}
}
🔥 4. View 层开发
列表页(list.jsp)
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>学生列表</h1>
<a href="/student?action=add">添加学生</a>
<table border="1">
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<c:forEach items="${students}" var="s">
<tr>
<td>${s.id}</td>
<td>${s.name}</td>
<td>${s.age}</td>
</tr>
</c:forEach>
</table>
添加页(add.jsp)
<%@ page contentType="text/html;charset=UTF-8" %>
<h1>添加学生</h1>
<form action="/student" method="post">
姓名:<input type="text" name="name"><br>
年龄:<input type="number" name="age"><br>
<input type="submit" value="提交">
</form>
六、MVC 流程解析
🔄 1. 请求处理流程
- 用户访问
http://localhost:8080/student?action=list - StudentServlet 接收请求(Controller)
- 调用 StudentService 获取数据(Model)
- 将数据存入 request 作用域
- 转发到 list.jsp 显示(View)
🔄 2. 数据提交流程
- 用户在 add.jsp 提交表单(View)
- StudentServlet 接收 POST 请求(Controller)
- 调用 StudentService 添加数据(Model)
- 重定向到列表页(避免重复提交)
七、关联知识:MVC 与其他技术
🔗 1. 与 Servlet 的关系
- Servlet作为 Controller:处理请求分发、参数解析
- 缺点:传统 Servlet 混合了控制逻辑与视图渲染
🔗 2. 与JSP 的关系
- JSP 作为 View:通过 EL+JSTL 展示数据
- 最佳实践:JSP 只做数据展示,不包含业务逻辑
🔗 3. 与 Filter的协作
@WebFilter(urlPatterns = "/*")
public class AuthFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
// 在 Controller 执行前验证权限
if (isLogin(req)) {
chain.doFilter(req, res);
} else {
((HttpServletResponse)res).sendRedirect("/login.jsp");
}
}
}
八、课堂练习
练习 1:添加删除功能
任务:
- 在 StudentServlet 中添加
delete方法 - 在 list.jsp 中为每个学生添加 “删除” 链接
- 实现删除后刷新列表
练习 2:错误处理优化
任务:
- 当添加年龄为负数时,在 add.jsp 显示错误信息
- 使用 request 作用域传递错误消息
九、课程总结
知识图谱:
MVC 模式
↳ 核心原则:关注点分离(SoC)
↳ 组件职责:
✅ Model:数据与业务(Java 类)
✅ View:界面展示(JSP/HTML)
✅ Controller:请求调度(Servlet)
↳ 优势:可维护性↑、可扩展性↑、团队协作效率↑
口诀记忆:
“MVC 模式分三层,模型视图控制器,
业务逻辑归模型,界面展示看视图,
控制器来做调度,请求响应不糊涂!”
十、课后作业
必做 1:用户管理系统
要求:
- 实现用户的登录、注册、列表展示
- 严格遵循 MVC 分层
- 使用 Filter 实现登录状态验证
必做 2:MVC 与 RESTful 结合
任务:
- 修改 StudentServlet 支持 RESTful 风格
- GET /students :获取列表
- POST /students :添加学生
- DELETE /students/{id} :删除学生

2363

被折叠的 条评论
为什么被折叠?



