SpringMVC的工作流程

news2024/11/15 9:16:07

1、SpringMVC的定义

Spring MVC是基于Java的开源Web框架,它是Spring框架的一部分,用于构建MVC(Model-View-Controller)模式的Web应用程序。它提供了一种灵活且强大的方式来开发Web应用程序,并将应用程序的不同层进行解耦。

图片来源:https://zhuanlan.zhihu.com/p/573936691

在Spring MVC中,模型(Model)表示应用程序的数据和业务逻辑;视图(View)负责呈现数据给用户;控制器(Controller)处理用户请求、调用适当的模型处理逻辑,并将结果传递给视图进行展示。

Spring MVC借助于DispatcherServlet作为前端控制器,它是整个请求处理流程的核心。它负责接收所有的HTTP请求,并将请求分发给相应的处理器(Controller),然后处理器执行具体的业务逻辑,并返回模型数据给DispatcherServlet。最后,DispatcherServlet选择合适的视图进行渲染,将响应返回给客户端。

Spring MVC提供了丰富的特性和功能,包括请求映射、参数绑定、数据验证、数据转换、拦截器、国际化支持、文件上传等。它还与其他Spring项目(例如Spring Boot、Spring Security)集成得非常紧密,可以轻松地构建复杂的Web应用程序。

2、Spring 、Spring Boot、Spring MVC有什么区别?

 图片来源:https://zhuanlan.zhihu.com/p/573936691

3、SpringMVC的工作流程

图片来源:https://blog.51cto.com/u_15280110/3195954

3.1 发送请求

用户发送一个Http请求到web服务器,web服务器解析http请求,匹配到DispatcherServlet的请求映射路径(在web.xml文件中配置,后面专门有web.xml文件配置解析),web容器将请求转交给DispatcherServlet。

3.2 委托请求给处理器

DispatcherServlet接收到这个请求之后,根据http请求以及HandlerMapping中的配置(包括请求方法等),找到处理请求的处理器Handler。

 图片来源:https://blog.51cto.com/u_15280110/3195954

3.3 处理器适配器具体调用

找到处理请求的处理器Handler之后,此时的请求处理权就交给了Handler,然后Handler将具体的处理进行封装,再由具体的处理器适配器(HandlerAdapter)进行具体的调用。

3.4 返回ModelAndView逻辑视图对象

Handler执行完毕之后会向DispatcherServlet 返回一个ModelAndView对象。而这个ModelAndView对象是一个逻辑视图,并不是正式的视图。

3.5 视图渲染

DispatcherServlet接收到ModelAndView对象之后,通过ViewResolver对ModelAndView对象进行渲染,将逻辑视图转换为真正的View。

3.6 返回给客户端视图

DispatcherServlet通过Model解析ModelAndView的参数并最终返回给客户端视图信息。

4、使用SpringMVC

  • 将用户的访问(浏览器)和 后端Java 程序连接起来,即访问一个地址能够调用到我们的 Spring 程序。
  • 获取数据,用户访问的时候会添加一些参数,在程序中需要获取到这些数据。
  • 输出数据:执行了业务逻辑之后,需要把程序执行的结果返回给前端用户。

总而言之,Spring MVC是一个成熟、稳定且功能强大的Web框架,它简化了开发人员构建和管理Web应用程序的工作,提供了良好的可扩展性和灵活性。

参考:

【SSM】Spring MVC 程序开发(重点:SpringMVC 工作流程) - 知乎

SpringMVC工作执行流程详解_51CTO博客_springmvc执行流程

SpringMVC新手教程_在springmvc中创建了一个servlet类要用到service接口的对象该用哪个注解-CSDN博客

————————————————————————————————

感谢阅读,码字不易,多谢点赞!如有不当之处,欢迎反馈指出,感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1119705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#接口和继承的区别、联系与使用场景

在C#编程语言中,接口和继承是两个核心的概念。本文将详细介绍接口和继承之间的区别与联系,并探讨它们在实际编程中的使用场景。通过代码示例和详细说明,读者将能够深入理解这两个概念的功能和用法。 目录 引言1. 区别与联系1.1 区别1.2 联系 …

curl命令服务器上执行http请求

1. 现在本地使用postman生成curl命令 注意: 将ip改成127.0.0.1,端口是实际服务运行的端口 curl --location --request POST http://127.0.0.1:63040/content/course/list?pageNo1&pageSize2 \ --header Content-Type: application/json \ --data-raw {"courseName&q…

FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6

一、FreeRTOS 介绍 什么是 FreeRTOS ? Free即免费的,RTOS的全称是Real time operating system,中文就是实时操作系统。 注意:RTOS不是指某一个确定的系统,而是指一类操作系统。比如:uc/OS,Fr…

基于SSM的在线房屋租赁和电子签约系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

11 Self-Attention相比较 RNN和LSTM的优缺点

博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https://github.com/nickchen121/Pre-training-language-model 配套博客链接:https://www.cnblogs.com/nickchen121/p/15105048.html RNN 无法做长序列,当一…

自然语言处理---Transformer机制详解之Transformer优势

1 Transformer的并行计算 对于Transformer比传统序列模型RNN/LSTM具备优势的第一大原因就是强大的并行计算能力. 对于RNN来说,任意时刻t的输入是时刻t的输入x(t)和上一时刻的隐藏层输出h(t-1),经过运算后得到当前时刻隐藏层的输出h(t),这个…

网络编程的学习初篇

网络原理初始 网络原理和网络编程[重要] 网络能够跨主机通信! 我们未来工作,很可能是成为后端开发工程师,写服务器,和客户端通信,肯定会涉及到网络. 网络初始 计算机网络的由来 ~~ 计算机网络这是计科相关专业最核心的专业课!!! 计算机是咋来的??最初是用来计算弹道导弹的轨…

EtherCAT主站SDO读报文抓包分析

0 工具准备 1.EtherCAT主站 2.EtherCAT从站(本文使用步进电机驱动器) 3.Wireshark1 抓包分析 1.1 报文总览 本文读取从站1的对象字典,读取对象字典主索引为0x2000,子索引为0x00。主站通过发送SDO读报文实现对该对象字典的读取&…

python免杀初探

文章目录 loader基础知识loader参数介绍 evilhiding项目地址免杀方式修改加载器花指令混淆loader源码修改签名加壳远程条件触发修改ico的md5加密 loader基础知识 loader import ctypes #(kali生成payload存放位置) shellcode bytearray(b"shellc…

线上Timeout waiting for connection from pool问题分析和解决方案

目录 现象 理论分析 代码分析 解决方案 方案一:直接修改pollingConnectionManager 方案二:修改HttpClient 参考 现象 线上共有5个类似服务,但是只有流量较大的服务会出现成功率的问题。 问题的表现主要是在GetFile(fileId=AgACAgUAAxkDAAEbP1JlJPxyJM82phEKhYYZYfY9…

互联网Java工程师面试题·Java 面试篇·第三弹

目录 39、JRE、JDK、JVM 及 JIT 之间有什么不同? 40、解释 Java 堆空间及 GC? 41、你能保证 GC 执行吗? 42、怎么获取 Java 程序使用的内存?堆使用的百分比? 43、Java 中堆和栈有什么区别? 44、“ab”…

nodejs+vue中小学课程辅导系统-计算机毕业设计

这个中小学课程辅导系统的项目分为两种,普通用户和管理员。 二十一世纪,互联网已成为当今世界不可缺少的一部分,不仅加强人与人之间的联系,并且能够实现资源共享 , 我国人民的生活水平逐年提高,该系统利用面向目标群体…

容器技术基础

1. Linux Namespace和Cgroups 对于 Docker 等大多数 Linux 容器来说,Cgroups 技术是用来制造约束的主要手段,而 Namespace 技术则是用来修改进程视图的主要方法。 1.1 PID Namespace //Linux 系统正常创建线程 int pid clone(main_function, stack_s…

网络编程-java基础

两台电脑之间的通信形成了网络 最小的网络:局域网 校园网(局域网) 城域网(一个市) 广域网(全球) 为什么我发QQ你能收到,这是因为我发的消息实际上是发给了QQ服务器,并不是直接发给你的, 我是与QQ服务器进行通信的&#xff0c…

【C++】格式与实例化操作——[模板]详解(7)

前言 大家好吖,欢迎来到 YY 滴C系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一. 模板参数与模板参数列表1)模板参数…

JS学习-CryptoJS加密库

CryptoJS加密库 安装库 npm install crypto-js如下例子 对称加密 const CryptoJS require(crypto-js); //引入加密库 var str"123456" //md5加密 console.log(CryptoJS.MD5(str).toString()) var str2 CryptoJS.enc.Utf8.parse(str); //可以把字符串转成UTF-…

数据结构数组 Array 手写实现,扩容原理

数组数据结构 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型数据的集合。 数组的特点: 数组是相同数据类型的元素集合(int 不能存放 double)数组中各元素的存储是有先…

Xcode14创建github远程仓库Token

1.点击Create a Token on GitHub 2.在打开的网页中,登陆GitHub 3.点击生成Token 这是不能为空 4.Token创建成功如下: 5.复制Token到Xcode然后点击Sign In登陆 正在创建远程我仓库 正在将本地仓库代码推入远程仓库 创建成功

method.isAnnotationPresent(Xxx.class)一直为null

​​​​package com.dj.springtest.aspect;import com.dj.springtest.annotation.RequireRoles; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.s…

Linux中的shell编程

shell编程 重定向 cat >temp 输入内容到temp文件中,如果存在temp则覆盖,没有则新建 cat >>temp 追加内容 cat temp1>>temp2 将temp1中的内容追加到temp 命令执行控制符号 ; 一个命令行执行多条语句 命令替换符 1.双引号&#…