
在 Java Web 开发领域,Spring 框架是一颗璀璨的明星,而 MVC(Model-View-Controller)架构模式则是 Spring 框架中核心的设计理念之一。MVC 模式通过将应用程序划分为三个主要部分:模型(Model)、视图(View)和控制器(Controller),极大地提高了代码的可维护性、可扩展性和可测试性。下面我们将深入探讨 MVC 模式的各个组成部分,并通过实际的 Java 代码示例来展示其工作原理。
MVC 模式的核心思想是将应用程序的不同功能模块进行分离,每个模块只负责特定的任务。具体来说:
下面是一个简单的表格总结 MVC 各部分的职责:
| 组件 | 职责 |
| —— | —— |
| 模型(Model) | 处理数据和业务逻辑 |
| 视图(View) | 呈现数据给用户 |
| 控制器(Controller) | 接收请求,调用模型处理,传递结果给视图 |
为了更好地理解 MVC 模式,我们将创建一个简单的 Java Web 应用程序,该应用程序用于显示用户信息。
首先,我们创建一个 User 类作为模型,用于表示用户信息。
// User.javapublic class User {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}}
我们使用 JSP 页面作为视图,用于展示用户信息。创建一个名为 userInfo.jsp 的文件。
<!-- userInfo.jsp --><!DOCTYPE html><html><head><title>User Information</title></head><body><h1>User Information</h1><p>Name: ${user.name}</p><p>Age: ${user.age}</p></body></html>
使用 Spring 框架的 @Controller 注解创建一个控制器类,用于处理用户请求并返回相应的视图。
// UserController.javaimport org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class UserController {@RequestMapping("/userInfo")public String showUserInfo(Model model) {// 创建用户对象,模拟业务逻辑User user = new User("John Doe", 30);// 将用户对象添加到模型中model.addAttribute("user", user);// 返回视图名称return "userInfo";}}
创建一个 Spring 配置文件 spring-servlet.xml,用于配置 Spring MVC 框架。
<!-- spring-servlet.xml --><beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 开启 Spring MVC 注解支持 --><mvc:annotation-driven /><!-- 扫描控制器类 --><context:component-scan base-package="com.example.controller" /><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" /></bean></beans>
在 web.xml 文件中配置 Spring MVC 的前端控制器 DispatcherServlet。
<!-- web.xml --><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>spring</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>
User 类封装了用户的基本信息,它只负责数据的存储和获取,不包含任何展示逻辑。userInfo.jsp 页面通过 EL 表达式 ${user.name} 和 ${user.age} 从模型中获取用户信息并展示给用户。UserController 类中的 showUserInfo 方法接收用户的请求,创建一个 User 对象,将其添加到模型中,并返回视图名称 userInfo。spring-servlet.xml 文件配置了 Spring MVC 的注解支持、组件扫描和视图解析器。视图解析器将视图名称 userInfo 解析为 /WEB-INF/views/userInfo.jsp。web.xml 文件配置了 Spring MVC 的前端控制器 DispatcherServlet,它负责接收所有的请求并将其分发给相应的控制器。通过以上的示例,我们可以看到 MVC 模式在 Java Web 开发中的强大之处。它将应用程序的不同功能模块进行了清晰的分离,使得代码的维护和扩展变得更加容易。在实际开发中,我们可以根据具体的需求对模型、视图和控制器进行进一步的优化和扩展。希望本文能帮助你更好地理解 MVC 模式和 Spring 框架的使用。