SpringMVC
1 SpringMVC 概述三层架构
表现层:负责数据展示
业务层:负责业务处理
数据层:负责数据操作
MVC(Model View Controller),一种用于设计创建Web应用程序表现层的模式
Model(模型):数据模型,用于封装数据
View(视图):页面视图,用于展示数据
jsp
html
Controller(控制器):处理用户交互的调度器,用于根据用户需求处理程序逻辑
Servlet
SpringMVC
2 入门案例2.1 入门案例制作①导入SpringMVC相关坐标
<!-- servlet3.1规范的坐标 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</s ...
Zookeeper
Zookeeper教学目标
了解zookeeper
了解zookeeper的应用场景
了解zookeeper的基本概念和数据模型
能够搭建和配置zookeeper
熟练操作zookeeper服务端和客户端命令
能够使用java api 操作zookeeper
理解zookeeper watch机制
能搭建zookeeper集群
1、介绍zookeeper【目标】1:了解Zookeeper的概念
2:了解分布式的概念
【路径】1:Zookeeper概述
2:Zookeeper的发展历程
3:什么是分布式
4:Zookeeper的应用场景
【讲解】1.1、zookeeper概述 ZooKeeper从字面意思理解,【Zoo - 动物园,Keeper - 管理员】动物园中有很多种动物,这里的动物就可以比作分布式环境下多种多样的服务,而ZooKeeper做的就是管理这些服务。 Apache ZooKeeper的系统为分布式协调是构建分布式应用的高性能服务。 ZooKeeper 本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录树方式的数据存储,并且可以对树 ...
Ajax快速入门
1、Ajax快速入门1.1、AJAX介绍
AJAX(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML。
本身不是一种新技术,而是多个技术综合。用于快速创建动态网页的技术。
一般的网页如果需要更新内容,必需重新加载个页面。
而 AJAX 通过浏览器与服务器进行少量数据交换,就可以使网页实现异步更新。也就是在不重新加载整个页 面的情况下,对网页的部分内容进行局部更新。
1.2、原生JS实现AJAX
代码实现
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@ ...
数据库分库分表
数据库分库分表 在项目开发的过程中,随着项目的不断庞大,伴随着的就是数据量的不断膨胀,当数据达到了一个量级之后,就会考虑数据的拆分。这个问题对于所有的中大型项目都不可避免要进行处理。
1)docker下安装mysqldocker run --name mysql3311 -p 3311:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/3311/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/3311/data/:/var/lib/mysql -v /home/mysql/docker-data/3311/logs/:/var/log/mysql -d mysql:5.7
2)数据库扩展思想
热备份:数据库在运行的过程中,对数据进行备份操作。相对的,还有冷备份,冷备份需要停机,然后对数据进行备份操作。
多活:所谓的多活,就是让数 ...
畅购day10
第10章 购物车学习目标
资源服务器授权配置
掌握OAuth认证微服务动态加载数据
掌握购物车实现流程
OAuth2.0认证并获取用户令牌数据
微服务与微服务之间的认证
1 资源服务器授权配置1.1 资源服务授权配置
基本上所有微服务都是资源服务
(1)配置公钥 认证服务生成令牌采用非对称加密算法,认证服务采用私钥加密生成令牌,对外向资源服务提供公钥,资源服务使 用公钥 来校验令牌的合法性。 将公钥拷贝到 public.key文件中,将此文件拷贝到每一个需要的资源服务工程的classpath下 ,例如:用户微服务.
(2)添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
(3)配置每个系统的Http请求路径安全控制策略以及读取公钥信息识别令牌,如下:
@Configuration
@E ...
畅购day12
第12天 微信支付学习目标
能够说出微信支付开发的整体思路
思路:生成支付二维码
思路:查询支付状态
实现支付成功修改订单的状态
MQ发送消息
MQ接收消息
支付成功之后微信需要通知商户进行支付状态的信息
1 开发准备1.1 开发文档微信支付接口调用的整体思路:
按API要求组装参数,以XML方式发送(POST)给微信支付接口(URL),微信支付接口也是以XML方式给予响应。程序根据返回的结果(其中包括支付URL)生成二维码或判断订单状态。
在线微信支付开发文档:
https://pay.weixin.qq.com/wiki/doc/api/index.html
如果你不能联网,请查阅讲义配套资源 (资源\配套软件\微信扫码支付\开发文档)
我们在本章课程中会用到”统一下单”和”查询订单”两组API
1. appid:微信公众账号或开放平台APP的唯一标识
2. mch_id:商户号 (配置文件中的partner)
3. partnerkey:商户密钥
4. sign:数字签名, 根据微信官方提供的密钥和一套算法生成的一个加密信息, 就是为了保证交易的安全性
1 ...
畅购day11
第11章 订单学习目标
登录页的配置
登录成功跳转实现
结算页查询实现
下单实现
变更库存
增加积分
支付流程介绍
微信扫码支付介绍
1 登录页面配置前面使用的都是采用Postman实现登录,接着我们实现一次oauth自定义登录。
1.1 准备工作(1)静态资源导入
将资料/页面/前端登录相关的静态资源导入到changgou-user-oauth中,如下图。
并替换掉./ 为/ 如图 按CTR+R 并在第一个输入框输入 ./ 再第二个输入框输入/ 并点击替换所有。
(2)引入thymeleaf
修改changgou-user-oauth,引入thymeleaf模板引擎起步依赖
<!--thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
(3)登录配置
修改c ...
畅购day13
第13章 分布式事务学习目标
理解什么是事务
理解什么是分布式事务
理解CAP定理
CAP不能3者同时成立
能说出相关的分布式事务解决方案
1.2PC-JTA分布式事务
2.本地消息-业务库中添加对应的消息表和业务耦合实现
3.MQ事务消息-RocketMQ
4.Seata
理解Seata工作流程
AT模式-表
TCC模式-代码补偿机制
能实现Seata案例
Seata使用案例
作业:实现项目中分布式事务控制-下单->用户微服务(增加积分)->Goods微服务(库存递减)
1 分布式事务介绍1.1 什么是事务数据库事务(简称:事务,Transaction)是指数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成[由当前业务逻辑多个不同操作构成]。
事务拥有以下四个特性,习惯上被称为ACID特性:
原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态是指数据库中的数据应满足完整性约束。除此之外, ...
畅购day14
第13章 秒杀学习目标
==秒杀业务分析==
秒杀商品压入Redis缓存
Spring定时任务了解-定时将秒杀商品存入到Redis中
秒杀商品频道页实现-秒杀商品列表页
秒杀商品详情页实现
下单实现(普通下单)
==多线程异步抢单实现-队列削峰==
1 秒杀业务分析1.1 需求分析所谓“秒杀”,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动。由于商品价格低廉,往往一上架就被抢购一空,有时只用一秒钟。
秒杀商品通常有两种限制:库存限制、时间限制。
需求:
(1)录入秒杀商品数据,主要包括:商品标题、原价、秒杀价、商品图片、介绍、秒杀时段等信息
(2)秒杀频道首页列出秒杀商品(进行中的)点击秒杀商品图片跳转到秒杀商品详细页。
(3)商品详细页显示秒杀商品信息,点击立即抢购实现秒杀下单,下单时扣减库存。当库存为0或不在活动期范围内时无法秒杀。
(4)秒杀下单成功,直接跳转到支付页面(微信扫码),支付成功,跳转到成功页,填写收货地址、电话、收件人等信息,完成订单。
(5)当用户秒杀下单5分钟内未支付,取消 ...
畅购day16
第16章 集群高可用学习目标
理解集群流程
理解分布式概念
能实现Eureka集群配置
能掌握Redis集群[Redis集群配置、哨兵策略(案例)、Redis击穿问题]
1.Redis集群的原理
2.Redis集群会用->在java代码中能链接集群服务
3.哨兵策略->监控集群的健康状态[作用]
4.Redis击穿->如何解决击穿问题
5.如何解决Redis雪崩问题->多级缓存
RabbitMQ集群搭建
1.集群概述1.1什么是集群1.1.1集群概念集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多。
1.1.2集群的特点集群拥有以下两个特点:
可扩展性:集群的性能不限制于单一的服务实体,新的服务实体可以动态的添加到集群,从而增强集群的性能。
高可 ...
畅购day15
第14章 秒杀学习目标
==防止秒杀重复排队==
重复排队:一个人抢购商品,如果没有支付,不允许重复排队抢购
==并发超卖问题解决==
1个商品卖给多个人:1商品多订单
==秒杀订单支付==
秒杀支付:支付流程需要调整
==超时支付订单库存回滚==
1.RabbitMQ延时队列
2.利用延时队列实现支付订单的监听,根据订单支付状况进行订单数据库回滚
1 防止秒杀重复排队用户每次抢单的时候,一旦排队,我们设置一个自增值,让该值的初始值为1,每次进入抢单的时候,对它进行递增,如果值>1,则表明已经排队,不允许重复排队,如果重复排队,则对外抛出异常,并抛出异常信息100表示已经正在排队。
1.1 后台排队记录修改SeckillOrderServiceImpl的add方法,新增递增值判断是否排队中,代码如下:
上图代码如下:
//Long userQueueCount = redisTemplate.boundHashOps("UserQueueCount").increment(username, 1);
Long userQueueCount = redisTemplat ...
畅购day01
第1章 框架搭建学习目标
了解电商
了解畅购架构
了解畅购工程结构
畅购工程搭建
商品微服务搭建
品牌增删改查[通用的mapper实现DAO的操作]
1. 走进电商1.1 电商行业分析近年来,世界经济正向数字化转型,大力发展数字经济成为全球共识。党的十九大报告明确提出要建设“数字中国”“网络强国”,我国数字经济发展进入新阶段,市场规模位居全球第二,数字经济与实体经济深度融合,有力促进了供给侧结构性改革。电子商务是数字经济的重要组成部分,是数字经济最活跃、最集中的表现形式之一。2017年,在政府和市场共同推动下,我国电子商务发展更加注重效率、质量和创新,取得了一系列新的进展,在壮大数字经济、共建“一带一路”、助力乡村振兴、带动创新创业、促进经济转型升级等诸多方面发挥了重要作用,成为我国经济增长的新动力。2017年,我国电子商务交易规模继续扩大,并保持高速增长态势。国家统计局数据显示,2017年全国电子商务交易额达29.16万亿元,同比增长11.7%;网上零售额7.18万亿元,同比增长32.2%。我国电子商务优势进一步扩大,网络零售规模全球最大、产业创新活力世界领先。数据显示,截止201 ...