Web后端开发的学习

发布于:2024-06-19 ⋅ 阅读:(26) ⋅ 点赞:(0)

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:遍历之后拼接什么

存文件到云服务

配置文件

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

连接点