一、登录状态的维护

登录状态的维护是通过session来维护、上节说到登录成功后会存一个loginUser对象到session中。当对象没有登录时自然就不会有这个对象、所以在购买商品时没有登录是无法进行购买的,而实现这个功能用到的是springmvc的拦截器功能。

登录拦截器的实现

想要使用拦截器首先要自定义一个拦截器、然后注册到ioc容器中。

自定义拦截器

自定义拦截器就是写一个类实现HandlerInterceptor接口、实现这个接口可以重写三个方法、如下图
分别是:

  • preHandle:控制器执行之前执行、return false为不放行、return true表示放行。
  • postHandle:控制器执行之后执行。
  • afterHandle:页面渲染完之后执行。

想要进行登录状态的拦截显而易见通过实现preHandle方法实现。项目中的拦截器实现如下
通过阅读代码可知sesison要有loginUser对象就表示已登录、没有说明未登录会返回一个USER_NOT_LOGIN状态和用户未登录的消息封装到data中、以json返回给前端。

配置拦截器

定义好拦截器后将它注册到IOC中配置好拦截的路径即可完成。实现是写一个配置类,并通过实现WebMvcConfigurer接口中的addInterceptors方法实现。
到这里自定义的拦截器就完成了。

总结

自定义一个拦截器、实现HandInterceptor接口中的pre方法,在方法中判断session有没有登录对象、有说明已登录放行、没有说明没有登录进行拦截。自定义好后再通过配置类实现WebMvcConfig接口中的addInterceptors方法配置拦截路径即可。
面试可能会问到拦截器原理、请看这篇文章 拦截器原理

二、跨域问题

本项目是采用前后端分离开发、前后端分离开发肯定是避免不了跨域问题的。

跨域是什么

跨域是指不同域名之间的相互访问,这是由浏览器的同源策略决定的
同源策略:就是说协议 ,域名,端口号要完全一致,有一个不一致就会造成跨域问题。
跨域只存在浏览器、不存在其他平台。

springboot解决跨域的方法

参考:SpringBoot系列(八) 分分钟学会SpringBoot多种跨域解决方式
项目中使用的是方法一的@CrossOrigin注解,其他方法请看上面的博文。
代码说明:@CrossOrigin这个注解用起来很方便、可以用在类上也可以用在方法上。里面如果不设置任何值、就是默认所有URL都可以访问。

  • value属性可以设置多个URL。
  • origins和value的作用一样
  • maxAge属性指定了准备响应前的缓存持续的最大时间。就是探测请求的有效期。
  • allowCredentials属性表示用户是否可以发送、处理 cookie。默认为false
  • allowedHeaders 属性表示允许的请求头部有哪些。
  • methods 属性表示允许请求的方法,默认get,post,head。

@CrossOrigin原理就是利用spring的拦截器实现往response里添加 Access-Control-Allow-Origin等响应头信息,详细请见:Spring @CrossOrigin 注解原理(转)

三、商品列表

前端页面

通过开发者模式很容易就看出请求的接口是http://127.0.0.1:8080/item/list

后端实现

数据库

用到了三张表

  1. item商品表:用于存放商品的数据
    2. item_stock商品库存表:用于存放商品库存信息、与商品表分开的目的是高并发情况下在下单扣减库存时只锁库存表不影响其他用户查看商品的信息。
    3. promotion活动表:用于保存秒杀商品的活动信息。

找到对应的处理控制器由代码可知调用了service的findItemsOnPromotion()方法、找到service层的实现
根据代码可知、先将全部商品查出来、然后使用stream流中的map将每件商品的库存和活动映射到商品实体数据中。
查询所有商品对应的mappe、这里的sql语句可以看出是查询在活动时间范围内的记录、select 1的用法和select 作用是一样的、但select 1的效率会高于应为不用查出字段出来一般select 1用做条件使用。
“select 1 from table”什么意思
查询库存对应的mapper
查活动对应mapper

四、商品详情

前端页面

根据页面可知请求的接口是http://127.0.0.1:8080/item/detail/161

后端实现

用到的数据表和商品展示是一样的。

根据接口找到后端控制处理器

找到service
根据代码可知、先根据前端传过来的id查询商品、然后再从库存表中查库存、最后查活动表中对应的活动。
分别对应mapper
查询商品对应的mapper
查库存的mapper
查活动的mapper

五、总结

这两块功能实现很简单没什么特别的、需要注意的是面试的时候问你关于mysql方面面试题、要好好看下mysql的八股文。

(秒杀项目) 4.3 商品列表与详情相关推荐

  1. vue项目实现从商品列表页跳转详情页后,返回列表页保持页面在原位置,且列表页刷新的方法

    vue项目实现从商品列表页跳转详情页后,返回列表页保持页面在原位置,且列表页刷新的方法 页面跳转后回退保持原位置 App.vue页面中使用keep-alive缓存组件 <template> ...

  2. ios图文详情加载html_前端项目009 Vue 信息分享系统 商品列表、详情

    頔言頔语:进步,一定要进步,进步是跟收入持平的本钱. 01 商品列表 0101 路由配置和数据请求 0102 上拉加载更多 02 商品详情 0201 详情数据请求和展示 0202 轮播图组件提取 02 ...

  3. uni-app 小程序项目三 1. 商品列表、过滤器、封装商品item组件、上拉加载、节流阀、下拉刷新、2. 商品详情、轮播图、商品价格闪烁问题 3.加入购物车、vuex、持久化存储、mixiins

    1.0 创建 goodslist 分支 1.1 定义请求参数对象 为了方便发起请求获取商品列表的数据,我们要根据接口的要求,事先定义一个请求参数对象: data() {return {// 请求参数对 ...

  4. java商品详情页设计_java高并发秒杀系统3-2节商品详情页上.mp4

    本Java商城秒杀系统视频教程目录如下:    java高并发秒杀系统1-1节java高并发商城秒杀优化学习指引.mp4 java高并发秒杀系统1-2节项目环境搭建(Eclipse)-节.mp4 ja ...

  5. SpringBoot学习+秒杀项目

    目录一 ~ 六来源:GitHub 一.项目简介 1.商品列表页获取秒杀商品列表 2.进入商品详情页获取秒杀商品详情 3.秒杀开始后进入下单确认页下单并支付成功 二.应用springboot完成基础项目 ...

  6. 秒杀项目(前后端分离)

    1P/11P项目开篇 技术点总结 1.安装开发工具 2P/11p 项目架构介绍 常见的请求:返回前端页面HTML:Model+HTML模板 ajax异步请求:返回json数据[返回特定格式的字符串只返 ...

  7. 微信小程序开发一个小型商城(四、商品列表)

    上一篇文章,微信小程序开发一个小型商城(三.商品分类设计) 在从上一个界面跳转过来,会看到商品列表这个界面:如下图所示: 页面分析:从上到下:分别是一个已经定义好的自定义组件,下面的综合,销量,也是一 ...

  8. 秒杀项目之商品展示及商品秒杀

    目录 登录方式调整 生成秒杀订单 绑定秒杀商品 查看秒杀商品 订单秒杀 移除seata相关 生成秒杀订单 前端页面秒杀测试 登录方式调整 第1步:从zmall-common的pom.xml中移除spr ...

  9. 电商项目实战之商品秒杀

    电商项目实战之商品秒杀 定时任务 corn表达式 实现方式 基于注解 基于接口 实战 秒杀系统 秒杀系统关注问题 秒杀架构设计 商品上架 获取当前秒杀商品 获取当前商品的秒杀信息 秒杀最终处理 参考链 ...

  10. api商品分享源码_SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享

    前言: 一个整合SSM框架的高并发和商品秒杀项目,学习目前较流行的Java框架组合实现高并发秒杀API 源码获取:关注头条号转发文章之后私信[秒杀]查看源码获取方式! 项目的来源 项目的来源于国内IT ...

最新文章

  1. sql语句中 时间数值转换为时间格式函数
  2. 设计模式六大原则之白话讲解
  3. 2.4 使用来自不同分布的数据,进行训练和测试-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  4. python 生成001开始的序号_你知道嘛:Python内建序列通用操作有6种实现方法(赶快收藏)...
  5. 编码方式 / ASCII、UNICODE、UTF-8、ANSI
  6. 使用ADOMD.NET获取Analysis Services元数据
  7. 小屏手机大势已去!iPhone 12 Pro Max被买空mini居然还有货
  8. 《Hadoop权威指南》知识点整理5
  9. 文本表达:解决BERT中的各向异性方法总结
  10. 关键词排名软件-免费的自动关键词排名软件
  11. Linux 字体存放位置及字体安装
  12. c语言编写qq机器人软件,未编译的QQ机器人C语言版
  13. MC/DC覆盖的计算总结
  14. 中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障---08
  15. golang牛牛算法规则与聊天功能
  16. SQL语句增删改查公司-员工3表典型案例
  17. word调整标题编号
  18. Linux版本的 免费的人脸识别技术。
  19. 防火墙软件Netfilter之包过滤技术(转)
  20. 计算机博弈六子棋估值函数,机器博弈中搜索策略和估值函数的设计

热门文章

  1. Web Audio介绍
  2. 4.RabbitMQ 安装
  3. java定义不同类型参数_java – Mockito允许使用不同的参数类型来模拟重载方法
  4. window.load和$(document).ready()事件
  5. css中background-image与background-color在元素背景中开始结束的位置
  6. QAliber - 介绍一款开源的GUI自动化测试工具
  7. Java动态代理的实现机制
  8. Python中的get和set方法
  9. 使用C#向ACCESS中插入数据
  10. (原创)c#学习笔记10--定义类成员01--成员定义03--定义属性