微信登录

MVC 架构 - MVC 简介 - 模型 视图 控制器模式

MVC 架构 - MVC 简介 - 模型 视图 控制器模式

一、引言

在 Java Web 开发领域,Spring 框架是一颗璀璨的明星,而 MVC(Model-View-Controller)架构模式则是 Spring 框架中核心的设计理念之一。MVC 模式通过将应用程序划分为三个主要部分:模型(Model)、视图(View)和控制器(Controller),极大地提高了代码的可维护性、可扩展性和可测试性。下面我们将深入探讨 MVC 模式的各个组成部分,并通过实际的 Java 代码示例来展示其工作原理。

二、MVC 模式概述

MVC 模式的核心思想是将应用程序的不同功能模块进行分离,每个模块只负责特定的任务。具体来说:

  • 模型(Model):负责处理应用程序的数据和业务逻辑。它可以是数据库操作、算法计算等。模型是独立于视图和控制器的,它不关心数据如何展示给用户,只专注于数据的处理和存储。
  • 视图(View):负责将模型中的数据呈现给用户。它可以是 HTML 页面、JSP 页面、JSON 数据等。视图只负责数据的展示,不包含任何业务逻辑。
  • 控制器(Controller):负责接收用户的请求,调用模型进行相应的处理,并将处理结果传递给视图进行展示。控制器是模型和视图之间的桥梁,它协调了两者之间的交互。

下面是一个简单的表格总结 MVC 各部分的职责:
| 组件 | 职责 |
| —— | —— |
| 模型(Model) | 处理数据和业务逻辑 |
| 视图(View) | 呈现数据给用户 |
| 控制器(Controller) | 接收请求,调用模型处理,传递结果给视图 |

三、演示代码

为了更好地理解 MVC 模式,我们将创建一个简单的 Java Web 应用程序,该应用程序用于显示用户信息。

1. 模型(Model)

首先,我们创建一个 User 类作为模型,用于表示用户信息。

  1. // User.java
  2. public class User {
  3. private String name;
  4. private int age;
  5. public User(String name, int age) {
  6. this.name = name;
  7. this.age = age;
  8. }
  9. public String getName() {
  10. return name;
  11. }
  12. public int getAge() {
  13. return age;
  14. }
  15. }

2. 视图(View)

我们使用 JSP 页面作为视图,用于展示用户信息。创建一个名为 userInfo.jsp 的文件。

  1. <!-- userInfo.jsp -->
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <title>User Information</title>
  6. </head>
  7. <body>
  8. <h1>User Information</h1>
  9. <p>Name: ${user.name}</p>
  10. <p>Age: ${user.age}</p>
  11. </body>
  12. </html>

3. 控制器(Controller)

使用 Spring 框架的 @Controller 注解创建一个控制器类,用于处理用户请求并返回相应的视图。

  1. // UserController.java
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.ui.Model;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. @Controller
  6. public class UserController {
  7. @RequestMapping("/userInfo")
  8. public String showUserInfo(Model model) {
  9. // 创建用户对象,模拟业务逻辑
  10. User user = new User("John Doe", 30);
  11. // 将用户对象添加到模型中
  12. model.addAttribute("user", user);
  13. // 返回视图名称
  14. return "userInfo";
  15. }
  16. }

4. 配置 Spring MVC

创建一个 Spring 配置文件 spring-servlet.xml,用于配置 Spring MVC 框架。

  1. <!-- spring-servlet.xml -->
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/mvc
  9. http://www.springframework.org/schema/mvc/spring-mvc.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context.xsd">
  12. <!-- 开启 Spring MVC 注解支持 -->
  13. <mvc:annotation-driven />
  14. <!-- 扫描控制器类 -->
  15. <context:component-scan base-package="com.example.controller" />
  16. <!-- 配置视图解析器 -->
  17. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  18. <property name="prefix" value="/WEB-INF/views/" />
  19. <property name="suffix" value=".jsp" />
  20. </bean>
  21. </beans>

5. 配置 web.xml

web.xml 文件中配置 Spring MVC 的前端控制器 DispatcherServlet

  1. <!-- web.xml -->
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5. http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  6. version="4.0">
  7. <servlet>
  8. <servlet-name>spring</servlet-name>
  9. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10. <init-param>
  11. <param-name>contextConfigLocation</param-name>
  12. <param-value>/WEB-INF/spring-servlet.xml</param-value>
  13. </init-param>
  14. <load-on-startup>1</load-on-startup>
  15. </servlet>
  16. <servlet-mapping>
  17. <servlet-name>spring</servlet-name>
  18. <url-pattern>/</url-pattern>
  19. </servlet-mapping>
  20. </web-app>

四、代码解释

  1. 模型(Model)User 类封装了用户的基本信息,它只负责数据的存储和获取,不包含任何展示逻辑。
  2. 视图(View)userInfo.jsp 页面通过 EL 表达式 ${user.name}${user.age} 从模型中获取用户信息并展示给用户。
  3. 控制器(Controller)UserController 类中的 showUserInfo 方法接收用户的请求,创建一个 User 对象,将其添加到模型中,并返回视图名称 userInfo
  4. Spring MVC 配置spring-servlet.xml 文件配置了 Spring MVC 的注解支持、组件扫描和视图解析器。视图解析器将视图名称 userInfo 解析为 /WEB-INF/views/userInfo.jsp
  5. web.xml 配置web.xml 文件配置了 Spring MVC 的前端控制器 DispatcherServlet,它负责接收所有的请求并将其分发给相应的控制器。

五、总结

通过以上的示例,我们可以看到 MVC 模式在 Java Web 开发中的强大之处。它将应用程序的不同功能模块进行了清晰的分离,使得代码的维护和扩展变得更加容易。在实际开发中,我们可以根据具体的需求对模型、视图和控制器进行进一步的优化和扩展。希望本文能帮助你更好地理解 MVC 模式和 Spring 框架的使用。

MVC 架构 - MVC 简介 - 模型 视图 控制器模式