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

news2024/12/23 18:14: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
开源代码:

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


注册界面:


音乐播放列表页(首页)

音乐播放:


收藏页面:


上传音乐页面:

接下来介绍后端设计:

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

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.coloradmin.cn/o/1617461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】:构造函数和析构函数

目录 前言一,构造函数**1.1 什么是构造函数****1.2 构造函数的特性**1.3 总结 二,析构函数**2.1 什么是析构函数****2.2 析构函数的特性****2.3 总结** 前言 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并…

Nginx 四层和七层代理

四层:通过报文中的目标地址和端口,加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器,使用tcp、udp协议。 七层:"内容交换",通过报文中真正有意义的应用层内容,加上负…

【MATLAB报错】错误使用 sym>tomupad Unable to convert ‘uss‘ to ‘sym‘.解决方法

出错代码如下: syms s; % Gnom matrix g11 13.8 / (0.16 * s 1); g12 -0.05 / (0.1 * s 1); g21 0.1 / (0.3 * s 1); g22 4.25 * s / (0.84 * s - 1); Gnom [g11 g12; g21 g22];w1 makeweight(0.2, 35, 9); w2 makeweight(0.25, 40, 8); W blkdiag(w1, …

vue+springboot实验个人信息,修改密码,忘记密码功能实现

前端部分 新增Person(个人页面),Password(修改密码页面),还需要对Manager,login页面进行修改 router文件夹下的index.js: import Vue from vue import VueRouter from vue-router i…

服务器基础知识(1)

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:服务器❤️感谢大家点赞👍收藏⭐评论✍️ 1、什么是服务器 服务器是计算机的一种,它比普通计算机运行更快、负载更高、价格更贵。服务…

顺序表(快速上手数据结构)

在介绍ArrayList之前, 我们需要先了解List. List是一个接口,它继承于Collection接口(Collection又继承于最顶层的接口Iterable). 从数据结构的角度来看,List就是一个线性表(Linear List),即n个具有相同类型元素的有限序列, 在该序列上可以执行增删查改等操作. 注意: List是一…

GaN HEMT中短沟道效应的建模

来源:Modeling of Short-Channel Effects in GaN HEMTs(TED 20年) 摘要 在本文中,我们提出了一种用于估算GaN高电子迁移率晶体管(HEMT)器件中短沟道效应(SCEs)的显式和解析的基于电…

通天星CMSV6 车载视频监控平台 信息泄露漏

本文内容为学习笔记分享,仅供技术学习参考,请勿用作违法用途,任何个人和组织利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责,与作者无关!!! 漏洞描述 通天…

【漏洞复现】锐捷 EG易网关 phpinfo.view.php 信息泄露漏洞

0x01 产品简介 锐捷EG易网关是一款综合网关产品,集成了先进的软硬件体系构架,并配备了DPI深入分析引擎、行为分析/管理引擎。这款产品能在保证网络出口高效转发的基础上,提供专业的流控功能、出色的URL过滤以及本地化的日志存储/审计服务。 …

PDF 书签制作与调整

本文是对以前发表的旧文拆分,因为原文主题太多,过长,特另起一篇分述。 第一部分 由可编辑 PDF 文档创建书签 方法 1. Adobe Acrobat Pro autobookmark AutoBookmark 是一个可用于 Adobe Acrobat 自动生成书签的插件。 官方下载地址&…

数新大数据平台迁移解决方案

随着企业的发展和数字化转型的不断深入,企业数据平台建设过去很多年,技术和架构过于落后,原有的大数据平台越来越难以满足业务需求。而在新的技术架构大数据平台的升级过程中,对数据和任务迁移的一致性、完整性有很高的要求&#…

贪吃蛇游戏C语言破解:成为编程高手的必修课!

​ 个人主页:秋风起,再归来~ 文章专栏:C语言实战项目 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安! 1、游戏效果演示 贪吃蛇游戏效果演示 2、win32 A…

广州大学《软件工程》实验报告三软件设计

广州大学学生实验报告(三) 开课学院及实验室: 学院 年级/专业/班 姓名 学号 实验课程名称 软件工程导论实验 成绩 实验项目名称 软件设计 指导老师 一、实验目的 掌握软件设计建模技术,能够撰写软件设计文…

解线性方程组——(Jacobi)雅克比迭代法 | 北太天元

一、Jacobi迭代法 n 3 n3 n3 , 阶数为 3 时 A ( a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ) , b ( b 1 b 2 b 3 ) , A\begin{pmatrix} a_{11} & a_{12} &a_{13}\\ a_{21} & a_{22} &a_{23}\\ a_{31} & a_{32} &a_{33}\\ \end{pmatrix} ,\qua…

武汉大学博士,华为上班5年多,月薪多少。。。

最近,一位来自武汉大学的博士研究生透露了自己在华为公司工作五年后的薪酬情况。 据他透露,他在2018年加入华为时的月薪为2.4万,随着时间的推移,到了2023年,他的月薪已经增长至4.4万!此外,他还透…

微信小程序webview和小程序通讯

1.背景介绍 1.1需要在小程序嵌入vr页面,同时在vr页面添加操作按钮与小程序进行通信交互 1.2 开发工具:uniapp开发小程序 1.3原型图 功能:.点击体验官带看跳转小程序的体验官带看页面 功能:点击立即咨询唤起小程序弹窗打电话 2.…

React-RTK

​🌈个人主页:前端青山 🔥系列专栏:React篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容:React-RTK 目录 1、介绍 2、安装 3、编写RTK使用示例 4、官方提供项目包示例 创建 Redux …

uniapp中vue写微信小程序的生命周期差别

根据uniapp官网里的生命周期,感觉不太对劲,就自己测试了几个,发现有所差别。 红字数字 为 实际测试生命周期顺序。 因为需要页面传参 后再 初始化数据,而onLoad(option)接收参数后,就已经过了create()了,所…

tokio多任务绑定cpu(绑核)

tokio 是 rust 生态中流行的异步运行时框架。在实际生产中我们如果希望 tokio 应用程序与特定的 cpu core 绑定该怎么处理呢? 首先我们先写一段简单的多任务程序。 use tokio; use tokio::runtime; use core_affinity;fn tokio_sample() {let rt runtime::Builde…

3.SpringCloud版本

1.SpringCloud与SpringBoot之间版本对应 2.服务拆分的注意事项 1.不同微服务,不要重复开发相同业务。 2.微服务的数据独立,每个微服务都有自己独立的数据库,不要访问其他微服务的数据库。 3.微服务可以将自己的的业务暴露为接口&#xff…