Spring MVC 是一个基于 Java 的 Web 框架,用于构建 Web 应用程序。它基于 MVC(Model-View-Controller)设计模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个主要组件。以下是 Spring MVC 的运行流程:
客户端发起请求: 客户端(浏览器)通过 URL 发起请求,请求到达服务器。
DispatcherServlet 接收请求: 请求首先被 DispatcherServlet 接收,DispatcherServlet 是 Spring MVC 的核心控制器,它负责协调整个请求处理过程。
HandlerMapping 查找处理器: DispatcherServlet 通过 HandlerMapping 查找合适的处理器(Controller),HandlerMapping 将请求映射到对应的处理器。
HandlerAdapter 调用处理器: DispatcherServlet 调用 HandlerAdapter,HandlerAdapter 负责调用实际的处理器方法(Controller 方法)来处理请求。
ModelAndView 处理数据和视图: 处理器方法处理请求后,返回一个 ModelAndView 对象,其中包含处理结果的数据和要显示的视图。
ViewResolver 解析视图: DispatcherServlet 通过 ViewResolver 解析视图,找到具体的视图实现。
视图渲染: 视图渲染将模型数据填充到视图中,生成最终的响应内容。
响应返回给客户端: DispatcherServlet 将最终的响应返回给客户端,完成请求处理。
以下是一个简单的 Spring MVC 的代码示例:
// 控制器类
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/greet")
public ModelAndView greet() {
// 处理请求,返回数据和视图
String message = "Hello, Spring MVC!";
ModelAndView modelAndView = new ModelAndView("greetView");
modelAndView.addObject("message", message);
return modelAndView;
}
}
// Spring MVC 配置类
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example")
public class WebConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
// 视图定义(/WEB-INF/views/greetView.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Greet Page</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
在上述示例中,HelloController
类是一个简单的控制器,处理 /hello/greet
请求,并返回一个包含消息的 ModelAndView 对象。配置类 WebConfig
配置了视图解析器,并指定了视图文件的位置。最终,greetView.jsp
视图文件渲染了模型数据,生成最终的响应内容。