简单的Java商城项目记录

article/2025/10/19 13:34:04

文章目录

  • 前言
  • 一、环境搭建
    • Maven
    • SpringBoot
  • 二、SpringBoot开发后端接口
    • 介绍
    • 热部署
    • Lombok
    • MybatisPlus
    • 测试接口工具postman
    • 注解
    • 调用关系
    • 后端接口开发流程
    • 一些注意事项
  • 三、前端开发环境搭建
    • Axios的增删改查
    • 小结
  • 四、 前端工程化思想/完成商城首页效果
    • 跨域请求问题
    • Vue项目结构
  • 五、登录认证
  • 六、验证码与权限认证
    • 登录验证
    • 验证码实现思路
    • 权限认证
  • 七、设计商品分类查询接口
    • 前后端分离后,项目如何部署
    • 小结
  • 八、SpringCloud 微服务框架
    • nacos配置
    • SpringCloud 项目建立流程
  • 九、gateway和sentinel
    • gateway
    • sentinel
    • sleuth + zipkin 实现链路跟踪
    • 小结


前言

本文是博主在实现一个简单的前后端分离开发的Java商城项目中所做的一些笔记,其中记录了一些实现过程中所使用的一些工具和容易犯的错误。记录如有错误,欢迎指正。

一、环境搭建

  后端开发使用IDEA编译器

Maven

  专门用于构建和管理Java相关项目的工具。

  使用Maven管理的Java 项目都有着相同的项目结构。有一个pom.xml 用于维护当前项目都用了哪些jar包;所有的java代码都放在 src/main/java 下面;所有的测试代码都放在src/test/java 下面。

  Maven便于统一维护jar包。只需设置依赖,就可自动下载相关jar包。

SpringBoot

  Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

  新加入项目需要设置project structure

二、SpringBoot开发后端接口

介绍

  后端:负责开发接口(Restful API),Springboot实现开发接口。SpringCloud实现微服务的解决方案。

  ORM(Object Relational Mapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。简单理解为一种框架的格式
在这里插入图片描述

  目前主流的ORM框架: JPA 、Mybatis、MybatisPlus(升级版)
  SpringDataJpa 属于JPA的规范—》JAVAEE的规范

  前端:用户交互,提升用户体验。大前端时代(在不同移动设备运行)PC、平板、手机、笔记本、微信小程序、app等。

  注意连接数据库的账号密码正确。

热部署

在这里插入图片描述
按Ctrl+Alt+Shift+/打开下图窗口,打√
在这里插入图片描述

Lombok

  Lombok识别@Entity类似的注解,省去写实体类的setter、getter、constructor、toString、hasCode、equals等方法。
  使用Lombok也需要添加依赖

MybatisPlus

MybatisPlus实现数据库操作的两种方式:
  ①通过继承BaseMapper,这个BaseMapper是一个接口,里面已经封装了对单表增删改查的所有方法,用户只需要继承BaseMapper即可
  ②通过IService来实现单表的CRUD。
  注意:必须在启动类上添加扫描Mapper包的注解@MapperScan().

  ServiceImpl<Mapper,Users> 是mybatisplus自己实现的基类service的实现类。只需要传进去两个泛型参数接口,一个表示Mapper,一个表示类型。 继承这个类,就会自动实现单表所有CRUD的方法。
  Service比BaseMapper功能更强大。

测试接口工具postman

注解

  1. @RestController :表示这个类是控制类(接口),每个方法返回的都是json对象。
  2. @GetMapping 和 @PostMapping就是GET请求和POST请求,通常GET请求用于查询操作,POST请求一般做插入操作。用户登录相当于查询用户名和密码,使用GET请求,用户注册就是向数据库插入。同理,若是修改用户资料一般发生PUT请求,如果是删除资料,发送DELETE请求。
  3. @RequestMapping(“users”)

  不同接口风格不同(代码规范不同)
  RESTFUL API规定url里面不能出现动词(GET、POST、PUT、DELETE)
  POST一定是给后端传入一个json对象,一般而言POST请求不会带任何参数。

调用关系

调用关系,从上到下。不同层用不同注解。
在这里插入图片描述

后端接口开发流程

用springboot开发后端接口的大体流程
第一步:创建实体类,生成表。
第二步:编写service和service impl层。
第三步:编写单元测试,测试service层是否正常
第四步:编写controller层,就是接口层。
第五步:使用swagger或者postman进行接口测试。

一些注意事项

  1. 只有int、long类型才能设为auto_increment,字符串不能设

  2. 单元测试要添加Junit依赖

  3. @Data注解的作用是省去了写setter/getter/构造方 法/toString/hashCode/equals
    @Entity帮助自动生成表结构

  4. 通常让Mapper继承BaseMapper,因为BaseMapper中就已经含有了基本的增删改查方法。

  5. @RunWith(SpringRunner.class)
    @SpringBootTest
    测试类上面必须添加的两个注解

  6. @Autowired
    自动注入

  7. 注意:getOne或者selectOne一定要确保返回的一条记录,如果查询出来多条记录,则会抛出异常。

三、前端开发环境搭建

前端开发使用Vue

springboot一般打为jar包(设置跳过测试)
Webstorm 前端开发利器

单向绑定:改一个值,另一个不变 v-value
双向绑定:改一个值,另一个同样改变 v-model

Vue+axios发送异步请求

前端如何调用后端接口?
Axios请求发送完返回一个promise对象。
可以使用then箭头函数处理请求

一般而言,发送POST请求就是传递json对象,不推荐传参数的。如果一定要传参,后端接口函数写入传入参数,后端只需在后面加params。(与get相似)

Axios的增删改查

不同端口的跨域请求:后端:设置config(常用) 前端:jsonp
首先后端配置CrosConfig解决跨区请求问题。前端引入axios类库,分别发送get/post/put/delete请求即可。
在这里插入图片描述

小结

在这里插入图片描述

四、 前端工程化思想/完成商城首页效果

本项目前端使用vue-cli项目
首先检查 Git/Node.js/vue-cli 是否配置成功

从vue-cli3后,webpack配置目录就已被隐藏。
一般前端端口占用80

Vue.config.js 配置修改端口号

首先需要给vue添加路由组件router

可以直接使用ElementUI添加组件
导航栏 + 轮播组件 + 内容列表 + 页面尾部

跨域请求问题

前端解决跨域问题:
Vue 在vue.config.js中配置
在这里插入图片描述

前后端分离开发经常会遇到跨域请求问题,浏览器默认不允许跨域请求的。
跨域请求的情况:
1.域名不同
2.端口不同
3,协议不同(http/https)

解决方法:
1.后端解决:在springboot的config包下创建一个CorsConfig的配置类即可
2.前端解决:vue.config.js里面设置代理(proxy)代码如上图。
如果前后端都解决跨域问题更好,这样是双保险。

Vue项目结构

assets放静态资源 components 放视图组件 mock 放测试接口
plugins放第三方插件 router 路由 store 状态管理
util 用户封装工具类 views 视图

五、登录认证

@Column(length = 20)
可以限制字段长度

凡是有登录注册的模块的web应用都必须要解决两个核心问题
1.登录认证
系统有一些功能是要求必须登录后才能使用的,必须要检查登录认证。
2.权限认证
登录之后,有些操作必须要检查是否有对应的权限(角色),才能操作。

无论是登录还是权限认证,都需借助第三方工具来完成。目前主流的工具有:Shiro apache
Spring Security Spring
(以上两个学习成本较高,较复杂)

本项目使用的是国内的较简洁的工具:sa-token权限认证框架
(直接到官网复制使用)

Redis 经常当做服务器端的缓存
Redis是一个key-value 存储系统,跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

Redis可以持久化会话(session),即便服务器重启。

六、验证码与权限认证

问题:
前端中MyNavigator的isLogin的值(boolean值)是参考服务器的登录认证,还是参考浏览器的本地缓存?

登录验证

在 NodeJS web server 项目上,我们需要做登录验证,通过 用户名和密码 换取 token 是常用的方式。
JSON Web Token是一种 JSON 表达的 token 格式。一个 token 包含了三部分:header,payload,signature。
header 是 token 的一部分,用来存放 token 的类型和编码方式,通常是使用 base-64 编码。
payload 包含了信息。你可以存放任一种信息,比如用户信息,产品信息等。它们都是使用 base-64 编码方式进行存储。
signature 包括了 header,payload 和密钥的混合体。signature 必须安全地保存储在服务端。

临时字段(例如验证码),可以不映射入表内,加上注解:
@Transient //JPA的注解
@TableField(exist = false) //Mybatis

验证码实现思路

前端发送token,服务器收到token,以token为键,验证码为值,保存到redis缓存中,设置过期时间。
注册的时候,post请求携带前端的token,服务器比对有没有该token的键在redis缓存中,如果有则取出来,和regUser.validateCode属性对比,如果一样则验证码通过。
记住我  的功能要通过前端的cookie实现。
前端只能保存每次最后一次登录成功的用户信息到本地缓存里面。
这里和后端再次判断登录状态本身不冲突。
在试验cookie效果的时候,先清空一下浏览器缓存(清除浏览数据)。

有效验证一定要通过邮箱验证,或者手机短信验证才能实现。

权限认证

权限认证:同样使用了sa-token中的角色认证
创建一个角色表和一个用户和角色的关系表

判断用户的角色和权限一定是在用户登录成功之后才能判断。

七、设计商品分类查询接口

SpringCloud管理微服务模块

后端负责“三高”: 高并发,高负载,高性能

实际项目开发时,前端使用mock测试来模拟后端的接口和数据。

前后端分离后,项目如何部署

  后端项目打包成war包或者jar包,使用docker或者直接部署到linux服务器上运行。
(打包名需与pom文件中的finalName一致。同时需在pom文件中设置跳过测试。从Maven的Lifecycle中的package,右键Run Maven Build,成功后,在targe文件夹下就会出现一个jar包)

  前端通常部署到Nginx服务器上。Nginx通常使用linux版本。
  当Nginx不识别代理接口时,需要在Nginx中配置反向代理(nginx常用功能之一,还有动静分离,负载均衡等)。
(前端使用npm build即可打包。会出现一个dist文件夹,将其下所有文件复制到Nginx的HTML下。运行程序即可。前端端口一般设置80。)
在这里插入图片描述
Nginx一次可以部署多个项目,在HTML文件夹下可以划分子目录。

小结

在这里插入图片描述

八、SpringCloud 微服务框架

学习网站 :方志朋

前后端可以都放到idea上
idea把Vue插件安装后,也可以开发Vue项目
前端 package.json npm server

SpringCloud 提供全套的分布式系统解决方案

nacos配置

nacos作为注册中心,有standalone(单机版–>一般用于demo测试),cluster(集群)两种运行方式。

先将nacos中nacos_mysql.sql文件导入MySQL中(需将配置文档中的数据库用户名和密码改为自己的),创建出nacos所需要用的表。
在bin下startup.cmd中改MODE(运行模式),之后启动该文件即可(占用8848端口)。

SpringCloud 项目建立流程

首先在事先创建好的工作空间中创建Empty Project;
项目开始前的setting准备工作:
File Encoding: UTF-8
Maven: Execute goals recursively ; Always update snapshots ;
Update Incices on project open
Compiler: Build project automatically

接下来在空项目中创建Maven模块作为父模块(实际就是一个pom),并在pom中添加父模块依赖,删除其src;
GroupId需与要测试项目的GroupId一致,本项目是com.oracle。

创建服务提供者(provider):
后端mall_serve当服务提供者,将其(后端项目)放入Springcloud项目的工作空间下就行(与父模块,服务消费者平级)。
(还需在idea中将其引入,此时为平行关系,再将mall_serve中pom中的GroupId改为父模块的值,之后在父模块的pom中添加mall_serve,还需将服务提供者的依赖添加到mall_serve的pom中。之后在mall_serve的application.yml中spring下添加配置,最后在启动类中添加一个注解@EnableDiscoveryClient)

创建服务消费者(consumer):
父模块目录与子模块目录是平级的,在Empty project中创建子模块,将其pom中部分内容与父模块一致(需要注意子模块自己的artifactId的值),还需在父模块的pom的中添加comsumer,同样也需要将服务消费者的依赖添加到comsumer的pom中,其application.yml也需要添加配置。启动类上同样也需要添加三个注解。最后创建一个接口和一个controller去调用provider。
【注.所添加的依赖和配置都是通过网上复制来的,比如说方志朋的教程中的。】

Allow parallel run的√要打上,表示可以启动多个实例。

出现bug,多问互联网。

九、gateway和sentinel

gateway

gateway 服务网关: 路由转发、权限校验、限流控制等。
建立gateway模块,配置过程同provider 和 consumer。
(不要忘记启动类加注解)
不要忘记设置pom中的<java.version>1.8<>和<maven.compiler.source / target>1.8<>。

yml配置文件中代码出现黄色,大多是缺少依赖。首先看Maven下依赖是否导入完成,若还是黄色,则可能是代码层次结构不对(类似python的缩进)。

sentinel

sentinel(哨兵)作为熔断器,为微服务提供流量控制,熔断降级。
(占用8748端口),直接在comsummer上进行改造(也可放在gateway上),添加依赖

sleuth + zipkin 实现链路跟踪

sleuth在分布式系统中提供追踪解决方案,并且兼容支持了zipkin,只需要在pom文件中引入相应的依赖即可。
zipkin实现链路跟踪,占用9411端口。需要在provider、consumer和gateway 的pom上都添加zipkin依赖。也可以直接在父模块的pom中添加(子模块自动全导)。同样需要给三个文件的yml添加配置。
调用关系:
首先调用gateway网关的一个接口,网关再去调用consummer接口,comsummer才去调用真正的服务提供者的接口。

小结

前后端分离开发
后端:接口,三高(高并发、高性能、高可靠性),算法,业务逻辑实现
前端:调用后端接口,负责数据显示,提升用户体验,用户体验优化,
浏览器优化,性能优化等


http://chatgpt.dhexx.cn/article/EgyUoWKU.shtml

相关文章

Java项目:体育用品商城(java+SpringBoot+jsp+html+maven+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目介绍 本项目为前后台管理系统&#xff0c;包括管理员与普通用户两种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,用户管理,商品类型管理,商品管理,订单信息管理,用户留言管理,资讯…

Java项目:网上商城系统(java+jsp+servlert+mysql+ajax)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述&#xff08;需求文档PPT&#xff09; 功能&#xff1a; 主页显示热销商品&#xff1b;所有商品展示&#xff0c;可进行商品搜索&#xff1b;点 击商品进入商品详情页&#xff0c;显示库存&…

基于Java的商城购物系统

源码编号&#xff1a;F-A14 项目类型&#xff1a;Java SE项目&#xff08;GUI图形界面&#xff09; 项目名称&#xff1a;商城购物系统&#xff0c;开源免费 用户类型&#xff1a;双角色&#xff08;会员、管理员&#xff09; 主要技术&#xff1a;java、awt、swing、等技术…

《Java程序设计》实验报告——Java的基本程序设计结构

浙江理工大学 《Java程序设计》 实验报告 20 19&#xff5e;20 20学年第 1学期 学 院 信息学院 班 级 计算机科学技术18&#xff08;3&#xff09; 姓 名 申屠志刚 学 号 2018329621200 任课教师 任祝 &#xff08; 第4周 周二 345节&#xff09; 计算机科…

软件工程课程设计报告

本人的软件工程课程设计报告&#xff0c;可以作以参考&#xff0c;望读者不要全部照抄&#xff0c;仅为大家提供参考&#xff0c;感谢大家的支持&#xff01;&#xff01;&#xff01; 目录 1. 相关文档1.1 文档介绍1.2 文档范围1.3 读者对象 2. 需求分析报告2.1 需求分析背景…

汇编语言程序设计实验报告

运行环境masmplus 链接&#xff1a;https://pan.baidu.com/s/1jWoLfvxBxQgxd6wq21GK0w 提取码&#xff1a;ih43 目录 实验1 汇编语言源程序的输入实验目的实验原理实验仪器实验步骤实验要求 实验2 数据的建立与传送程序实验目的实验原理实验仪器实验步骤实验要求 实验3 分支程序…

C高级语言程序设计实验报告之选择结构程序设计

文章目录 实验目的题目代码题一题二题三题四 实验目的 1、了解C语言表示辑量的方法&#xff08;以0代表“假”&#xff0c;以非0代表“真”&#xff09; 2、学会正确使用遷辑运算符和遷辑表达式 3、熟掌握if语句的使用&#xff08;包括if语句的嵌套&#xff09; 4、熟掌握多分…

给你一份满分的程序设计报告(附源码)

ATM业务模拟系统功能要求 客户端&#xff1a; 定义用户数据对象&#xff0c;并以此为参数生成用户操作对象&#xff1b; 存款操作&#xff1a;生成一条新的业务信息&#xff08;业务对象&#xff09;&#xff0c;追加到交易记录中&#xff0c;并修改账号余额&#xff1b; 取款…

C++ 会议信息管理系统 程序设计报告

C 会议信息管理系统 C 会议信息管理系统 程序设计报告 会议记录管理系统 问题描述: 定义会议信息类class Conference 会议信息包括:会议编号&#xff0c;会议名称、部门名称、会议地点&#xff0c;会议日期&#xff0c;会议主会议记录人&#xff0c;出席人员&#xff0c;会…

Java高级程序设计课程设计报告

一、基于OBE模式的实验目的和要求 要求复习课件中理论知识&#xff1b;练习课堂所讲的例子&#xff1b;编写程序完成以下实验目标并上交实验报告&#xff08;包括电子文档与纸质文档&#xff09;。 能够根据Java集合框架&#xff0c;利用迭代方法编程实现对集合的遍历操作。能…

Java面向对象程序设计实验报告(实验三 继承的练习)

✨作者&#xff1a;命运之光 ✨ 专栏&#xff1a;Java面向对象程序设计实验报告 ​ 目录 ✨一、需求设计 ✨二、概要设计 ✨三、详细设计 ✨四、调试结果 ✨五、测试结果 ✨附录&#xff1a;源程序代码&#xff08;带注释&#xff09; demo3类 Person类 Student类 …

《程序设计基础课程设计》实验报告

《程序设计基础课程设计》实验报告 班 级&#xff1a; 学 号&#xff1a; 姓 名&#xff1a; 完成题目&#xff1a;1、2、3、4、5、6 概述 此次六道题目里面第四题是参考某博主的文章后实现的&#xff0c;有一些地方仍然不是特别理解&#xff0c;但是原文章里面存在一些小错…

Java面向对象程序设计实验报告(实验五 接口的练习)

✨作者&#xff1a;命运之光 ✨专栏&#xff1a;Java面向对象程序设计实验报告 ​ 目录 ✨一、需求设计 ✨二、概要设计 ✨三、详细设计 ✨四、调试结果 ✨五、测试结果 ✨附录&#xff1a;源程序代码&#xff08;带注释&#xff09; demo5类 Instrument类 Piano类 …

Python程序设计实验报告【合集】

课堂作业 1、词频统计&#xff1a;输入一个文件&#xff0c;程序读取文件&#xff0c;文件内容是英文内容&#xff0c;不少于500个单词的内容&#xff0c;统计每个单词在该短文内出现的次数。 https://www.jb51.net/article/144405.htm https://www.cnblogs.com/Eudemines/p/9…

Java面向对象程序设计实验报告(实验一 面向对象基础练习)

✨作者&#xff1a;命运之光 ✨ 专栏&#xff1a;Java面向对象程序设计实验报告 目录 ✨一、需求分析 ✨二、概要设计 ✨三、详细设计 ✨四、调试分析 ✨附录&#xff1a;源代码&#xff08;带注释&#xff09; 实验一 面向对象基础练习 实验环境&#xff1a;EclipseJDK …

《C语言程序设计》课程总结报告

《C语言程序设计》课程总结报告 一、我学到的内容 二、我的收获&#xff08;包括我完成的所有作业的链接收获&#xff09; 1.PTA作业 22年秋-第1周基础作业 https://pintia.cn/problem-sets/1575138141596397568 22年秋-第2周课后作业 https://pintia.cn/problem-sets/1…

(软件工程)-- 总体设计报告

1引言 1.1编写目的 本阶段完成系统的大致设计并说明系统的数据结构与软件结构&#xff0c;本概要设计说明书的目的就是进一步细化软件设计阶段得出的软件概貌&#xff0c;把它加工成程序细节上非常接近与源程序开发的软件标识。 预期读者&#xff1a;软件测试人员、程序开发员…

程序设计报告模板

一、问题及代码 /* * 文件名称&#xff1a;Ex1-1.cpp * 作 者&#xff1a;曾辉 * 完成日期&#xff1a;2015 年 1 月 1 日 * 版 本 号&#xff1a;v1.0 * 对任务及求解方法的描述部分: * 输入描述&#xff1a;无 * 问题描述&#xff1a;我的第一个C程序&#xff0c;熟…

C语言程序设计期末大作业—教师工资管理系统(附程序设计报告)

C语言大作业——教师工资管理系统 主要的难点在于文件读取 数据结构用的是链表 源码放上&#xff0c;直接粘贴复制就可以&#xff0c;我的C程大作业 具体的问题不懂的可以评论和私信&#xff0c;总之还是简单的 放张图片 程序设计报告可以私信我 #include<stdio.h> …

C语言程序设计 课程设计报告

C语言程序设计课程设计报告 一、 系统简介 学生成绩管理系统简介&#xff1a;一个简易的学生成绩管理系统&#xff0c;它包括并可以实现&#xff1a;“录入并保存学生信息、打印学生信息、读取学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、退出系统 ”…