SpringMVC的执行流程?

Spring MVC 是一个基于 Servlet 的轻量级 Web 框架,用于构建 Web 应用程序。理解 Spring MVC 的执行流程对于开发和调试 Web 应用程序非常重要。
Spring MVC 的执行流程
Spring MVC 的执行流程可以分为以下几个主要步骤:
- 前端控制器(DispatcherServlet)
- 处理器映射器(HandlerMapping)
- 处理器适配器(HandlerAdapter)
- 处理器(Controller)
- 视图解析器(ViewResolver)
- 视图(View)
1. 前端控制器(DispatcherServlet)
DispatcherServlet 是 Spring MVC 的核心,它拦截所有的 HTTP 请求,并将请求分发到相应的处理器(Controller)。
实际场景
假设我们有一个简单的 Web 应用程序,用户访问 /users 路径时,需要显示用户列表。
代码示例
在 web.xml 中配置 DispatcherServlet:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="3.0">
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2. 处理器映射器(HandlerMapping)
HandlerMapping 负责将请求映射到相应的处理器(Controller)。Spring MVC 提供了多种 HandlerMapping 实现,最常用的是 RequestMappingHandlerMapping。
实际场景
假设我们有一个 UserController,它处理 /users 路径的请求。
代码示例
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class UserController {
@GetMapping("/users")
public String listUsers() {
return "users";
}
}
3. 处理器适配器(HandlerAdapter)
HandlerAdapter 负责调用处理器(Controller)的方法。Spring MVC 提供了多种 HandlerAdapter 实现,最常用的是 RequestMappingHandlerAdapter。
4. 处理器(Controller)
处理器(Controller)是处理用户请求的类,通常使用 @Controller 注解标记。处理器方法返回一个字符串,表示视图的名称。
实际场景
假设我们有一个 UserController,它处理 /users 路径的请求,并返回用户列表页面。
代码示例
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class UserController {
@GetMapping("/users")
public String listUsers() {
// 这里可以添加业务逻辑,例如从数据库获取用户列表
return "users"; // 返回视图名称
}
}
5. 视图解析器(ViewResolver)
ViewResolver 负责解析视图名称,并返回对应的视图对象。Spring MVC 提供了多种 ViewResolver 实现,最常用的是 InternalResourceViewResolver。
实际场景
假设我们有一个 users.jsp 页面,用于显示用户列表。
代码示例
在 Spring 配置文件中配置 ViewResolver:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
6. 视图(View)
视图是最终返回给用户的页面,通常是一个 JSP 文件。视图解析器会根据视图名称和配置的前缀、后缀来解析视图路径。
实际场景
假设我们有一个 users.jsp 页面,用于显示用户列表。
代码示例
users.jsp 文件内容:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>User List</title>
</head>
<body>
<h1>User List</h1>
<!-- 这里可以添加用户列表的显示逻辑 -->
</body>
</html>
Spring MVC 执行流程总结
-
用户发送请求到
DispatcherServlet- 用户访问
/users路径,请求被DispatcherServlet拦截。
- 用户访问
-
DispatcherServlet查询HandlerMappingDispatcherServlet通过HandlerMapping找到处理该请求的Controller和方法。
-
HandlerMapping返回处理器(Controller)HandlerMapping返回UserController和listUsers方法。
-
DispatcherServlet查询HandlerAdapterDispatcherServlet通过HandlerAdapter调用UserController的listUsers方法。
-
HandlerAdapter调用处理器(Controller)HandlerAdapter调用listUsers方法,方法返回视图名称users。
-
HandlerAdapter返回视图名称HandlerAdapter返回视图名称users给DispatcherServlet。
-
DispatcherServlet查询ViewResolverDispatcherServlet通过ViewResolver解析视图名称users,找到对应的视图路径/WEB-INF/views/users.jsp。
-
ViewResolver返回视图ViewResolver返回视图对象给DispatcherServlet。
-
DispatcherServlet渲染视图DispatcherServlet渲染视图/WEB-INF/views/users.jsp,并将结果返回给用户。
总结
Spring MVC 的执行流程包括前端控制器(DispatcherServlet)、处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)、处理器(Controller)、视图解析器(ViewResolver)和视图(View)。通过理解这些组件的作用和交互,可以更好地开发和调试 Spring MVC 应用程序。
SpringMVC执行流程详解

1568

被折叠的 条评论
为什么被折叠?



