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的全类名即可

连接点

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WPF学习(4)--SCICHART学习

一、项目创建过程 1.下载SCICHART插件 2.选中第一个&#xff0c;确保引用中有我们要用的 二、示例代码 1.前端代码 <Window x:Class"SciChart.Examples.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"h…

LSS算法核心原理详细解读,一看就懂,不懂请打我!

目录 核心整体流程分步阐述backbone几何关系&#xff08;创建视锥&#xff09;和视锥投影到egoVoxel PoolingHead 总结 核心 将2D图像特征转换到BEV feature特征 该算法是BEV领域中的一大基石 整体流程 流程步骤 &#xff08;1&#xff09;利用backbone获得环视图像&#xf…

配置文件-基础配置,applicationproperties.yml

黑马程序员Spring Boot2 文章目录 1、属性配置2、配置文件分类3、yaml文件4、yaml数据读取4.1 读取单个数据4.2 读取全部属性数据4.3 读取引用类型属性数据 1、属性配置 SpringBoot默认配置文件application.properties&#xff0c;通过键值对配置对应属性修改配置 修改服务器端…

Day 25:1807. 替换字符串中的括号内容

Leetcode 1807. 替换字符串中的括号内容 给你一个字符串 s &#xff0c;它包含一些括号对&#xff0c;每个括号中包含一个 非空 的键。 比方说&#xff0c;字符串 “(name)is(age)yearsold” 中&#xff0c;有 两个 括号对&#xff0c;分别包含键 “name” 和 “age” 。 你知道…

IntelliJ IDEA 使用 Maven 时不加载本地私服的最新版本快照(snapshot)JAR 包

IntelliJ IDEA 使用 Maven 时不加载本地私服的最新版本快照&#xff08;snapshot&#xff09;JAR 包 目录 IntelliJ IDEA 使用 Maven 时不加载本地私服的最新版本快照&#xff08;snapshot&#xff09;JAR 包1. 检查 settings.xml2. IDEA Maven 配置3. 强制更新 Snapshot4. 使用…

「51媒体-年中大促」天津有哪些媒体资源-媒体宣传服务公司

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 天津的媒体资源相当丰富&#xff0c;涵盖了报纸、电视、广播、新闻门户网站、央媒驻天津机构、视频媒体以及全国媒体资源等多个方面。以下是详细的媒体资源分类和具体信息&#xff1a; 一…

艾伦脑图谱(Allen Brain Atlas)

文章目录 一、艾伦研究所&#xff08;Allen Institute&#xff09;1.1、艾伦脑图谱&#xff08;Allen Brain Map&#xff09;1.1.1、艾伦&#xff08;小鼠大脑&#xff09;通用坐标框架&#xff08;Allen Mouse Brain Common Coordinate Framework&#xff0c;CCFv3&#xff09…

基于single flight来解决缓存击穿

目录 1. 缓存击穿2. 常见解决方案3.single flight方式3.1 模拟业务场景3.2 使用single flight的方式 缓存雪崩、缓存击穿、缓存穿透不单单是缓存领域的经典场景&#xff0c;更是面试当牛马时必备&#xff08;背&#xff09;八股文。 我们来讨论下缓存击穿场景下的解决方案。 …

Linux网络编程:epoll

1.IO多路转接---epoll 1.1.接口认识 epoll多路转接的实现是基于三个系统调用的&#xff0c;而这些系统调用底层是epoll模型的构建&#xff0c;和设置的结构体、数据结构之间的交互&#xff0c;我们需要一步步地进行epoll的学习&#xff01; epoll_create( ) 如图&#xff1a;…

从短期到长期,不同保存期限的红酒管理技巧

在葡萄酒的世界中&#xff0c;保存与管理的技巧对于确保葡萄酒的品质和口感至关重要。特别是对于云仓酒庄雷盛红酒&#xff0c;这种多类型红酒&#xff0c;更需要我们掌握一定的保存管理技巧。这篇文章将详细探讨从短期到长期&#xff0c;不同保存期限的云仓酒庄雷盛红酒的管理…

如何高效使用大型语言模型 LLMs 初学者版本 简单易上手

第一条也是最重要的一条规则是 永远不要要求LLM提供你无法自己验证的信息, 或让它完成你无法验证其正确性的任务。 唯一例外的情况是那些无关紧要的任务&#xff0c; 例如&#xff0c;让大型语言模型提供公寓装修灵感之类的是可以的 。 首先请看两个范例 不佳示范&#xff1a…

上海交通大学、中科大 开源镜像站停止 Docker Hub 仓库镜像支持后的可用替代源

上海交通大学 Linux 用户组发布公告&#xff1a; 即时起中止对 Docker Hub 仓库的镜像。Docker 相关工具默认会自动处理失效镜像的回退&#xff0c;如果对官方源有访问困难问题&#xff0c;建议尝试使用其他仍在服务的镜像源。 源加速地址 有网友表示百度的 Docker Hub 加速器…

创新实训2024.06.17日志:大模型微调总结

前段时间其实我们已经部署了大模型&#xff0c;并开放了对外的web接口。不过由于之前某几轮微调实验的大模型在对话时会有异常表现&#xff08;例如响应难以被理解&#xff09;&#xff0c;因此我在项目上线后&#xff0c;监控了数据库里存储的对话记录。确定了最近一段时间部署…

微服务开发与实战Day10 - Redis面试篇

一、Redis主从集群 1. 搭建主从集群 1.1 主从集群结构 单节点Redis的并发能力是有限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 如图所示&#xff0c;集群中有一个master节点、两个slave节点&#xff08;现在叫re…

Vector | Graph:蚂蚁首个开源Graph RAG框架设计解读

作者&#xff1a;范志东 检索增强生成&#xff08;RAG&#xff1a;Retrieval Augmented Generation&#xff09;技术旨在把信息检索与大模型结合&#xff0c;以缓解大模型推理“幻觉”的问题。近来关于RAG的研究如火如荼&#xff0c;支持RAG的开源框架也层出不穷&#xff0c;并…

AI导航网

文章目录 1、[AI导航网](https://www.ainav.cn/) 1、AI导航网 https://www.ainav.cn/

GenICam标准(二)

系列文章目录 GenICam标准&#xff08;一&#xff09; GenICam标准&#xff08;二&#xff09; GenICam标准&#xff08;三&#xff09; GenICam标准&#xff08;四&#xff09; GenICam标准&#xff08;五&#xff09; GenICam标准&#xff08;六&#xff09; 文章目录 系列文…

【蜂窝物联】物联网智能控制器助力各种自动化控制领域科学管控

【蜂窝物联】4G远程温湿度传感器科学管理利器&#xff0c;应用无处不在 2024-06-17 14:09 发布于&#xff1a;福建省 随着信息化的不断推进&#xff0c;对各行各业都是一次现代化升级的契机&#xff0c;比如工厂的温湿度监测工作&#xff0c;完全可以由无线温湿度监控方案…

【Spine学习10】之 创建新骨骼时,自动绑定图片和插槽的快捷方式

两天没更新了。 遇到一些难解的难题 用的版本是破解版 不知道为啥现在的教程非常地快 明明有些细节很重要还略过讲 所以创建骨骼这里 基本创建是都会 可是骨骼一多 实际工作中的重命名也太麻烦了 。 这就需要学习快捷创建方式&#xff1a; <将对应图片自动绑定到新骨骼上并…

Vue55-TodoList案例-本地存储

一、TodoList案例-本地存储 此时&#xff0c;修改对象里面的属性&#xff0c;watch监视不到&#xff01; 需要深度监视&#xff0c;就不能用简写形式&#xff01; 二、jeecg-boot中的本地存储 jeecg-boot中&#xff0c;浏览器的本地存储&#xff0c;存储的是token&#xff01;…