Web后端开发的学习

REST风格

  • GET:查询用户
  • POST:新增用户
  • POT:修改用户
  • DELETE:删除用户

前后端交互统一的响应结果

记录日志

  • @SLf4j

注解:

  • @PathVariable:获取路径的参数
  • @ResponseBody :方法的返回值直接作为 HTTP 响应的正文返回,将响应的实体类转为json发送给前端
  • @RequestBody :将request的json转化为实体类给后端
  • @RequestParam :请求参数,可设置默认值
  • DateTimeFormat(patten = " ")指定传入进来的时间格式

页面的分页查询

  • 1.接受分页参数 page pageSize
  • 1.获取查询的数据
  • 2.数据的总数
  • 返回总记录数以及当前页数据列表
  • mapper:
  • service:

xml:

  • 同包同名
  • namespace与mapper全类名保存一致

分页条件查询

  • 配置xml

  • 标签 :根据里面条件判断是否自动生产where子句 自动去除第一个条件多余的and /or

  • 分页插件:PageHelper

    • 引入依赖
    • Mapper
    • service

接受文件

  • MultipartFile image//此变量名需与前端一致
  • 需存储文件
  • 使用uuid区分文件的不同
    • uuid:通用唯一识别
  • MultipartFile常见方法

批量删除

  • collection :要遍历的集合
  • item :遍历出来的每一个元素
  • separator :分隔符
  • open:遍历之前拼接什么
  • close:遍历之后拼接什么

存文件到云服务

  • 映入SDK依赖
  • 安装OSS Java SDK_对象存储(OSS)-阿里云帮助中心

配置文件

  • @Value注解通常用于外部配置的属性注入,@Value("${配置文件中的key}")
  • yml配置文件
    • 层级结构更清晰,简介,数据为中心
    • 基本语法:
      • 大小写敏感
      • 数值前边必须有空格,作为分隔符
      • 使用缩进表示层级关系,不允许使用tab,只能用空格(idea中自动将tab转化为空格
      • 缩进空格数目不重要,只要相同层级的元素左侧对齐即可
      • '#' 表示注解
    • 常见格式:
    • @ConfigurationProperties
      • 创建类来注入属性
      • 引入依赖 让配置文件的时候有提示

@Value与@ConfigurationProperties的区别:

  • 相同点:都是用来注入外部配置的属性的
  • 不同点:
    • @Value只能一个一个的进行外部属性注入
    • @ConfigurationProperties可以批量的将外部属性配置到bean对象的属性中

登录功能的开发

  • 登录
    • 验证username与password在数据库中的数据即可
  • 登录校验
    • 登录标记:登录成功后,每一次请求,都可以获取到该标记
    • 同一拦截:过滤器Filter 拦截器Interceptor

登录校验

  • 会话技术
    • 会话:用户打开了浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应
    • 会话跟踪:一种维护浏览器的方法,服务器需要识别多次请求是否来自于同一个浏览器,以便在同一次会话的多次请求间共享数据。
    • 会话跟踪方案:
      • 客户端会话跟踪技术:Cookie
      • 服务端会话跟踪技术:Session
      • 令牌技术
  • 优点:HTTP协议中支持的技术
  • 缺点:移动端APP无法使用Cookie
    • 不安全,用户可以自己禁用Cookie
    • Cookie不能跨域
      • 跨域区分三个维度:协议,IP/域名,端口

Session

  • 往cookie中存sessionId,拿到id后去往服务器解析出来用户信息
  • 优点:存储在服务端,安全
  • 缺点:服务器集群环境下无法直接使用Session
    • Cookie的缺点

令牌

  • 优点:支持pc端,移动端
    • 解决集群环境下的认证问题
    • 减轻服务器存储压力
  • 缺点:需要自己实现

JWT

过滤器(Filter)

  • 可以把对资源的请求拦截下来,从而实现一些特殊的功能
  • 过滤器一般完成一些通用的操作,:比如登录校验、同一编码处理、铭感字符处理等
  • 入门:
    • 1.定义Filter:定义一个类,实现Filter接口,并重写所有方法
    • 2.配置filter:Filter加上@WebFilter注解,配置拦截资源的路径。引导类上加@ServletComponentScan开启Servlet组件支持
  • 执行流程
    • 放行访问资源,访问完毕,还会回到Filter中
    • 回到Filter中后,执行放行之后的逻辑
  • 拦截路径:
    • 拦截具体路径: urlPatterns = "/login"
    • 目录拦截: urlPatterns = "/emps/*" 拦截访问/emps下的所有资源
    • 拦截所有:urlPatterns = "/*"
  • 过滤器链:一个web应用可以配置多个过滤器,多个过滤器形成一个过滤器链
    • 多个过滤器会将本次放行到下一个过滤器 (根据类名字母的顺序)
  • 实现:

拦截器(Interceptor)

  • 类似过滤器,spring提供,用来动态拦截控制器方法的执行
  • 作用:拦截请求,在指定方法调用后,根据业务需要执行预先设定的代码
  • 入门:
    • 定义拦截器,实现HandlerInterceptor接口
    • 配置拦截器
  • 拦截路径:
    • 根据需求拦截不同的拦截路径
  • 执行流程:

异常处理

  • 全局异常处理器

事务管理&AOP

  • 事务是操作的集合,是不可分割的单位,要么同时成功,那么同时失败
  • 操作(MySQL中):
    • 开启事务(一组操作开始前,开启事务):start transaction / begin
    • 提交事务(这组操作全部完成后,提交事务) :commit
    • 回滚事务(中间任何一个操作出现异常,回滚事务):rollback
  • 删除部门,同时删除部门下的所有员工
  • springboot中:
    • @Transactional :开启事务
      • 交给servive层的方法,类上,接口上
      • 作用:将当前方法交给spring进行事务管理,方法执行之前开启事务,执行完毕提交事务;出现异常,回滚事务
      • 还可在yml配置文件中开启事务管理日志

@Transactional属性

  • rollbackFor
    • 默认情况下,只有出现RuntimeException才回滚异常。
    • rollback属性用于控制出现何种异常类型,回滚事务
  • propagation 传播行为
    • 事务传播行为:指的是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制

AOP(springAOP)

  • Aspect Oriented Programming (面向切面编程,面向方面编程) :面向特定方法编程

  • 实现:

    • 动态代理是它的最主流的实现。
  • 添加依赖

  • 创建类,加上注解:@Component @Aspect//AOP类

  • 场景:记录操作日志 权限管理 事务管理

  • 优势:代码无侵入 减少重复代码 提高开发效率 维护方便

  • 核心概念:

    • 连接点:JoinPoint,可以被AOP控制的方法(暗含方法执行时的相关信息)
    • 通知:Advice,指哪些重要的逻辑,也就是共性功能(最终体现为一个方法)
    • 切入点:PointCut,匹配连接点的条件,通知仅会在切入点方法执行时被应用
    • 切面:Aspect,描述通知与切入点的对应关系(通知+切入点)
    • 目标对象:Target,通知所应用的对象

通知类型

  • 1.@Around :环绕通知,此注解的通知方法在目标方法前,后都被执行
  • 2.@Before :前置通知,此注解标注通知的方法在目标方法前被执行
  • 3.@After :后置通知,此注解标志的通知方法在目标方法后被执行,无论是否有异常都会被执行
  • 4.@AfterReturning:返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行
  • 5.@AterThrowing :异常后通知,此注解标志的通知方法发生异常后执行
  • 注:环绕通知需要自己调用 ProceedingJoinPoint.proceed()来让原始方法执行,其他通知不需要考虑目标方法执行
    • 返回值必须指定为Object,来接受原始方法的返回值
  • 抽取切入点表达式

通知顺序

  • 当多个切面的切入点都匹配到了目标方法,目标方法运行时,多个通知方法都会被执行。
    • 1.通知顺序和类名顺序一直
    • 2.@Order(数字)加在切面类上控制顺序
      • 目标方法前的通知:数字小的先执行
      • 目标通知后的通知:数字小的后执行

切入点表达式

  • 决定项目中哪些项目需要加入通知
  • 常见形式:
    • 1.execution():根据方法的签名来匹配
    • 2.@annotation():根据注解匹配
  • execution():
    • 包名类名不省略
  • @annotation(),用于匹配标识特定注解的方法
  • 定义注解
  • 在所需要的方法上加注解
  • 指定log的全类名即可

连接点

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

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

相关文章

【RabbitMQ】RabbitMQ 的 6 种工作模式

RabbitMQ 的 6 种工作模式 1.简单模式2.工作队列模式3.交换机模式4.Routing 转发模式5.主题转发模式6.RPC 模式6.1 消息属性6.2 关联标识6.3 工作流程 7.小结 1.简单模式 生产者把消息放入队列,消费者获得消息,如下图所示。这个模式只有 一个消费者、一…

v8中使用TensorBoard进行训练可视化(可用于论文)(补充版,接上一篇文章)

我们可以边训练,边通过TensorBoard观察损失函数的变化,同时也可以通过TensorBoard去查看整体网络yaml结构,不再需要人工根据yaml去画网络结构了。 训练v8的时候,重新打开新的终端: 虚拟环境下输入并执行:&…

redis序列化

文章目录 1、为什么要进行序列化操作?2、序列化方式2.1、自定义序列化2. 2、StringRedisTemplate(重点) 1、为什么要进行序列化操作? 不进行序列化向redis存入数据代码: SpringBootTest class RedisDemoApplicationT…

日常销售数据分析为什么重要?三个维度全面分析日常销售数据

在当今电子商务的浪潮席卷全球的时代,网店如雨后春笋般涌现,并且竞争日趋激烈。在这样一个充满挑战与机遇的环境中,如何洞察市场动向,把握消费者需求,实现销售业绩的稳步增长,成为每一位电商运营者必须面对…

【YOLOv8改进[注意力]】在YOLOv8中添加GAM注意力 + 含全部代码和详细修改方式 + 手撕结构图

本文将进行在YOLOv8中添加GAM注意力的实践,助力YOLOv8目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法,实现有效涨点。 改进前和改进后的参数对比: 目录 一 GAM 二 在YOLOv8中添加GAM注意力 1 整体修改 2 配置文件

M41T11M6F串行实时时钟-国产兼容RS4C411

RS4C411是一款低功耗串行实时时钟(RTC),具有56字节的NVRAM。内置32.768 kHz振荡器(外部晶体控制)和RAM的前8字节用于时钟/日历功能,并以二进制编码十进制(BCD)格式配置。地址和数据通…

MacOS下如何使用Tomcat

提示:宝子们,希望文章对你们有所帮助, 请一键三连支持博主下吧~ 文章目录 前言一、Tomcat 压缩版二、Tomcat可执行文件版本最后 前言 电脑环境: MacOS Monterey 版本 12.6.8 Apple M1 Tomcat 9.0.83 Java 1.8.0_171 …

滚珠丝杆与梯形丝杆的工作原理与性能差异!

滚珠丝杆和梯形丝杆(也称滑动丝杆)都是机械设备中常见的两种精密传动元件,两者都是将旋转运动变成直线运动的方式。那么,这两者有什么区别呢?在什么时候选择使用滚珠丝杆?什么时候选用滑动丝杆呢&#xff1…

Petalinux由于网络原因产生的编译错误(3)-qemu-xilinx-system-native 失败

1 获取qemu-xilinx-system-native 失败 编译时遇到qemu-xilinx-system-native 包获取失败,如下图所示: 解决这种错误方法如下: 进入Petalinux 工程,编辑工程下的 project-spec/meta-user/conf/petalinuxbsp.conf 文件&#xff0…

CorelDRAW2024专业版永久免费激活码序列号分享大全

亲爱的设计师们,你们是否有过这样的困扰:想要设计出独具特色的图形作品,但又受限于软件的功能和操作复杂性?今天,我要为大家种草一款神器——CorelDRAW 2024!🎉✨ 作为一个长期使用这款软件的图…

并发、多线程、HTTP连接数有何关系?

在计算机领域,"并发"、"多线程"和"HTTP连接数"是三个重要的概念,它们之间存在着密切的关系。本文将探讨这三者之间的联系以及它们在现代计算机系统中的作用。 一、并发的概念 并发是指系统能够同时处理多个任务或事件的能…

英语学习笔记35——Our village

Our village 我们的村庄 词汇 Vocabulary photograph n. 照片 通常说:photo 复数:photos     picture 复数:pictures 搭配:take a photo 照相 以o结尾的单词复数es的: potato —— potatoes tomato —— tomatoe…

TCP三次握手和四次挥手过程简介(抓包分析,简单易懂,小白)

接上篇 传输层部分 链路层、网络层、传输层和应用层协议详解分析-CSDN博客文章浏览阅读689次,点赞10次,收藏15次。wireshark抓包分析-CSDN博客wireshark是网络包分析工具网络包分析工具的主要作用是尝试捕获网络包,并尝试显示包的尽可能详细…

Selective Kernel Networks(CVPR-2019)

摘要 提出了一种动态选择机制,允许每个神经元根据输入信息的多个尺度自适应调整感受野大小。设计了一种称为选择核(SK)单元的结构块,利用softmax attention 对不同核大小的多个分支进行融合。对这些分支的不同attention产生融合层…

yolov10主要特点

在我们探讨YOLOv10之前,让我们回顾一下YOLO的发展历程。YOLO在实时目标检测领域一直是先驱,兼顾速度和准确性。从YOLOv1到YOLOv9,每个版本在架构、优化和数据增强方面都引入了显著的改进。然而,随着模型的发展,某些限制…

磁盘管理 磁盘介绍 MBR

track:磁道,就是磁盘上同心圆,从外向里,依次1号、2号磁道..... sector:扇区,将磁盘分成一个一个扇形区域,每个扇区大小是512字节,从外向里,依次是1号扇区、2号扇区... cy…

【Python】Flask问答系统Demo项目

学习视频 我是跟着知了传课学的Flask,起初了解Flask还是GPT告诉我的,现在可以说用Flask做后端是真的方便! https://www.bilibili.com/video/BV17r4y1y7jJ 项目结构与下载 FlaskOA(项目文件夹) │ app.py │ conf…

智慧公安指挥中心大数据信息化两中心两基地系统方案

1.1 系统建设目标 本系统是一个汇接全市的报警求助的大型通信指挥系统,技术难度较高、可靠性要求高,技术路线的选择至关重要。 在充分考虑XX市公安局的业务需要,利用现代通信及计算机网络技术的基础上,最大程度地实现资源整合、…

如何开发一款安全高效的Android网络库(详细教程)

根据很多网友及项目需要,我们针对Retrofit做了一层简单封装,包含了很多可插拔的功能,能够适应大多数项目的需要,这一期我们来分析以下如何设计一款安全高效的Android网络库——FlexNet 1. 网络框架模块 在设计网络之前&#xff…

深度学习的舌象诊断:从舌头上了解系统性疾病!

首先 深度学习算法能否解决东方医学中依靠医生经验的诊断问题?而要实现这个目标,需要什么呢? 用舌头诊断被称为口腔健康的指标,但在东方医学中,舌头也被用来评估全身的状况。换句话说,通过分析舌头的图像…