Springboot知识点必知必会(一)

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.rhkb.cn/news/152142.html

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

相关文章

什么是智能档案柜?如何使用智能档案柜?

智能档案柜是一种具有智能化功能的文件存储设备,它通过应用现代科技,集成了电子锁、自动化控制、智能管理系统技术,具有自动识别、高效存储、安全可靠等特点,提高档案管理的效率和安全性。适用于企业单位、图书馆等需要储存文件资…

安卓端App页面狂刷问题记录

一、场景 App基于webview混合开发,业务主要为前端h5实现,其中有一个功能为消息中心,当从通知栏点击消息跳转到指定页面时,前端会不停地刷新页面,一遍又一遍地重复同一批请求。 二、问题分析 1、刚开始怀疑是否前端里…

机器学习必修课 - 编码分类变量 encoding categorical variables

1. 数据预处理和数据集分割 import pandas as pd from sklearn.model_selection import train_test_split导入所需的Python库 !git clone https://github.com/JeffereyWu/Housing-prices-data.git下载数据集 # Read the data X pd.read_csv(/content/Housing-prices-data/t…

Mysql 8手动终止某个事务并释放其持有的锁

示范数据表 age具有index普通索引 在mysql数据库里的information_schema.INNODB_TRX表中存储有innodb的所有事务,我们可以查看该表来查看正在进行的事务 现在我开启一个事务,执行第1、2行SQL,启动事务并持有id3的行锁 刷新事务表可以看到…

light client轻节点简介

1. 引言 前序博客: Helios——a16z crypto构建的去中心化以太坊轻节点 去中心化和自我主权对于Web3的未来至关重要,但是这些理想并不总适用于每个项目或应用程序。在非托管钱包和bridges等工具中严格优先考虑安全性而不是便利性的用户,可选…

C++ 01.学习C++的意义-狄泰软件学院

一些历史 UNIX操作系统诞生之初是用汇编语言编写的随着UNIX系统的发展,汇编语言的开发效率成为瓶颈,所以需要一个新的语言替代汇编语言1971年通过对B语言改良,使其能直接产生机器代码,C语言诞生UNIX使用C语言重写,同时…

基于Stable Diffusion的图像合成数据集

当前从文本输入生成合成图像的模型不仅能够生成非常逼真的照片,而且还能够处理大量不同的对象。 在论文“评估使用稳定扩散生成的合成图像数据集”中,我们使用“稳定扩散”模型来研究哪些对象和类型表现得如此逼真,以便后续图像分类正确地分配…

[尚硅谷React笔记]——第3章 React应用(基于React脚手架)

目录: react脚手架创建项目并启动react脚手架项目结构一个简单的Hello组件样式的模块化功能界面的组件化编码流程(通用)组件的组合使用-TodoList 1.react脚手架 xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需…

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found (required by

在某项目中遇到下面的错误, ./model2trt_v2: /lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by ./model2trt_v2) ./model2trt_v2: /lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by ../../../lib/linux_lib/libcuda_utils…

WPF中DataContext的绑定技巧

先看效果: 上面的绑定值都是我们自定义的属性,有了以上的提示,那么我们可以轻松绑定字段,再也不用担心错误了。附带源码。 目录 1.建立mvvm项目 2.cs后台使用DataContext绑定 3.xaml前台使用DataContext绑定 4.xaml前台使用Da…

浏览器自动化神器:Automa 轻松实现任务编排 | 开源日报 No.52

usememos/memos Stars: 13.8k License: MIT memos,一个轻量级的、自托管的备忘录中心。开源且永久免费。 开源且永久免费使用 Docker 可以在几秒钟内完成自我托管支持 Markdown 格式可定制和共享提供 RESTful API 用于自助服务 mamoe/mirai Stars: 12.6k Licen…

华为云云耀云服务器L实例评测 | 实例使用教学之高级使用:配置 Git SSH Key 进行自动识别拉代码

华为云云耀云服务器L实例评测 | 实例使用教学之高级使用:配置 Git SSH Key 进行自动识别拉代码 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器是什么华为云云耀云…

Mac解压缩软件BetterZip免费版注册码下载

软件介绍 BetterZip免费版是一款适用于Mac系统的解压缩软件,软件具备了专业、实用、简单等特点,它可以让用户更快捷的向压缩文件中添加和删除文件,同时兼容性也十分优秀,支持ZIP , SIT , TAR、BZIP2 &…

30分钟快速搭建并部署一个免费的个人博客

1前言 现如今网上有许多完善的博客平台,如博客园、掘金、思否、知乎等。有人会说为什么现在网上有这么多成熟的博客平台,你还要浪费时间搭建一个自己的博客系统呢?首先我相信每一个程序员都会想要拥有一个属于自己的博客系统,其次…

微信小程序 table表格 固定表头和首列 右侧表格可以左右滚动

(一) 1.左侧一列固定不动 2.右侧表格内容可以左右滚动 3.单元格内容平均分配 4.每一行行高可以由内容撑开 通过 js 设置左侧一列行高与右侧表格内容行高保持一致 1.1 效果图 1.2 tabble.wxml <view classtable><!-- 左侧固定 --><view classtable_left_colum…

C++对象模型(2)-- 进程内存空间布局

在前面Base类的对象模型中&#xff0c;有base对象实例&#xff0c;虚函数表&#xff0c;静态变量和函数等&#xff0c;这些信息在内存中都有各自的保存位置。了解进程的内存空间布局&#xff0c;比如内存空间分成几大块&#xff0c;各种不同的数据分别保存在内存空间的哪个位置…

MyBatisPlus(十一)包含查询:in

说明 包含查询&#xff0c;对应SQL语句中的 in 语句&#xff0c;查询参数包含在入参列表之内的数据。 in Testvoid inNonEmptyList() {// 非空列表&#xff0c;作为参数List<Integer> ages Stream.of(18, 20, 22).collect(Collectors.toList());in(ages);}Testvoid in…

JavaEE初阶学习:HTTP协议和Tomcat

1. HTTP协议 HTTP协议是一个非常广泛的应用层协议~~ 应用层协议 —> TCP IP 协议栈 应用层 —> 关注数据怎么使用~ 传输层 —> 关注的是整个传输的起点和终点 网络层 —> 地址管理 路由选择 数据链路层 —> 相邻节点之间的数据转发 物理层 —> 基础设置,硬…

Jmeter常用参数化技巧总结!

说起接口测试&#xff0c;相信大家在工作中用的最多的还是Jmeter。 JMeter是一个100&#xff05;的纯Java桌面应用&#xff0c;由Apache组织的开放源代码项目&#xff0c;它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA 等多种协议。 在做…

(六)正点原子STM32MP135移植——内核移植

目录 一、概述 二、编译官方代码 三、移植 四、编译 一、概述 前面已经移植好了TF-A、optee、u-boot&#xff0c;在u-boot能正常跑起来的情况下&#xff0c;现在来移植内核。 二、编译官方代码 进入kernel目录 2.1 解压源码、打补丁 /* 解压源码 */ tar xf linux-6.1.28.…