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. 视图页面渲染完成后,返回给用户
相关推荐
paopaokaka_luck5 小时前
英语单词学习系统的设计与实现(基于艾宾浩斯遗忘曲线的智能复习机制、语音朗读、多题型测试与错题自动收录、Echarts图形化分析)
vue.js·spring boot·后端·echarts
自信的未来6 小时前
JSON 工具|Web Worker 工程化打包 + 语法自动修复 + 多语言代码生成实战
java·前端·json
Brookty6 小时前
【JavaEE】线程安全(一).4:写块串行保安全、CAS
java·开发语言·java-ee·多线程·线程安全
我叫黑大帅6 小时前
MySQL 并发插入竞态问题:原子写入实践指南
后端·mysql·面试
怕孤单的草丛6 小时前
缓存管理面临的主要问题
java·数据库·缓存
zhangxingchao7 小时前
AI大模型核心八:从 Agent Skill、长文档 RAG 到知识库更新与训练策略
前端·人工智能·后端
我叫黑大帅7 小时前
别再手动写 updated_at了,这坑我踩过
后端·面试·go
zhangxingchao7 小时前
AI大模型核心七:从 Workflow、RAG、记忆治理到幂等性
前端·人工智能·后端
犀利豆9 小时前
AI in Harness(二)
java·人工智能·后端