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. 视图页面渲染完成后,返回给用户
相关推荐
勇敢牛牛_14 分钟前
使用Rust实现服务配置/注册中心
开发语言·后端·rust·注册中心·配置中心
deepwater_zone21 分钟前
Go语言核心技术
后端·golang
hzzzzzo033 分钟前
微服务网关全解析:从入门到实践
java·开发语言·微服务
纪莫37 分钟前
技术面:Spring (bean的生命周期、创建方式、注入方式、作用域)
java·spring·java面试⑧股
We....1 小时前
Java多线程分块下载文件
java·开发语言
不秃的开发媛1 小时前
Java连接池详解:从Oracle到TiDB的随缘之旅
java·oracle·tidb
Pluchon1 小时前
硅基计划3.0 Map类&Set类
java·开发语言·数据结构·算法·哈希算法·散列表
Angelyb2 小时前
微服务保护和分布式事务
java·微服务·架构
七夜zippoe2 小时前
缓存三大劫攻防战:穿透、击穿、雪崩的Java实战防御体系(一)
java·开发语言·缓存
帧栈2 小时前
开发避坑指南(46):Java Stream 对List的BigDecimal字段进行求和
java