springboot+vue音乐网站实战项目

article/2025/9/14 5:25:49

文章目录

  • 前言
  • 一.成果展示
  • 二. 后端流程
    • 2.1数据库表设计
    • 2.2. 后端搭建
      • 2.2.1 mybatis-plus逆向工程生成代码简化开发
      • 2.2.2 配置数据,跨域和静态资源放行
      • 2.3. 流水线式开发模式
  • 三.前端vue搭建
    • 3.1 前端基本环境搭建
      • 3.1.1 脚手架搭建和容易出现的错误
      • 3.1.2 axios与后端交互搭建
    • 3.2 基本书写流程
    • 3.3 前端再次强调注意的
  • 四.项目部署步骤.
  • 总结


前言

前端使用: vue/cli “^4.5.15”
后端使用: springboot2.6.2, mybatis-plus3.5.9,mybatis-plus-generator3.5.1
部署:nginx,tomcat,webpack
小结.虽然项目花里胡哨,但是难度不大.收获最多的是:
1.技术选型,任务需求.一旦确定,后期变更代价惨重.
2. 注意备份
3.数据库表单设计
4.bug解决方案
5.更深入体会的是MVVM架构开发模式,流水线式创建实体并实现业务逻辑:
domain/pojo/bean → dao/mapper → mapper.xml → service → serviceimpl → controller
6.记得优先对前端进行数据校验.

感谢b站王汉远前辈和开发中帮助我的人.由于版权原因,开源项目不公布任何歌曲
由于当时选型失误,也没有围绕api开发.这就导致歌曲都是自己一首一首上传的…因此技术选型是我踩得最大的坑.

一.成果展示

前台大概总览
在这里插入图片描述
后台大概总览
在这里插入图片描述

二. 后端流程

2.1数据库表设计

在这一个单用户项目中基本手握一本 java开发手册,遵守其中规约就可以了.(但是这怎么说呢,目前阶段感觉像鸡肋.因此我接着打算看看mysql高级)
单用户项目开发基本通用样例,但仍然应当考虑自己项目的实际需求
在这里插入图片描述

2.2. 后端搭建

2.2.1 mybatis-plus逆向工程生成代码简化开发

为了方便开发,我们应当先建立数据库.之后使用mybatis-plus的逆向工程,代码生成器! 这里不建议使用 lombok 省略 实体的构造器和get,set方法.(我曾看到过这样一句话,如果java内部到处充斥着这种像lmobok可以修改源代码的插件,那么就如同无根浮萍,没有自己的核心竞争力,java迟早被取代!)但我们不可否认,它也很方便,我一般用lombok主要是用他的@slf4j日志.

这种方式可以帮助我们自动生成
domain/pojo/bean(完全生成) → dao/mapper (生成模型和一般crud方法)→ mapper.xml (生成模型和一般crud方法)→ service (生成模型和一般crud方法)→ serviceimpl (生成模型和一般crud方法) → controller (生成模型和一般crud方法) 如果不满意它自带的crud方法,我们可以自己写,建议自己写!
该方法要注意的是mybatis-plus-generator3.5.1版本是一个转变 代码生成详见此处

2.2.2 配置数据,跨域和静态资源放行

由于基本配置是可以复用的,因此我将其粘贴下方.
采用 配置类和yaml配置文件相结合的方式
1.druid类配置文件

package com.vector.music.config;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Arrays;/*** @author WangYuanJie* @description: about jdbcDruidConfig* @ClassName MyDataSourceConfig* @date 2022/1/21 16:17*/
@Configuration
public class MyDataSourceConfig {@ConfigurationProperties(prefix = "spring.datasource")@Beanpublic DataSource dataSource() throws SQLException {DruidDataSource druidDataSource = new DruidDataSource();//加入监控功能
//        druidDataSource.setFilters("stat,wall");return druidDataSource;}/** 解决druid 日志报错:discard long time none received connection:xxx* */@PostConstructpublic void setProperties(){System.setProperty("druid.mysql.usePingMethod","false");}/*** 配置druid的监控页* @return*/@Beanpublic ServletRegistrationBean statViewServlet(){StatViewServlet statViewServlet = new StatViewServlet();ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(statViewServlet, "/druid/*");registrationBean.addInitParameter("loginUsername","admin");registrationBean.addInitParameter("loginPassword","123456");return registrationBean;}/*** WebStatFilter用于采集web-jdbc关联监控的数据*/@Beanpublic FilterRegistrationBean webStatFilter(){WebStatFilter webStatFilter = new WebStatFilter();FilterRegistrationBean<WebStatFilter> filterRegistrationBean = new FilterRegistrationBean<>(webStatFilter);filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.ico,/druid/*");return filterRegistrationBean;}
}

2.后端解决跨域问题

/*** 解决跨域问题*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOriginPatterns("*").allowCredentials(true).allowedMethods("*");}

3.解决静态资源放行问题

你可以将静态资源放在你想放置的位置,但是尽量不要放在项目工程中,因为项目工程后来只会在内存中运行.不要增加内存负荷,而且你将会出现一个奇怪的问题 springboot图片回显 详见此处

    /*** 默认情况下Spring Boot 使用WebMvcAutoConfiguration中配置的各种属性。* 默认映射的文件夹有:* classpath:/META-INF/resources* classpath:/resources* classpath:/static* classpath:/public* 上面这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources > resources > static > public* 原理: 静态映射/**。* 请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面* 静态资源访问前缀* 默认无前缀* spring:* mvc:* static-path-pattern: /res/*** 当前项目 + static-path-pattern + 静态资源名 = 静态资源文件夹下找*/// 以下是自定义静态资源访问@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {/*** spring boot中上传图片回显问题* 定位歌手头像地址* 绝对路径映射,这个不重新部署就可以回显,因为映射你的本地*/registry.addResourceHandler("static/**").addResourceLocations(System.getProperty("user.dir") + File.separator + "static" + File.separator);}

4.yaml配置文件

# 声明当前的服务端口号是8083
server:port: 8083
#spring配置
spring:
# 解决使用swagger高版本更新后路径匹配更新和mvc路径匹配模式不匹配的问题,导致druid报一个错mvc:pathmatch:matching-strategy: ANT_PATH_MATCHERdatasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/music?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=trueusername: musicpassword: 123456# 配置druid-ui的一些功能druid:filters: stat,wall,slf4jmax-active: 12stat-view-servlet:enabled: truelogin-username: adminlogin-password: 123456reset-enable: falseweb-stat-filter:enabled: trueurl-pattern: /*exclusions: '*.js,*.gif,*.jpg,*.ico,/druid/*'aop-patterns: com.vector.admin.*filter:stat:slow-sql-millis: 1000log-slow-sql: trueenabled: truewall:enabled: true# json对象解析处理jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8# 声明我们后端每次接收的大小和总大小servlet:multipart:max-file-size: 10MBmax-request-size: 20000MB# 配置 mybatis 相关内容
mybatis:#  config-location: classpath:mybatis/mybatis-config.xmlmapper-locations: classpath:mapper/*.xmlconfiguration: #指定mybatis全局配置文件中的相关配置项map-underscore-to-camel-case: true
mybatis-plus:type-aliases-package: com.vector.music.pojo

2.3. 流水线式开发模式

domain/pojo/bean → dao/mapper→ mapper.xml → service → serviceimpl → controller
值得一提的是

一般的实体类的时间属性不要使用localdatetime,你驾驭不住!虽然它线程安全,你肯定要使用HttpRequestServlet来获取前端传入的字符串方法,然后通过datetime转化,之后拼接成必须的格式:
yyyy-MM-dd HH:mm:ss 赋值给localdatetime

1.文件上传功能: 详见此处数据库一般存url,之前配置的静态资源路径存上传的实际文件.我们不用害怕uuid或时间戳使我们看不懂,可以通过其他字段确定上传的是什么.
2.注意对前端数据的校验.
controller层:注意@RequestMapping等的请求方式和前端是否一致;注意是否写了@ResponseBody. 不要再使用HttpRequestServlet 获取前端传来的对象.因为他的代码重复度太高,修改时候也很麻烦.建议使用@RequestBody注解实体类获取前端的值.(注意前端传值的名称要与实体类的属性相对应) .`

mapper.xml: 我认为尽量带这个参数
在这里插入图片描述

三.前端vue搭建

声明: 前端技术自我感觉很菜

3.1 前端基本环境搭建

3.1.1 脚手架搭建和容易出现的错误

webstorm也和idea差不多了,搭建vue-cli很方便.搭建详见此处
需要注意的是后期npm run build 打包时候如果是空白页.就要看看config/index.js
build方法中的 assetsPublicPath: ‘./’
router路由导航中是否是 history 模式.

3.1.2 axios与后端交互搭建

由于axios代码也是可复用的,因此将其粘贴如下

import axios from 'axios'
import router from '../router'axios.defaults.timeout = 5000 // 超市时间是5秒
axios.defaults.withCredentials = true // 允许跨域
// Content-Type 响应头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
// 基础url
// 对应后端yaml文件的端口号
axios.defaults.baseURL = 'http://127.0.0.1:8083'// 响应拦截器
axios.interceptors.response.use(response => {// 如果reponse里面的status是200,说明访问到接口了,否则错误if (response.status === 200) {return Promise.resolve(response)} else {return Promise.reject(response)}},error => {if (error.response.status) {switch (error.response.status) {case 401: // 未登录router.replace({path: '/',query: {redirect: router.currentRoute.fullPath}})breakcase 404: // 没找到break}return Promise.reject(error.response)}}
)/*** 封装get方法*/
export function get(url, params = {}) {return new Promise((resolve, reject) => {axios.get(url, {params: params}).then(response => {resolve(response.data)}).catch(err => {reject(err)})})
}/*** 封装post方法*/
export function post(url, data = {}) {return new Promise((resolve, reject) => {axios.post(url, data).then(response => {resolve(response.data)}).catch(err => {reject(err)})})
}

3.2 基本书写流程

基本分为axios请求,assets静态资源存放,router路由导航,vuex即store全局方法,view视图组件,componentsc具体功能组件和可复用组件
components分的比较细是为了解耦合.这些是基本的开发流程.但是一想到css我就头大.太难了,太难了啊.

3.3 前端再次强调注意的

1.注意后期npm run build 打包时候如果是空白页.就要看看config/index.js
build方法中的 assetsPublicPath: ‘./’
router路由导航中是否是 history 模式.
2.注意对可复用组件的抽离,方便日后其他项目直接使用.
3.注意vue对象中的方法不可乱起名字,都要严格遵守vue官方文档.你可以随意发挥的只有,data(),methods(),computed(),watch()里面的.应该懂我说的什么意思吧.mixins混入
4.注意webpack安装失败的话要删除node_modules文件和package-lock.json文件
要想执行webpack命令必须先下载node

四.项目部署步骤.

1.项目中的访问地址修改成服务器的地址即(127.0.0.1或localhost或0.0.0.0修改至目标服务器),注意防火墙端口放行.可以使用tomcat
2.注意后台 端口, 前台 端口,并且都访问同一个后端 端口.
3.前端npm run build 打包前台和后台 dist
4.后端利用idea maven版本控制功能生成jar
在这里插入图片描述
5.注意开发的jdk和linux的jdk版本匹配,之后把jar包随便放一个地方,在该地方执行

nohup java -jar 上传jar包全名 >temp.txt 2>&1 &

6.vue开发的前台和后台可以放在tomcat的webapps里 nginx的html里然后

#tomcat 启动 进入tomcat的bin路径下执行 
sh start.sh
#nginx 启动 进入nginx的sbin
nginx

7.假如部署静态资源无法加载,那么可能是跨平台传输工具有问题
默认端口
MySQL 3306
nginx/http 80
https 443
tomcat 8080
堡塔 8888
项目端口 自定义建议1024之后

注意tomcat和nginx以及项目访问路径的端口放行和安全策略组防火墙的放行
还有一个灵光一闪,忘了…

总结

第一次项目分离开发感觉很爽,收获最大的是熟悉了开发流程,了解了很多方便开发的技巧.但诚然很容易遗忘.但这些东西正想我们吃的饭,都不经意间转化成了我们的养分.
下阶段目标: mysql高级的学习:主要内容包括,b+树结构深入,索引优化,数据迁移,容灾备份,阻塞与死锁
之后再写一个boot项目.就开始redis学习.至于之后学习基础jvm,jmm还是cloud,那我认为是jvm,jmm了.

重申由于版权原因不会公布服务器地址,当然也怕被打....
服务端
后台
前台
有时我也会迷茫基础jvm,jmm,算法,编译原理,数据库,计网;高级mq消息队列,kafka,cloud,zookeeper,k8s…感觉都好远,都要学但时间远远不够,考不考研也无法确定,有时候真的觉得会很累…只有学习完了做出成果的喜悦,但过不了多久感觉又有多少是自己独立完成的呢?失落感又弥漫于我…
分享一首歌 但泰勒斯威夫特的歌总能使我重燃信心!



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

相关文章

基于Java的在线音乐网站的设计_基于javaweb的音乐网站的设计与实现论文.doc

基于javaweb的音乐网站的设计与实现论文.doc 本科毕业论文(设计)题目基于JSP的音乐网站的设计与实现姓名学号专业院系指导老师职称学位讲师&#xff0f;硕士完成时间2015年5月教务处制安徽新华学院本科毕业论文(设计)独创承诺书本人按照毕业论文(设计)进度计划积极开展实验(调…

ThinkMusic源码搭建音乐网站,并实现公网访问

1、前言 在我们的日常生活中&#xff0c;音乐已经成为不可或缺的要素之一&#xff0c;听几首喜欢的音乐&#xff0c;能让原本糟糕的心情变得好起来。虽然现在使用电脑或移动电子设备听歌都很方便&#xff0c;但难免受到诸多会员或VIP限制&#xff0c;难免让我们回想起音乐网站…

Python爬虫下载QQ音乐网站歌曲

Python爬虫下载QQ音乐网站歌曲 1.分析QQ音乐网站数据请求url 在QQ音乐搜索歌曲页面&#xff0c;通过浏览器调试工具&#xff0c;监测到向服务器发出的请求&#xff0c;获取到的json数据中list正好保存了对应于单页搜索结果的数据。查看请求header&#xff0c;得到url https:/…

计算机毕业设计 SSM在线音乐网站设计与实现(源码+论文)

文章目录 1 前言2 实现效果3 设计方案4 最后 1 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的java web缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的java web管理系统达不…

自媒体人必看,这些无版权背景音乐网站,免费下载

近年来&#xff0c;自媒体行业发展迅速&#xff0c;但随之而来的问题也越来越多&#xff0c;尤其是侵权问题&#xff0c;动辄几万、几十万的赔偿金额&#xff0c;稍不注意&#xff0c;可能就侵权了。 这其中包含了图片、音乐版权等各种问题&#xff0c;之前小易和你们分享过很…

新版音乐网站系统源码Sourcecode

正文: 搭建教程: 1.上传源码&#xff0c;解压到根目录&#xff0c;php版本建议最好是7.0或以上版本2绑定域名3直接点击域名打开即可 程序: wwgth.lanzout.com/iCLNb093uzdg 图片:

python实现千千音乐mp3下载

文章来源&#xff1a;https://www.bobobk.com/216.html 进入千千音乐主页面&#xff0c;选择周杰伦的音乐告白气球&#xff0c;发现竟然是2016年的音乐试听都木有&#xff0c;悲伤。那么有没有办法可以获取到mp3文件呢&#xff1f;答案是肯定的。音乐下载可运行程序可在文末获…

一个简单的音乐网站项目

最近闲来无事&#xff0c;就用IDEA编写了一个简单的音乐网站&#xff0c;此网站具有音乐的试听&#xff0c;下载&#xff0c;收藏功能&#xff0c;并且点击收藏时&#xff0c;可以根据用户收藏的音乐信息&#xff0c;进行判定&#xff0c;推荐相类似的歌曲&#xff0c;而且&…

【免费】如何轻松的从音乐网站下载自己喜欢的mp3音乐?

如何轻松的从音乐网站下载自己喜欢的mp3音乐&#xff1f; 一般人我不告诉他&#xff0c;哈哈 首先&#xff0c;拿一个不知名的音乐网站开刀——九酷音乐&#xff08;http://www.9ku.com/&#xff09;。 打开官网首页&#xff1a; 找一首自己喜欢的音乐&#xff0c;比如少年&…

从虾米音乐缓存中下载音乐

浏览器&#xff1a;谷歌 听歌网站&#xff1a;虾米音乐 搜索自己想听的歌&#xff0c;点进去&#xff0c;先不开始听 右键打开检查---->NETWORK 搜索mp3文件&#xff0c;此时没有MP3文件 开始播放音乐&#xff0c;出现一条路径&#xff0c;复制该路径&#xff0c;用浏览器…

JYmusic音乐网站管理系统源码

介绍&#xff1a; JYmusic是一款开源的跨平台音乐管理系统&#xff0c;基于php框架tninkphp开发&#xff0c;稳定、易于扩展、超强大负载能力&#xff0c;完全可以满足音乐、DJ、音乐分享、原创音乐、音乐资讯站等使用。 环境要求&#xff1a; php 版本必须 5.4 或更高 ,MySQ…

springboot+vue在线音乐网站

项目编号&#xff1a;BS-PT-049 项目说明&#xff1a; 本系统基于Springboot和Vue实现的前后端分离的一个在线音乐网站系统&#xff0c;系统功能完整&#xff0c;页面简洁大方&#xff0c;是一个非常优秀的JAVA系统&#xff0c;比较适合做毕业设计使用。 系统的主要功能如下…

python实现某网站的音乐下载

写在前面&#xff1a;首先&#xff0c;理论上讲&#xff0c;如果歌曲可以在网页上播放&#xff0c;那么一定有网址(source src)保存着歌曲的源文件。那么利用火狐&#xff08;或者谷歌&#xff09;浏览器的F12功能&#xff0c;就可以快速提取出该source src&#xff0c;进而完成…

新版音乐网站源码

介绍&#xff1a; 我们需要的东西有&#xff1a;主机、域名 1.获得一个虚拟主机 2.注册一个二级域名 3.解析二级域名并在主机绑定域名 3.主机文件管理器上传源码并解压 4.访问绑定域名即可搭建完成 网盘下载地址&#xff1a; https://zijiewangpan.com/Wqg4Bp53v4d 图片&…

免费搭建一个云音乐网站

如何免费搭建一个云音乐网站 搭建一个云音乐网站&#xff0c;有这些东西是必需的&#xff1a; 1&#xff1a;网站源码 2&#xff1a;服务器 3&#xff1a;域名 云音乐源码在这&#xff1a;https://www.lanzous.com/i5i1fwb 然后服务器我这里选择一个虚拟主机&#xff0c;有一些…

小说项目运营快速赚钱的方法技巧都在这里了!

站在时代的风口上&#xff0c;一头猪都可以飞起来&#xff0c;不同的时期有不同的红利项目&#xff0c;有些人还没了解&#xff0c;项目就已经黄了。 小说项目只会是玩法越来越升级赚钱&#xff0c;要抓住用户心理&#xff0c;才不会被淘汰。 今天就来跟大家分享一些小说项目…

我靠“读书笔记”闷声赚3万:那些你看不上的行业,往往最赚钱

全世界只有3.14 % 的人关注了 爆炸吧知识 你有没有计算过&#xff1a;你的时间&#xff0c;值多少钱&#xff1f; 如果你月薪5000&#xff0c;一个月工作20天&#xff0c;每天8小时&#xff0c;那么你1小时的价值就是32元。 然而&#xff0c;现在请一个打扫卫生的钟点工&#x…

投入不到3000,我用小说3年赚了100万,究竟是怎么做到的?

投入不到3000&#xff0c;我用小说3年赚了100万&#xff0c;究竟是怎么做到的&#xff1f; 本人17年负债25w&#xff0c;18年用了半年还清&#xff0c;如今3年小有富余&#xff0c;全靠下面这个&#xff08;当时是副业做起&#xff09;。 但我还是要实际的告诉大家&#xff0c;…

【软件分享】阅读APP:免费开源无广告、全网小说免费看(附2613个书源)

软件简介 阅读APP是github上gedoor大佬使用Kotlin开发的一款网络阅读软件&#xff0c;没错这个软件的名字就叫【阅读】。该软件免费、开源、无广告&#xff0c;支持定义书源&#xff0c;全网小说免费看。网络阅读用这一个就够了。目前仅支持安卓系统。 下载地址 官网地址&…

一个上班可以偷偷看小说的阅读器

推荐一款很棒的电脑上看小说阅读器。我用过的最好的看小说软件&#xff0c;调整透明度&#xff0c;自动隐藏&#xff0c;很强大很好用。可调整透明背景&#xff0c;上班偷看小说&#xff0c;老板不会发现&#xff0c;鼠标放上去就有&#xff0c;移开就消失&#xff0c;就是阅读…