SpringMVC处理请求核心流程

一、前言

SpringMVC是一个基于Java的Web框架,它使用MVC(Model-View-Controller)设计模式来处理Web请求。在SpringMVC中,请求处理的核心流程主要包括以下几个步骤:

1、用户发送请求到前端控制器(DispatcherServlet)。

2、前端控制器接收到请求后,根据请求信息找到相应的处理器映射器(Handler Mapping)。

3、处理器映射器根据请求URL找到具体的处理器(Controller)。

4、前端控制器调用处理器适配器(Handler Adapter)来执行处理器。

5、处理器执行完成后,返回一个ModelAndView对象给前端控制器。

6、前端控制器根据ModelAndView对象中的视图名称,找到相应的视图解析器(View Resolver)。

7、视图解析器将视图名称解析为具体的视图页面。

8、前端控制器将ModelAndView对象传递给视图页面,视图页面使用Model中的数据渲染页面。

9、视图页面渲染完成后,返回给用户。

二、例子

java 复制代码
// 1. 用户发送请求到前端控制器(DispatcherServlet)  
// 请求URL:/hello  
  
// 2. 前端控制器接收到请求后,根据请求信息找到相应的处理器映射器(Handler Mapping)  
// 处理器映射器根据请求URL找到具体的处理器(Controller)  
@Controller  
public class HelloController {  
      
    // 3. 处理器(Controller)处理请求  
    @RequestMapping("/hello")  
    public String hello(Model model) {  
        String message = "Hello, SpringMVC!";  
        model.addAttribute("message", message);  
        return "hello"; // 返回视图名称  
    }  
}  
  
// 4. 前端控制器调用处理器适配器(Handler Adapter)来执行处理器  
// 5. 处理器执行完成后,返回一个ModelAndView对象给前端控制器  
// ModelAndView对象包含视图名称和Model数据  
  
// 6. 前端控制器根据ModelAndView对象中的视图名称,找到相应的视图解析器(View Resolver)  
// 视图解析器将视图名称解析为具体的视图页面  
// 在SpringMVC的配置文件中配置视图解析器:  
<!-- 视图解析器 -->  
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    <property name="prefix" value="/WEB-INF/views/" />  
    <property name="suffix" value=".jsp" />  
</bean>  
  
// 7. 视图解析器将视图名称解析为具体的视图页面:/WEB-INF/views/hello.jsp  
// 8. 前端控制器将ModelAndView对象传递给视图页面,视图页面使用Model中的数据渲染页面  
// 在hello.jsp页面中使用EL表达式获取Model中的数据:  
<html>  
<head>  
    <title>Hello SpringMVC</title>  
</head>  
<body>  
    <h1>${message}</h1> <!-- 显示Model中的数据 -->  
</body>  
</html>  
  
// 9. 视图页面渲染完成后,返回给用户
相关推荐
百万蹄蹄向前冲2 小时前
Trae Genimi3跟着官网学实时通信 Socket.io框架
前端·后端·websocket
狂炫冰美式3 小时前
TRAE SOLO 驱动:重构AI模拟面试产品的复盘
前端·后端·面试
x***38165 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
S***84885 小时前
SpringSecurity踢出指定用户
java
p***s915 小时前
Spring数据库原理 之 DataSource
java·数据库·spring
adobehu5 小时前
麒麟系统安装jdk17
java·jdk
spencer_tseng5 小时前
java.util.IllegalFormatPrecisionException
java·printf
虹科网络安全5 小时前
艾体宝干货 | Redis Java 开发系列#1 从零开始的环境搭建与实践指南
java·数据库·redis
铅笔侠_小龙虾6 小时前
Arthas 命令
java·jvm
seeyoutlb6 小时前
微服务全局日志处理
java·python·微服务