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. 视图页面渲染完成后,返回给用户
相关推荐
Toormi5 分钟前
Go 1.24版本在性能方面有哪些提升?
开发语言·后端·golang
飘零未归人13 分钟前
SpringBoot 整合mongoDB并自定义连接池,实现多数据源配置
spring boot·后端·mongodb
m0_7482329233 分钟前
Spring Cloud Gateway 整合Spring Security
java·后端·spring
浅念同学1 小时前
JavaWeb-Servlet对象生命周期
java·网络·spring boot·servlet·java-ee·tomcat
Dyan_csdn1 小时前
【Java项目】基于Spring Boot的简历系统
java·数据库·spring boot·spring·tomcat
web_132334214361 小时前
Spring Boot+Vue项目从零入手
vue.js·spring boot·后端
Hello.Reader2 小时前
理解 Rust 的并发特性:`Send` 和 `Sync` 特征
开发语言·后端·rust
心灵Haven2 小时前
1_安装JDK和Hadoop
java·开发语言·hadoop
m0_748232392 小时前
qwenvl 以及qwenvl 2 模型架构理解
android·前端·后端
web136885658712 小时前
PHP For 循环
android·java·php