Java安全
Java 基础知识
01概述
02变量
03运算符
04程序控制语句
05数组
06面向对象编程
07代码练习
08重载
09作用域
10构造方法&构造器
11this
12包
13修饰符
14封装
15继承
16super
17覆盖&重写
18多态
19零钱通项目
20类变量&类方法
21抽象类
22接口
23内部类
24枚举
25泛型
26常用API
27lambda表达式
28正则表达式
29异常
30File&IO流
31日志技术
32多线程
33网络编程
01反射
02反序列化
03JVM
04JDBC
05RMI
06JRMP
07JNDI
08CDI
09JPA
10Servlet
11Filter
12MVC模型
13MVC框架
14类的加载机制
15Maven
16注解
17ORM
18CC链
19JNDI注入
Log4j2
-
+
首页
12MVC模型
MVC(Model-View-Controller,模型 - 视图 - 控制器)是一种软件架构设计模式,旨在通过分离应用程序的 “数据处理”“用户界面” 和 “控制逻辑”,实现代码的解耦、复用和维护性提升。  ## 核心组成 MVC将应用程序分为三个核心模块,每个模块承担明确的职责。 ### 模型层(Model) 核心职责:管理应用程序的核心数据和业务逻辑,是应用的 “数据中心” 和 “大脑”。 - 数据管理:存储和处理应用的核心数据(如用户信息、订单数据),通常对应数据库中的实体(如 Java 中的User类、Order类)。 - 业务逻辑:实现具体的业务规则(如用户注册验证、订单金额计算、权限判断等),不依赖于界面展示逻辑。 - 特性:与 “视图”(View)和 “控制器”(Controller)完全解耦,当视图或控制器变化时,模型无需修改。 ### 视图层(View) 核心职责:负责数据的展示和用户交互界面,是用户能直接看到和操作的部分。 - 数据展示:将 Model 中的数据以可视化形式呈现(如网页、APP 界面、桌面窗口),例如 JSP 页面展示用户列表、HTML 表单展示订单信息。 - 用户输入:接收用户的操作(如点击按钮、输入文本),但不处理业务逻辑,仅将输入传递给控制器。 - 特性:仅关注 “如何展示”,不关心 “数据从哪来” 或 “如何处理”,同一个 Model 可以对应多个 View(如 PC 端和移动端视图)。 ### 控制层(Controller) 核心职责:作为 Model 和 View 之间的 “中间人”,接收用户请求,协调 Model 和 View 完成处理流程。 - 接收请求:接收用户通过 View 发起的请求(如表单提交、URL 访问)。 - 调度逻辑:根据请求类型调用 Model 的业务方法(如调用UserService.login()验证登录)。 - 选择视图:获取 Model 处理后的结果,选择合适的 View 展示(如登录成功跳转首页,失败返回登录页)。 - 特性:不处理业务逻辑,也不负责数据展示,仅专注于 “流程控制”。 ## 工作流程 MVC 的交互流程遵循 “用户请求→控制器→模型→视图→用户” 的闭环,具体步骤如下: 1. 用户发起请求:用户通过 View(如网页按钮、表单)触发请求(如点击 “登录” 按钮,发送/login请求)。 2. 控制器接收请求:Controller(如 Java Web 中的 Servlet)拦截请求,解析请求参数(如用户名、密码)。 3. 控制器调用模型:Controller 根据请求逻辑,调用 Model 中的业务方法(如UserModel.checkLogin(username, password))。 4. 模型处理业务:Model 执行业务逻辑(如查询数据库验证账号密码),生成处理结果(如 “登录成功” 及用户信息)。 5. 模型返回结果:Model 将处理结果返回给 Controller。 6. 控制器选择视图:Controller 根据结果选择对应的 View(如登录成功→home.jsp,失败→login.jsp)。 7. 视图渲染响应:View 接收 Model 的结果数据,渲染成用户可理解的界面(如 HTML 页面),返回给用户。 ## 代码示例 ### Model ```java public class UserService { // 验证登录(业务逻辑) public boolean login(String username, String password) { // 实际中会调用DAO查询数据库 return "admin".equals(username) && "123456".equals(password); } } ``` ### Controller ```java @WebServlet("/login") public class LoginServlet extends HttpServlet { private UserService userService = new UserService(); @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1. 接收请求参数 String username = req.getParameter("username"); String password = req.getParameter("password"); // 2. 调用Model处理业务 boolean success = userService.login(username, password); // 3. 选择View if (success) { req.setAttribute("username", username); // 传递数据给View req.getRequestDispatcher("/home.jsp").forward(req, resp); // 跳转首页 } else { req.setAttribute("error", "用户名或密码错误"); req.getRequestDispatcher("/login.jsp").forward(req, resp); // 跳转登录页 } } } ``` ### View ```jsp <html> <body> <h1>欢迎回来,${username}!</h1> <!-- 展示Model传递的用户名 --> </body> </html> ```
毛林
2025年10月27日 21:01
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码