个人音乐播放网站项目(SpringBoot+Linux部署上线)

news/2024/5/19 21:30:23

在做完第一个博客系统项目以后,接着做下一个项目:音乐播放网站项目,此项目应用的技术栈和第一个项目是差不多的,即算是学完SSM等知识以后的两个入门级Java开发项目吧。

此项目包含的核心功能有:

一、登录、注册、退出功能。
二、添加音乐、查看音乐列表。
三、收藏音乐、查看收藏的音乐。
四、删除音乐、批量删除音乐。
五、在为了保证用户账户安全情况下,进行用户密码登陆后MD5加盐处理。
六、以及统一数据的返回、统一异常处理、拦截器拦截接口、网页、文件包。

此项目由个人独立开发,包括前端、后端、数据库表的设计以及各种功能的设计。
 运用技术栈:
 前端:HTML、CSS、JavaScript、JQuery、Ajax
 后端:Java、SpringBoot、MyBatis
 数据库:MySQL
 部署服务器:Linux
 部署服务器所用工具:Xshell、Xftp  后端接口设计测试工具:Postman
访问网站:http://110.41.154.247:8888/login.html
开源代码:
musicserver: MusicPlay

下面是完成界面展示
登录界面:


注册界面:


音乐播放列表页(首页)

音乐播放:


收藏页面:


上传音乐页面:

接下来介绍后端设计:

在设计后端架构上,主要分了这几层:

tools层:主要为了放一些拦截器类、统一数据返回类、统一异常处理、Session常量设置、密码MD5加盐处理。
model层:主要放用户类:userinfo、文章类:articleinfo
controller层:主要放相关前端访问的接口方法,包括UserController、MusicController、LoveMusicControllr
mapper层:主要放用来连接MySQL的一些方法,与Mapper.xml与之对应
 


逐个介绍每个层的业务代码:
tools层:

1、拦截器设置:

先自定义需要拦截的接口以及文件类(需要加上注解Configuration):

随后将自定义拦截器类加入统一拦截器类,需要设置若拦截成功,则设置http状态码为401并返回:

2. 统一数据返回,自定义Result类,将失败、成功的结果进行封装统一返回:


随后加入统一数据返回类进行返回:


3.设置密码MD5 以及加盐处理,里面设置两个方法,第一个方法是将密码进行UUID加盐、然后调用DigestUtils类进行MD5加密且去除“ - ”字符后再拼接盐值得到一个64位字符串 ,随后设置decrypt进行密码校验,从数据库拿到finalpassword密码,与用户登陆时输入的密码进行比对,具体算法为:将finalpassword取前32位(MD5处理会生成32位字符串,UUID加盐也会生成32位字符串),然后结合用户传入的password进行拼接然后进行MD5处理,比对处理结果和finalword是否一致,如果一致则密码正确,否则密码错误!

model层:

这层主要是和数据库对接的用户数据表,一张是user表、一张是music表,而收藏音乐的表不需要写,因为返回的变量不会是收藏音乐的整个表,因此不需要。

user:


music:


controller层:

该层有三个类:分别是UserController、MusicController、LoveMusicController
UserController主要处理用户注册、登录、退出的功能:

登录功能:


注册功能:


退出功能:


MusicController主要是

插入音乐、播放音乐、查找音乐、删除音乐、批量删除音乐功能(代码太长,实现逻辑都是一样的并不难,相关代码可访问上面开源代码网站)(播放音乐运用到了一个开源播放器网站,通过将将访问后端服务器/music/get接口的url地址保存到数据库,后续返回这个url给前端传入开源网站即让此网站访问我的音乐播放网站的服务器接口然后就可以播放了)
LoveMusicController主要是:

收藏音乐、查找音乐、删除收藏音乐功能(代码太长,实现逻辑都是一样的并不难,相关代码可访问上面开源代码网站)。

前端与后端交互过程(核心):

前端主要的作用是将页面渲染出来,得到一个个提供给用户看的界面,主要使用JavaScript来进行操作,利用JQuery的Ajax进行post/get 的http请求 发送给后端,后端通过controller层的接口接受前端传入的相关数据,然后处理请求,再将数据传送给Service层,然后给mapper层,通过Mybatis与数据库进行连接,通过Sql语句将数据传送给数据库,最后数据库可以将结果以相同的方式从数据库到mapper再到service再到controller 再通过统一数据返回传送给前端页面,前端页面通过success / error 的function进行接收最后进行渲染到前端。
下图就是一个前端JS里面的ajax请求的例子,前端通过发送post的http请求,通过url路径为“/user/login” 给后端接口 传输数据为data,随后后端处理完以后通过success进行结果的接收,返回给前端的result结果,最后渲染。

部署上线:
这里需要修改项目几个东西:

1、需要修改连接数据库的jdbc语句,将127.0.01改成服务器的ip地址
2、需要将连接数据库的用户名和密码改成服务器上的,也就是云端服务器linux里面数据库的用户名和密码
3、需要将音乐播放文件(.MP3文件)保存路径修改成服务器里面的目录,将用户上传的音乐文件保存在服务器 例如 :  D:xxx/xx改成 linux里面的目录:/root/xxx 

部署需要用到云服务器,这里作者在华为云租了一个云端服务器,然后通过开放8888、3306端口,然后通过Xshell 、XFTP 进行部署,这里将maven打包好的jar后缀java文件通过xftp拖拽到远程云端服务器的目录下。
在这之前,需要在linux服务器里面先下载相关环境:JDK1.8、MariaDB,随后将sql文件通过Xftp传到linux目录下,通过source / root / xxx.sql进行执行,得到两个数据表,随后通过nohup java -jar xxx.jar &将项目部署在后台执行,遂可以通过网址访问制作好的项目


http://www.mrgr.cn/p/73207365

相关文章

李彦宏:程序员将不复存在! 周鸿祎回怼!网友:先把百度程序员都开除了!

近日,百度创始人、董事长兼首席执行官李彦宏在央视《对话》•开年说的访谈中指出:“基本上说以后其实不会存在“程序员”这种职业了,因为只要会说话,人人都会具备程序员的能力”。 “未来的编程语言只会剩下两种,一种…

Unsortbin attack原理及分析

Unsortbin attack原理 ✔️条件:首先要实现Unsortbin attack前提是可以控制Unsortbin attack chunk的bk指针 ✔️目的:我们可以实现修改任意地址为一个比较大的值 ✔️原理:1.Unsortbin的来源 1.当一个较大的 chunk 被分割成两半后,如果剩下的部分大于MINSIZE,就会被放到 …

flutter release 报错 Error: SocketException: Failed host lookup:

flutter 的 debug 模式没有任何问题 ,打了release 包后一直报下面的错,查了一下是 因为没有网络权限 Error: SocketException: Failed host lookup: yomi-test-aws-sg.yomigame.games (OS Error: No address associated with hostname, errno 7) 按照下…

新手Pytorch入门笔记-transforms.Compose()

我使用的图片是上图,直接下载即可 transforms.Compose 是PyTorch中的一个实用工具,用于创建一个包含多个数据变换操作的变换对象。这些变换操作通常用于数据预处理,例如图像数据的缩放、裁剪、旋转等。使用transforms.Compose 可以将多个数据…

ClickHouse 高可用之副本

文章目录 ClickHouse 副本支持副本的引擎配置高可用副本副本应用1.副本表概述2.创建副本表3.写入模拟数据4.副本验证 扩展 —— 在 Zookeeper 中查看副本表信息 ClickHouse 副本 ClickHouse 通过副本机制,可以将数据拷贝存储在不同的节点上。这样,如果一…

运行django

确保app被注册 urls.py中编写url 视图对应关系 命令行启动 python manage.py runserver

iOS - 多线程-GCD-队列组

文章目录 iOS - 多线程-GCD-队列组1. 队列组1.1 基本使用步骤 iOS - 多线程-GCD-队列组 开发过程中,有时候想实现这样的效果 多个任务并发执行所有任务执行完成后,进行下一步处理(比如回到主线程刷新UI) 1. 队列组 可以使用GC…

npm run dev, serve和build的区别

真实命令分别为npm run vite,npm run vite build,npm run vite preview ctrl+c结束运行的npm项目

算法06链表

算法06链表 一、链表概述1.1概述1.2链表的组成部分:1.3链表的优缺点: 二、链表典例力扣707.设计链表难点分析:(1)MyLinkedList成员变量的确定:(2)初始化自定义链表:&…

OpenHarmony语言基础类库【@ohos.util.LinkedList (线性容器LinkedList)】

LinkedList底层通过双向链表实现,双向链表的每个节点都包含对前一个元素和后一个元素的引用。当需要查询元素时,可以从头遍历,也可以从尾部遍历,插入、删除效率高,查询效率低。LinkedList允许元素为null。 LinkedList…

谷歌 hackbar 不能使用的问题

谷歌 hackbar 不能使用的问题 下载 hackbar 插件:https://github.com/Mr-xn/hackbar2.1.3 解压文件,将其拖入 chrome 扩展程序中点击详情,点击下面来源的链接 会跳转到插件的安装位置,进入theme/js文件,打开hackbar-panel.js文件,将以下三处disable_hackbar()函数替换成i…

数据结构_链表_双向循环链表的初始化、插入、删除、修改、查询打印(基于C语言实现)

通过C语言实现双向循环链表的相关功能, 并通过了Linux平台测试, 注释完整.版本:2024年4月26日 V1.0 发布于博客园/*** @file name : DoubleLinkedList.c* @brief : 实现双向循环链表的相关功能* @author :RISE_AND_GRIND@163.com* @date :2024/04/26* @version :…

【后端】python与django的开发环境搭建指南

安装Git 双击Git 客户端安装文件,在安装页面,单击“Next” 在安装路径选择页面,保持默认,单击“Next” 在功能组件选择页面,保持默认,单击“Next” 在开始菜单文件夹设置页面,保持默认&am…

什么是用户体验(UX)文案,为什么它很重要?

网上购物如今比以往任何时候都更加相关。所以我们将以此为例说明什么是用户体验(UX)文案,以及为什么它很重要。 假设你去了一个在线商店。你需要执行一系列操作: 找到合适的部分选择你感兴趣的产品弄清楚它们是什么,…

forward 函数在深度神经网络程序中确实用于表示程序逻辑,特别是网络的前向传播过程。它描述了输入数据如何通过网络的每一层,并最终得到输出预测值的流程

在深度神经网络(例如卷积神经网络,CNN)的程序中,forward 函数通常用于描述网络的前向传播(forward pass)过程。前向传播是神经网络的核心操作之一,它指的是输入数据通过网络的每一层&#xff0c…

【论文解读】QUEST: Query Stream for Practical Cooperative Perception

QUEST 摘要引言QUERY COOPERATION PARADIGMQUEST FRAMEWORKA. Overall ArchitectureB. Cross-agent Query Interaction 实验结论 摘要 合作感知通过提供额外的视点和扩展感知领域,可以有效地提高个体感知性能。现有的合作模式要么是可解释的(结果合作),…

猿人学内部练习平台第11题

第11题:人均会解jsl 控制台抓包可以看到,页面请求了两次 https://www.python-spider.com/challenge/11 第一次返回了一段js代码,第二次返回了所需数据:对比两次请求参数发现,只有cookie中的__jsl_clearance发生了变化,其他参数均相同,因此该值应该是第一次返回的js生成…

自动化机器学习流水线:基于Spring Boot与AI机器学习技术的融合探索

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

Azure AKS集群监控告警表达式配置

背景需求 Azure AKS集群中,需要对部署的服务进行监控和告警,需要创建并启用预警规则,而这里怎么去监控每个pod级别的CPU和内存,需要自己写搜索查询 解决方法 搜索和查询的语句如下,需要自己替换其中的部分信息,其中…

SpringCloud系列(5)--SpringCloud微服务工程公共部分提取

前言:在上一章节中我们创建了两个个SpringCloud工程,但在两个工程中分别存在着一些重复的部分,例如重复的实体类(如图所示),这样会造成系统的冗余,所以我们需要把公共的类提取到一个工程里&…