Springboot知识点必知必会(一)

news2024/9/30 19:28:43

mvc设计模式

MVC设计模式是Model-View-Controller的缩写,它是一种用于设计用户界面软件设计模式。Spring MVC是Spring框架的一个模块,它提供了一种基于Java的方式来实现MVC设计模式。

以下是Spring MVC中MVC设计模式的组成部分和工作原理: 

Model(模型)

  • 定义:模型代表应用程序的数据结构和业务逻辑。它直接与数据库或其他数据源进行交互,获取或存储数据
  • 在Spring MVC中:模型通常是Java类(如POJOs, JavaBeans),这些类可以与数据库表对应,通过ORM框架与数据库交互,或者是业务逻辑的实现。
  • POJOs是模型Model!POJOs是模型Model!POJOs是模型Model!

View(视图)

  • 定义:视图是用户界面的表示。它定义了数据如何显示给用户。
  • 在Spring MVC中:视图可以是JSP、Thymeleaf、FreeMarker等模板引擎生成的页面。Spring MVC通过视图解析器来确定如何渲染数据。

Controller(控制器)

  • 定义:控制器处理用户的输入,并决定如何响应。它在模型和视图之间充当中介,根据用户的输入或请求更新模型,并选择合适的视图进行响应。
  • 在Spring MVC中:控制器通常是标注为@Controller或@RestController的Java类。这些类包含用于处理特定URL请求的方法,这些方法通常使用@RequestMapping或其变种(如@GetMapping@PostMapping等)进行注解。

Spring MVC的工作流程

  1. 用户发送一个HTTP请求。
  2. 前端控制器(DispatcherServlet)接收此请求。
  3. DispatcherServlet查询一个或多个处理器映射(HandlerMapping)来找到处理这个请求的控制器。
  4. 控制器处理请求,并返回一个模型和视图(ModelAndView)给DispatcherServlet。
  5. DispatcherServlet查询视图解析器来确定如何渲染视图。
  6. 视图被渲染,并将响应返回给用户。

MVC设计模式允许开发者将业务逻辑、用户界面和用户输入分离开来,这样做有助于提高应用程序的模块化和可维护性。Spring MVC提供了一套完整的框架,使Java开发者能够轻松地实现MVC设计模式并创建Web应用程序。


4xx错误

4xx的HTTP状态码表示客户端错误,意味着由于客户端提供的信息有误或请求方式不当,导致服务器无法处理请求。以下是一些常见的4xx状态码及其描述:

  1. 400 Bad Request(错误的请求):

    • 描述:这是一个通用错误响应,表示服务器不能处理请求,因为客户端的请求语法不正确、请求参数无效或请求格式错误。
    • 可能的原因:例如,客户端发送的JSON数据格式不正确或请求中的参数值超出了有效范围。前者在测试中非常常见……
  2. 401 Unauthorized(未授权):

    • 描述:客户端在请求需要身份验证的资源时未提供有效的身份凭证,或提供的凭证是无效的。
  3. 403 Forbidden(禁止):

    • 描述:服务器已经理解了请求,但拒绝执行它。与401不同,身份验证不会有助于解决问题,通常是因为服务器不想让用户访问这个资源。
  4. 404 Not Found(未找到):

    • 描述:服务器找不到所请求的资源。这通常意味着用户请求的URL是错误的,或请求的资源在服务器上不存在。
  5. 405 Method Not Allowed(方法不允许):

    • 描述:所请求的资源已被找到,但所使用的HTTP方法不被允许。
    • 重点:例如,当用户试图使用POST请求访问一个只允许GET请求的资源时,服务器会返回此状态码。响应中应该包含Allow头,列出资源支持的HTTP方法。
  6. 406 Not Acceptable(不可接受):

    • 描述:服务器无法返回与请求头中的Accept字段相匹配的响应,表示客户端请求的内容格式服务器无法提供。
  7. 409 Conflict(冲突):

    • 描述:请求无法完成,因为服务器上的资源存在冲突。例如,在版本控制场景中,当用户尝试更改已经被其他人更改的资源时,可能会收到此错误。
  8. 429 Too Many Requests(请求过多):

    • 描述:用户在给定的时间段内发送了太多的请求,通常由于速率限制而触发。

JWT

JSON Web Token(JWT)是一个开放的标准(RFC 7519),它定义了一种简洁、自包含的方式来表示在双方之间传输的信息。由于信息是经过数字签名的,所以可以验证和信任该信息。

JWT常用于前后端分离的认证系统。在这种场景下,用户登录后,后端生成并返回一个JWT给前端。前端每次发送请求时都会带上这个JWT,后端通过验证JWT来确定用户身份并响应请求。

JWT的结构大致如下:

  1. Header(头部): 描述令牌的元数据,如签名算法。
  2. Payload(有效载荷): 包含声明(claims)。声明是关于实体(通常是用户)以及其他数据的陈述。
  3. Signature(签名): 对头部和有效载荷的加密签名,确保令牌的完整性和验证其发起者。

这三部分通过.连接成一个字符串,形成JWT。

JWT的使用流程:

  1. 用户使用凭证(如用户名和密码)登录。
  2. 服务器验证凭证并生成JWT。
  3. 服务器将JWT返回给客户端。
  4. 客户端将JWT存储起来,常见的存储方式有:Cookie、LocalStorage或SessionStorage。
  5. 客户端在后续的每个请求中都将JWT放在请求头(如Authorization头)中,并发送给服务器。
  6. 服务器接收请求后,验证JWT。如果验证成功,则处理请求;如果验证失败,返回一个错误响应。
  7. JWT可以设置过期时间,当令牌过期后,用户需要重新登录获取新的令牌。

JWT的优点:

  • 无状态性: 服务器不需要保存JWT。每次请求都带上JWT,服务器只需验证JWT就可以确定用户身份。
  • 自包含: JWT可以包含所需的所有信息,无需额外查询。
  • 灵活性: 可以在多个服务之间传递,非常适合微服务架构。

JWT的缺点:

  • 安全问题: 一旦JWT被盗或泄露,攻击者可以使用它访问系统,直到JWT过期。因此,JWT的有效期应尽量短。
  • 不易撤销: JWT是无状态的,一旦发出,直到其过期,都是有效的,这意味着黑名单机制或某种中心化检查会破坏其无状态性。
  • 大小: 与简单的tokens相比,JWT可能较大,这可能增加请求的大小。

在实践中,JWT常与其他安全实践结合使用,如HTTPS、短的过期时间、刷新令牌等,以增加安全性。

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

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

相关文章

在Linux中通过docker安装appnode面板

先在Linux中安装docker,然后在docker中安装appnode面板,并进行docker网络端口映射。 安装docker 第一步,卸载旧版本docker。 若系统中已安装旧版本docker,则需要卸载旧版本docker以及与旧版本docker相关的依赖项。 命令&#…

计算机竞赛 : 题目:基于深度学习的水果识别 设计 开题 技术

1 前言 Hi,大家好,这里是丹成学长,今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/pos…

访问Apache Tomcat的虚拟主机管理页面

介绍 通过Tomcat Host Manager应用可以创建、删除、管理Tomcat内的虚拟主机&#xff08;virtual hosts&#xff09;。该应用是Tomcat安装的一部分&#xff0c;默认在<Tomcat安装目录>/webapps/host-manager&#xff1a; 配置用户名、密码、角色 要访问Host Manager应…

MySQL-1(12000字详解)

一&#xff1a;数据库的引入 数据库在我们以后工作中是一个非常常用的知识&#xff0c;数据库用来存储数据&#xff0c;但是有些同学可能就会疑惑了&#xff0c;存储数据用文件就可以了&#xff0c;为什么还要弄个数据库呢&#xff1f; 文件保存数据有以下几个缺点&#xff1…

Mainflux IoT:Go语言轻量级开源物联网平台,支持HTTP、MQTT、WebSocket、CoAP协议

Mainflux是一个由法国的创业公司开发并维护的安全、可扩展的开源物联网平台&#xff0c;使用 Go语言开发、采用微服务的框架。Mainflux支持多种接入设备&#xff0c;包括设备、用户、APP&#xff1b;支持多种协议&#xff0c;包括HTTP、MQTT、WebSocket、CoAP&#xff0c;并支持…

vue实现echarts中 9种 折线图图例

let datas [{ DivideScore: 7, UserScore: 7.2, Name: 目标制定 },{ DivideScore: 7, UserScore: 7, Name: 具体性 },{ DivideScore: 7, UserScore: 7.5, Name: 可衡量性 },{ DivideScore: 7, UserScore: 7, Name: 可实现性 },{ DivideScore: 7, UserScore: 7, Name: 时间限定…

【软件测试】一份合格的软件测试简历长什么样?

你可以写一篇出众的软件测试简历并且这篇测试用例能够为你带来面试电话么&#xff1f;如果没有&#xff0c;请继续阅读。我敢肯定&#xff0c;读完这篇文章&#xff0c;你将能够写出一个完美的杀手级别的软件测试和质量保证的简历&#xff0c;这将为你带来面试电话。 你的简历是…

图片调色盘

图片预览 配置安装 Color-Thief 安装包使用文档 yarn add colorthief -S // npm install colorthief --save代码 <template><div class"img-thief"><div class"container"><div class"thief-item" v-for"(item, in…

邮件误操作删除,如何找回?这里有救援方法!

用户遇到的问题 ​“邮件不慎删除&#xff0c;要如何找回呢&#xff1f;今天我在查阅邮件的过程中&#xff0c;我注意到一封带附件的邮件&#xff0c;原本是打算将其另存到其他位置&#xff0c;却无意间点击了删除&#xff0c;这之后就再也无法找回了。现在我应该怎么办&am…

java生成带logo的二维码和下方带内容的条形码

一、导入zxing包 <!-- zxing --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.2</version></dependency><dependency><groupId>com.google.zxing</group…

【数据结构】归并排序和计数排序(排序的总结)

目录 一&#xff0c;归并排序的递归 二&#xff0c;归并排序的非递归 三&#xff0c;计数排序 四&#xff0c;排序算法的综合分析 一&#xff0c;归并排序的递归 基本思想&#xff1a; 归并采用的是分治思想&#xff0c;是分治法的一个经典的运用。该算法先将原数据进行拆…

what?es数据偏移了8小时...

今天搞监控大屏的时候&#xff0c;测试突然提出一个问题说&#xff0c;查一段时间的数据&#xff0c;时间曲线返回的日期有时候会比查询时间多&#xff0c;翻看代码后&#xff0c;初步定位为es的时区问题&#xff0c;后来将时间曲线的直方图聚合增加时区后&#xff0c;返回数据…

android studio 、JDK环境变量配置

1、adb.exe环境变量配置&#xff1a; 打开控制面板 >系统和安全>系统>高级系统设置 在系统变量中新建ANDROID_HOME变量&#xff0c;赋值路径&#xff1a;D:\install\androidSDK 在系统变量path中添加&#xff1a;%ANDROID_HOME%\platform-tools 校验是…

14:00面试,14:06就出来了,这面试问的过于变态了。。。

前言 刚从小厂出来&#xff0c;没想到在另一家公司我又寄了。 在这家公司上班&#xff0c;每天都要加班&#xff0c;但看在钱给的比较多的份上&#xff0c;也就不太计较了。但万万没想到十月一纸通知&#xff0c;所有人不准加班了&#xff0c;不仅加班费没有了&#xff0c;薪资…

什么是事件对象(event object)?如何使用它获取事件信息?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

分类预测 | MATLAB实现KOA-CNN-LSTM开普勒算法优化卷积长短期记忆神经网络数据分类预测

分类预测 | MATLAB实现KOA-CNN-LSTM开普勒算法优化卷积长短期记忆神经网络数据分类预测 目录 分类预测 | MATLAB实现KOA-CNN-LSTM开普勒算法优化卷积长短期记忆神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现KOA-CNN-LSTM开普勒算法优化…

NFTScan | 10.02~10.08 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.10.02~ 2023.10.08 NFT Hot News 01/ 9 月 OpenSea 交易额为 7300 万美元&#xff0c;创两年新低 10 月 2 日&#xff0c;数据显示 9 月 NFT 平台 OpenSea 的交易总额为 73,141,407…

Pyside6 QPushButton

Pyside6 QPushButton QPushButton使用QPushButton继承关系QPushButton的函数(Function)和信号(Signal)QPushButton信号 QPushButton例程界面设计clicked信号测试pressed信号测试released信号测试toggled信号测试按键长按测试按键长按间隔测试完整程序界面程序主程序 按键或命令…

2023年【陕西省安全员C证】新版试题及陕西省安全员C证考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员C证新版试题是安全生产模拟考试一点通总题库中生成的一套陕西省安全员C证考试试卷&#xff0c;安全生产模拟考试一点通上陕西省安全员C证作业手机同步练习。2023年【陕西省安全员C证】新版试题及陕西省安…

Idea本地跑flink任务时,总是重复消费kafka的数据(kafka->mysql)

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Idea中执行任务时&#xff0c;没法看到JobManager的错误&#xff0c;以至于我以为是什么特殊的原因导致任务总是反复消费。在close方法中&#xff0c;增加日志&#xff0c;发现jdbc连接被关闭了。 重新…