Spring MVCSpring Boot

文章目录

  • Spring MVC
    • 什么是MVC模式
    • Spring MVC优点
    • SpringMVC 运行流程
    • SpringMVC组件
    • SpringMVC常用的注解有哪些
    • SpringMVC的拦截器和过滤器有什么区别?执行顺序是什么
  • SpringBoot
    • 对SpringBoot的理解
    • Spring和SpringBoot的关系?
    • SpringBoot有哪些核心注解
    • SpringBoot的自动配置原理
    • 为什么SpringBoot的可以直接运行

Spring MVC

Spring MVC :是基于spring的一个开源框架,实际上是spring的一个模块,专门用来做web开发的。可以理解为Servlet的一个升级。所有的web开发底层都是Servlet,框架是在Servlet基础上简化开发并且加入一些功能。

web开发底层是Servlet,springMVC中有一个对象时Servlet:DispatherServlet(中央调度器),负责接收用户的所有请求,用户把请求给了DispatherServlet,之后DispatherServlet把请求转发给我们的Controller(@Controller创建的对象)对象,最后是Controller对象处理请求。

什么是MVC模式

M——Model模型:完成业务逻辑,由JavaBean构成,service + dao+entity

V——view视图:看到的页面

C——Controller控制器:接收请求、调用模型

当一个请求发送过来之后,会先到到Controller控制层,控制层在交给Model模型层处理,Model层处理完成之后,返回处理结果给Controller层,在通过View视图层渲染后相应给用户。

Spring MVC优点

  1. 基于MVC结构。分工明确,解耦合
  2. 容易理解,上手快,使用简单
  3. 作为spring框架的一部分,方便整合Mybatis等其他框架。
  4. SpringMVC强化注解的使用。

SpringMVC 运行流程

在这里插入图片描述

  1. 前端发送过来的请求,先经过DispatcherServlet中央处理器也称为前端控制器。

  2. 前端控制器DispatcherServlet接收请求后,调用映射处理器HandlerMapping。

    HandlerMapping根据请求的URL找到处理该请求的Handler(即Controller),将处理器Handler返回给前端控制器。

  3. 前端控制器根据获取到的Handler,选择一台合适的HandlerAdapter处理适配器,处理适配器调用处理器相应的处理方法。

  4. Handler执行后,向DispatcherServlet返回一个ModelAndView对象。

  5. 对返回的ModelAndView进行视图解析,将View返回给DispatcherServlet。

  6. View结合Model进行视图渲染。

  7. 响应给客户。

SpringMVC组件

  • DispatcherServlet:Spring中提供了DispatcherServlet类,它从HTTPServlet继承而来,他就是Spring MVC中的前端控制器。
  • HandlerMapping:DispatcherServlet自己并不处理请求,而是将请求交给页面控制器。那么在DispatcherServlet中如何选择正确的页面控制器呢?这件事就交给了HandlerMapping,进过HandlerMapping处理之后,DispatcherServlet就知道要调用哪个页面处理器来处理了。
  • HandlerAdapter:经过了HandlerMapping 处理之后,DispatcherServlet就获取到了处理器,但是处理器有多种,为了方便调用,DispatcherServlet将这些处理器包装成处理适配器HandlerAdapter,HandlerAdapter调用真正的处理器的功能处理方法,完成处理功能,并返回一个ModelAndView对象。

SpringMVC常用的注解有哪些

@RequestMapping:用于映射web请求,包括访问路径和参数

@RestController:该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着该Controller的所有方法都默认加了@ResponseBody。

@ResponseBody:支持将返回值放到response内,而不是一个页面,通常用户返回json数据。

@RequestBody:允许request的参数在request体内,而不是在直接连接的地址后面。

SpringMVC的拦截器和过滤器有什么区别?执行顺序是什么

过滤器是Servlet规范规定的对所有的web请求起作用,而拦截器只对action起作用;

过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器;

过滤器不能访问容器中的Bean(DI)(基于Spring注册过的过滤器也可以访问容器中的Bean),而拦截器可以访问

执行顺序:

在这里插入图片描述

SpringBoot

对SpringBoot的理解

SpringBoot是用来快速开发spring应用的脚手架,其设计目的是用来简化spring应用的初始化搭建以及开发工程。

springBoot内置web服务器,省略了Web.xml,直接运行jar文件就可以启动web应用;

SpringBoot帮我们管理了常用的第三方依赖版本,减少了版本冲突问题;

提供自动配置,对主流框架无配置集成,开箱即用。

Spring和SpringBoot的关系?

SpringBoot是Spring生态产品;

SpringBoot他不是一个框架,它是一个可以快速构件基于spring的脚手架,二者不是一个层面的东西,没有可比性。

SpringBoot有哪些核心注解

@SpringBootApplication注解:这个注解标识了SpringBoot工程,写在启动类上

@SpringBootConfiguration:这个注解实际就是一个@Configuration,表示启动类也是一个配置类

@EnableAutoConfiguration:启动自动配置类的。自动扫描所有的自动配置类并启动

SpringBoot的自动配置原理

  1. 通过@SpringBootConfiguration引入@EnableAutoConfiguration负责启动自动配功能
  2. @EnableAutoConfiguration引入了@import
  3. Spring容易启动时:加载IOC容器时会解析@Import注解
  4. @Import导入了一个deferredImportSelector,它会使SpringBoot的自动配置类的顺序在最后,这样方便扩展和覆盖
  5. 然后读取所有的/META-INF/spring.factories文件
  6. 过滤出所有AutoConfigurationClass类型的类
  7. 最后通过@Condition排除无效的自动配置类。

为什么SpringBoot的可以直接运行

  1. SpringBoot提供了一个插件spring-boot-maven-plugin用于把程序打包称为一个可执行的jar包;
  2. SpringBoot应用打包后生成一个Fat jar(包含jar包的jar),包含了应用依赖的jar和SpringBoot loader相关的类;
  3. 通过指令java - jar运行jar时会去找jar中的manifest文件,在那里面找到真正的启动类(Main-Class);
  4. Fat jar的启动Main函数是JarLauncher,找到manifest中的Start-Class

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PDF密码】PDF文件不能打印,为什么?

正常的PDF文件是可以打印的,如果PDF文件打开之后发现文件不能打印,我们需要先查看一下自己的打印机是否能够正常运行,如果打印机是正常的,我们再查看一下,文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…

react icon ant简单使用

refer&#xff1a; 文字提示 Tooltip - Ant Design 1.首先保证已经引入了Ant 2.在组件&#xff08;页面&#xff09;引入tooltip import { Form, Tooltip } from antd; 3.在合适的位置使用tooltip&#xff1a; <span>寿命 <Tooltip title"这是寿命的说明&quo…

前端 select 标签如何创建下拉菜单?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 代码示例⭐ 代码讲解⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏…

【Linux】计算机网络的背景和协议分层

文章目录 网络发展协议何为协议网络协议协议分层OSI七层模型TCP/IP五层模型&#xff08;四层&#xff09; 基本通信流程mac地址和ip地址网络通信本质 网络发展 从一开始计算机作为一台台单机使用&#xff0c;到现在网络飞速发展&#xff0c;从局域网Lan建立起局域网&#xff0…

Vue3 第四节 自定义hook函数以及组合式API

1.自定义hook函数 2.toRef和toRefs 3.shallowRef和shallowReactive 4.readonly和shallowReadonly 5.toRaw和markRaw 6.customref 一.自定义hook函数 ① 本质是一个函数&#xff0c;把setup函数中使用的Composition API 进行了封装,类似于vue2.x中的mixin 自定义hook函数…

TCP和UDP

目录 TCP和UDP是什么&#xff1f; TCP和UDP有什么区别? 三次握手和四次挥手 TCP维护可靠的通信方式 拥塞控制 滑动窗口的原理 什么是粘包以及粘包的原因 粘包的处理方式 TCP和UDP使用场景 TCP和UDP是什么&#xff1f; TCP&#xff1a; 传输控制协议&#xff08;TCP&am…

Maven介绍-下载-安装-使用-基础知识

Maven介绍-下载-安装-使用-基础知识 Maven的进阶高级用法可查看这篇文章&#xff1a; Maven分模块-继承-聚合-私服的高级用法 文章目录 Maven介绍-下载-安装-使用-基础知识01. Maven1.1 初识Maven1.1.1 什么是Maven1.1.2 Maven的作用 02. Maven概述2.1 Maven介绍2.2 Maven模型…

postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用

前言&#xff1a; MySQL数据库和postgresql数据库之间的差异并不多&#xff0c;这里的差异指的是对SQL语言的支持两者并不大&#xff0c;但底层的东西差异是非常多的&#xff0c;例如&#xff0c;MySQL的innodb引擎概念&#xff0c;数据库用户管理&#xff0c;这些和postgresq…

【设计模式】-建造者模式

Java建造者模式&#xff1a;创建复杂对象的灵活构建者 在软件开发中&#xff0c;我们经常遇到需要创建一个复杂对象的情况。如果使用传统的构造函数进行对象创建&#xff0c;可能会导致构造函数参数过多&#xff0c;难以管理和维护。建造者模式&#xff08;Builder Pattern&am…

使用eXosip+ffmpeg、ffplay命令行实现sip客户端

文章目录 前言一、关键实现1、主要流程2、解决端口冲突&#xff08;1&#xff09;、出现原因&#xff08;2&#xff09;、解决方法 3、解析sdp&#xff08;1&#xff09;、定义实体&#xff08;2&#xff09;、解析视频&#xff08;3&#xff09;、解析音频 4、命令行推拉流&am…

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全

CTFshow XXE web373 学习资料&#xff1a; &#xff08;梭哈~&#xff09; https://www.cnblogs.com/20175211lyz/p/11413335.html https://www.cnblogs.com/zhaijiahui/p/9147595.html https://www.cnblogs.com/r00tuser/p/7255939.html https://mp.weixin.qq.com/s?__bizMz…

stable diffusion(1): webui的本地部署(windows)

一、前言 是的&#xff0c;现在是202308月份了&#xff0c;网上已经有很多打包好的工具&#xff0c;或者直接进一个web就能用SD的功能&#xff0c;但是我们作为程序员&#xff0c;就应该去躺坑&#xff0c;这样做也是为了能够有更多自主操作的空间。 像其他AI一样&#xff0c…

【类和对象】基础知识

目录 一、类的定义 定义方式一&#xff1a;定义与声明都在类中 定义方式二&#xff1a;定义与声明分离 二、类的实例化&&类对象存储方式 类的实例化 类对象存储模式 三、this指针 一、类的定义 定义方式一&#xff1a;定义与声明都在类中 #include<iostream&…

进阶:Docker容器管理工具——Docker-Compose使用

文章目录 前言Compose大杀器编排服务 1、docker-compose安装curl方式安装增加可执行权限查看版本 2、Docker-compose.yaml命令3、 docker-compose实战4、Docker网络路由docker的跨主机网络路由**问题由来**:方案两台机分别配置路由表ip_forward配置 总结 前言 容器的管理工具&…

AI一键生成短视频

AI一键生成推文短视频 阅读时长&#xff1a;10分钟 本文内容&#xff1a; 结合开源AI&#xff0c;一键生成短视频发布到常见的某音&#xff0c;某手平台&#xff0c;狠狠赚一笔 前置知识&#xff1a; 1.基本的 python 编程知识 2.chatGPT 使用过 3.stable diffution 使用过 成果…

开关电源控制--bode图相角裕量的选择

什么是相角裕量 在Bode图中&#xff0c;相角裕量是指系统的相位裕量&#xff0c;用于评估系统的稳定性和频率响应特性。 Bode图是一种常用的频率响应图&#xff0c;将系统的增益和相位随频率变化的情况绘制出来。在Bode图中&#xff0c;相角裕量表示系统的相位与-180度&#…

Python web实战之Django的文件上传和处理详解

概要 关键词&#xff1a;Python Web开发、Django、文件上传、文件处理 今天分享一下Django的文件上传和处理。 1. 上传文件的基本原理 在开始深入讲解Django的文件上传和处理之前&#xff0c;先了解一下文件上传的基本原理。当用户选择要上传的文件后&#xff0c;该文件会被发…

Node.js-http模块服务端请求与响应操作,请求报文与响应报文

简单案例创建HTTP服务端&#xff1a; // 导入 http 模块 const http require("http"); // 创建服务对象 const server http.createServer((request, response) > {// 设置编码格式&#xff0c;解决中文乱码问题response.setHeader("content-type", &…

20天突破英语四级高频词汇——第②天

2&#xfeff;0天突破英语四级高频词汇~第2天加油(ง •_•)ง&#x1f4aa; &#x1f433;博主&#xff1a;命运之光 &#x1f308;专栏&#xff1a;英语四级高频词汇速记 &#x1f30c;博主的其他文章&#xff1a;点击进入博主的主页 目录 2&#xfeff;0天突破英语四级高…

绿盾用户使用看图软件每次都需要把图片解密之后才能打开查看,怎么才能不用这么麻烦打开就能看

环境: Win10专业版 绿盾控制台7.0 看图软件FastStone Image Viewer 问题描述: 绿盾用户使用看图软件FastStone Image Viewer每次都需要把图片解密之后才能打开查看,怎么才能不用这么麻烦打开就能看,用户说每次都需要把图片解密之后才能使用,实在是影响效率 解决方案…