在 Java Web 开发领域,Spring 框架是一颗璀璨的明星,而 MVC(Model-View-Controller)架构模式则是 Spring 框架中核心的设计理念之一。MVC 模式通过将应用程序划分为三个主要部分:模型(Model)、视图(View)和控制器(Controller),极大地提高了代码的可维护性、可扩展性和可测试性。下面我们将深入探讨 MVC 模式的各个组成部分,并通过实际的 Java 代码示例来展示其工作原理。
MVC 模式的核心思想是将应用程序的不同功能模块进行分离,每个模块只负责特定的任务。具体来说:
下面是一个简单的表格总结 MVC 各部分的职责:
| 组件 | 职责 |
| —— | —— |
| 模型(Model) | 处理数据和业务逻辑 |
| 视图(View) | 呈现数据给用户 |
| 控制器(Controller) | 接收请求,调用模型处理,传递结果给视图 |
为了更好地理解 MVC 模式,我们将创建一个简单的 Java Web 应用程序,该应用程序用于显示用户信息。
首先,我们创建一个 User
类作为模型,用于表示用户信息。
// User.java
public 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.java
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public 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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://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/javaee
http://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 框架的使用。