文章目录

  • 一、项目简介
  • 二、项目分析
  • 三、项目设计
    • 1、分层(总体)设计
    • 2、数据库设计
      • (1)表结构设计
      • (2)ER图
    • 3、实体类设计
      • (1)User实体类
      • (2)Music实体类
      • (3)Mv实体类
      • (4)Blog实体类
      • (5)Comment实体类
    • 4、数据库操作类的设计
      • (1)Mysql实例对象的创建
      • (2)获取数据库的连接
      • (3)关闭连接释放资源
    • 5、操作类设计
      • (1)User 操作类
      • (2)Music/MV 操作类
      • (3)LoveMusic/LoveMv 操作类
      • (4)Blog 操作类
      • (5)Comment 操作类
    • 6、服务层设计
    • 7、servlet层设计
      • (1)登录
      • (2)注销
      • (3)注册
      • (4)主页
      • (5)音乐/MV
      • (6)博客
      • (7)上传/发布
      • (8)移除/删除
    • 8、Thymeleaf配置
  • 四、项目结果
  • 五、项目源码及链接展示

一、项目简介

访问该音乐网站进入主页,分为两种状态:

  1. 未登录状态,只能查看(指定/模糊查询)音乐列表、MV列表、音乐博客。可以听音乐、看MV、查看具体的博客内容。音乐和MV实现单一播放。博客内容中包含有评论信息。
  2. 登录状态,可以实现未登录状态下的所有操作,同时可以有更多的操作:查看个人资料;查看喜欢列表(音乐、MV);查看我发布的博客;可以发布音乐、MV 以及博客;实现修改密码;实现注销功能。

二、项目分析

功能实现:

  1. 登录、注册、注销

  2. 查看个人信息、修改密码

  3. 歌曲列表、MV列表、音乐博客列表(指定/模糊查询)

  4. 将音乐、MV添加至喜欢列表

  5. 将音乐、MV从喜欢列表移除

  6. 查看个人博客(指定/模糊查询)

  7. 发布音乐、MV、博客

  8. 查看详细博客,可以对该博客评论并显示

三、项目设计

1、分层(总体)设计

2、数据库设计

(1)表结构设计





(2)ER图

3、实体类设计

  此处只是显示实体类的属性,其中各个实体包含有getter方法和setter方法,同时含有toString方法以便于方便验证操作类的正确性。

(1)User实体类

private int id;              //用户的唯一编号
private String username;    //用户名称
private String password;    //用户密码
private int age;            //用户的年龄
private String gender;      //用户的性别
private String email;       //用户的邮箱

(2)Music实体类

private int id;              //音乐的唯一编号
private String title;       //音乐名称
private String singer;      //歌手
private String url;         //音乐在磁盘中存储的路径
private Timestamp time;     //用户发布/上传音乐的时间
private int userId;         //发布/上传音乐的用户编号(用于标识歌曲的上传者)

(3)Mv实体类

private int id;              //MV的唯一编号
private String title;       //MV的名称
private String singer;      //歌手
private String url;         //MV在磁盘中存放的路径
private Timestamp time;     //用户上传MV的时间
private int userId;         //用户编号(用户标识MV的上传者)

(4)Blog实体类

private int id;              //博客的唯一编号
private String title;       //博客标题
private String digest;      //博客的摘要
private String content;     //博客内容
private String author;      //博客的作者,与用户名称绑定
private Timestamp postTime; //用户发布博客的时间
private String category;    //博客的类别

(5)Comment实体类

private int id;                  //评论的唯一编号
private String commentUser;     //评论者,与用户名称绑定
private Timestamp commentTime;  //评论时间
private String content;         //评论的内容
private int blogId;             //被评论的博客编号

4、数据库操作类的设计

(1)Mysql实例对象的创建

  使用基本的连接数据库的方式(JDBC),利用DataSource(数据源)技术创建Mysql实例对象,使用单例模式提供唯一的Mysql实例对象。

public static DataSource dataSource = null;public static DataSource getDataSource(){if(dataSource == null){MysqlDataSource mysqlDataSource = new MysqlDataSource();  //创建Mysql实例对象mysqlDataSource.setUrl(URL);           //设置URLmysqlDataSource.setUser(USERNAME);       //设置数据库的用户名mysqlDataSource.setPassword(PASSWORD);   //设置数据库的密码dataSource = mysqlDataSource;            //将创建好的Mysql实例对象赋给DataSource实例}return dataSource;
}

(2)获取数据库的连接

public static Connection getConnection() {try {return getDataSource().getConnection();} catch (SQLException e) {e.printStackTrace();}return null;
}

(3)关闭连接释放资源

  操作类在操作数据库结束之后需要关闭连接,释放资源。需要的资源涉及到Connection对象、PreparedStatement对象、ResultSet对象,因此使用完毕之后需要释放资源。

public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet){if(resultSet != null){try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if(statement != null){try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if(connection != null){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}
}

5、操作类设计

(1)User 操作类

  a. 验证登录,根据用户输入得到的用户名和密码查询数据库,验证该用户是否存在与数据库中。

  b. 向数据库中添加用户,用户注册时输入基本信息,根据user表的字段,向数据库中插入该用户的信息。

  c. 查询用户的信息,当用户查看个人资料的时候,根据用户的编号查询用户的基本信息并返回。

  d. 修改密码,根据用户提供的新密码以及用户编号修改用户在数据库中的登录密码。

(2)Music/MV 操作类

  a. 根据 music/mv 表的字段信息,向数据库中添加音乐的信息。

  b. 查询音乐/MV,当用户没有输入关键字查询的时候,显示所有的音乐/MV信息,当用户输入关键字的时候,根据关键字模糊匹配查询音乐/MV的信息。

  c. 删除音乐/MV的信息,根据音乐/MV编号操作数据库进行音乐/MV的删除操作。

  d. 根据音乐/MV编号查看 lovemusic/lovemv 表中是否含有该音乐/MV的信息,用于当上传音乐/MV的人删除音乐/MV时,查询其他的人是否喜欢该音乐/MV,如果为真,则同时删除所有与该音乐/MV有关的信息(例如用户A喜欢“告白气球”这首歌曲,但是上传者B删除了该音乐的信息,则在A的喜欢列表中也不允许存在该音乐的信息。MV与音乐相同)。

  e. 当服务器上的音乐/MV(即磁盘中的音乐/MV数据)删除时,则在服务器上也不应该存在该音乐/MV的信息。

(3)LoveMusic/LoveMv 操作类

  a. 用户登录之后,可以添加音乐/MV至“喜欢列表”中,根据用户编号和音乐/MV编号,将用户和音乐/MV绑定。

  b. 用户查询自己的”喜欢列表“,如果输入关键字,则按照关键字模糊查询,如果没有输入关键字则将所有喜欢的音乐/MV显示。

  c. 添加音乐/MV的时候,判断该音乐/MV是否已经添加过,如果已经在“喜欢列表”中,则不能重复添加。根据用户编号和音乐/MV编号查询得到结果。

  d. 用户将音乐/MV从“喜欢列表”中移除,根据音乐编号和用户编号,防止用户A将用户B的“喜欢列表”中的数据移除。

(4)Blog 操作类

  a. 用户登录之后可以编辑发布博客,得到用户编辑的博客内容、标题、摘要、类别之后向数据库中添加该博客的信息,其他字段可以实现代码自动获取(例如getter方法获取作者等)。

  b. 显示博客,如果用户没有输入关键字,则查询/显示所有的博客简介,如果用户输入关键字,则根据关键字查询博客的简介。

  c. 根据用户编号,查询博客简介,当用户点击“我的博客”按钮后,显示该用户所发布的所有博客简介,如果用户输入关键字,则按照关键字查询所发布的博客简介。

  d. 根据博客编号查询单篇博客,如果用户点击博客简介,则将查询到的完整博客信息返回给用户。

  e. 根据博客编号删除数据库中存储的博客信息,如果存在评论,则实现将该篇博客的评论一并删除。

(5)Comment 操作类

  a. 添加评论,用户查看单篇博客之后可以发表自己的观点,对博客进行评论。

  b. 显示所有的评论信息,当用户查看单篇博客的具体内容时,将所有的评论显示至该篇博客的下方。

  c. 删除评论,当用户思考之后觉得该评论有不符合的地方需要进行删除时,则根据评论编号将该评论的信息从数据库中删除。

  d. 根据博客编号查看所有与该篇博客有关的评论,用于删除博客的时候先将与该篇博客有关的评论先删除。

6、服务层设计

  分层的设计是为了将代码的耦合度降低,而服务层的设计是为了将代码的耦合度降的更低,本项目只实现了验证登录的操作,即判断用户操作的时候是否处于登录状态。

7、servlet层设计

(1)登录

  用户首先需要进行登录,后台获取到用户提交的用户名和密码之后,调用User操作类,验证该用户的用户名和密码是否正确,如果正确跳转至主页,如果不正确返回404,并提示用户用户名或密码错误。

(2)注销

  用户如果需要退出登录状态,则将服务器端保存的 session 信息删除掉。

(3)注册

  用户需要根据提示输入信息,后台获取到用户输入的信息之后创建User实例对象,并且根据该对象将信息保存在数据库中。

(4)主页

  当访问该音乐网站的主页,如果没有登录可以查看音乐/MV/博客的信息。通过 Thymeleaf 渲染将用户的状态返回至主页,如果是登录状态可以看到更多的操作按钮。

(5)音乐/MV

  a. 显示音乐/MV

  该功能不需要登录,用户点击音乐/MV时,即发送GET请求,后台得到该请求后返回一个经过 Thymeleaf 渲染过的页面返回至用户,即显示所有的音乐/MV。同时实现了模糊匹配查询,即用户在搜索框中输入关键字或者具体名称即可得到想要的音乐/MV。

  b. 喜欢列表

  当用户处于登录状态的时候可以添加音乐/MV至”喜欢列表“,当后台得到该请求后,会根据URL得到音乐/MV的编号,调用 LoveMusic/LoveMv 操作类中 insert 方法将该音乐/MV的信息添加至数据库中,并且将用户编号与之绑定用户标识是该用户的”喜欢列表“。

(6)博客

  a. 博客简介

  该功能不需要登录,当用户需要查看博客的时候首先得到是一个经过 Thymeleaf 渲染过的页面,显示所有博客简介,如果用户需要查询某一篇博客的时候可以在查询框输入关键字或者指定名称即可得到想要查询的博客。

  b. 显示单篇博客内容,并显示该篇博客的所有评论

  当用户觉得某一篇博客的摘要比较有吸引力的时候可以点击标题查看具体的博客内容,该页面不仅显示了博客的内容,同时还有作者、发布时间等信息。同时博客的最下面存在评论框,用户可以随意的发表自己的意见,在评论框的下方可以看到其他的用户的一些见解(评论)。

(7)上传/发布

  a. 上传音乐/MV

  当用户登录之后可以上传音乐/MV,后台得到用户上传的文件之后将文件写入到指定的存储路径下,并且将音乐/MV的信息(根据数据库的表中的字段)添加至数据库,添加成功之后重定向至音乐/MV页面,用户可以看到第一条信息即为最新发布。

  b. 编辑发布博客

  当用户处于登录状态,可以发布一篇关于音乐的博客信息,Java后台得到用户提交的数据后,将博客的信息存储至数据库中。

(8)移除/删除

  a. 将音乐/MV从“喜欢列表”移除

  用户登录之后查看喜欢列表,如果用户此时对于该音乐/MV不在喜欢,则点击移除按钮之后,后台得到用户需要移除的音乐/MV编号,调用 LoveMusic/LoveMv 操作类中的 delete 方法将该音乐/MV的信息从喜欢列表中移除。

  b. 删除音乐/MV

  当用户处于登录状态时,用户如果需要删除音乐/MV,首先判断该音乐/MV的发布者是否与数据库中的信息匹配,防止用户删除别人的音乐;其次如果他用户添加了该音乐/MV至“喜欢列表”,则先移除其他用户关于该音乐/MV的信息,再次将音乐表中关于该音乐/MV的信息删除,最后将磁盘路径中的音乐/MV文件删除。

  c. 删除评论

  当用户处于登录状态,且看到自己的评论并不是很正确想要删除的时候,点击删除评论按钮之后,后台的到该评论的便后,根据编号删除数据库中的信息。但是会判断是否删除的是自己的评论,防止删除其他人的评论信息。

  d. 删除博客

  用户处于登录状态下,如果需要删除音乐博客,判断用户是否登录、该博客是否为登录者所发布、该博客是否存在评论,当所有的条件符合之后进行删除的操作。

8、Thymeleaf配置

  当时用Thymeleaf进行前端页面的渲染时,由于每次都需要对引擎和解析器配置,因此设计Thymeleaf配置类,目的是为了将代码的复用率提高。

(1)创建TemplateEngine引擎对象实例,负责将java中的数据替换到模板中

(2)创建ServletContextTemplateReslover对象,负责找到 HTML 模板的位置,并且将之加载到内存中,因为只有加载到了内存中,引擎才可以使用该模板

(3)给resolver设置属性,目的是为了让解析器可以找到木板的位置。即设置解析器的编码方式、模板的前缀路径和模板的后缀格式

(4)将解析器和引擎关联,并把初始化后的引擎对象实例交给 ServletContext 保管

四、项目结果

此处知识显示了主页的结果显示,具体操作自行实现

(1)未登录状态

(2)登录状态

五、项目源码及链接展示

Gitee:音乐播放器: 通过使用 HTTP Servlet 创建项目 (gitee.com)
项目展示:音乐网站链接

由于作者水平有限,欢迎大佬们指正错误或提供一些宝贵的意见

音乐网站设计(从设计到结束)相关推荐

  1. 音乐网站平台项目数据库设计

    一 数据库设计步骤 1 需求分析 收集数据: 为了使用数据库系统管理这些数据,需要尽可能多次地收集数据并理解企业地业务过程和数据处理流程,理解数据处理地性能需求.(主要需要根据具体地业务和功能分析出要 ...

  2. web前端期末大作业:基于HTML+CSS+JavaScript制作我的音乐网站(带设计报告)

  3. ssm基于Html+css的音乐网站的设计与实现毕业设计源码181627

    ssm音乐网站 摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势.互联网的优势和普及使得各种系统的开发成为必需. 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采SSM技 ...

  4. 基于springboot的音乐网站的设计与实现(带论文)

    项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等.这里根据疫情当下,你 ...

  5. (附源码)ssm基于Html+css的音乐网站的设计与实现 毕业设计181627

    ssm音乐网站 摘要 随着社会的发展,社会的方方面面都在利用信息化时代的优势.互联网的优势和普及使得各种系统的开发成为必需. 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采SSM技术 ...

  6. HTML5音乐网页毕业设计内容介绍,音乐网站的设计与实现—毕业设计.doc

    音乐网站的设计与实现-毕业设计 毕业设计(论文) 音乐网站的设计与实现 论文作者姓名:申请学位专业:申请学位类别:指导教师姓名(职称):论文提交日期: 音乐网站的设计与实现 摘 要 随着社会的发展时代 ...

  7. 网易音乐网站系统|前后端分离springboot+vue实现在线音乐网站

    作者主页:编程千纸鹤 作者简介:Java.前端.Python开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发.毕业设计开发.面试技术整理.最新技术分享 收藏点赞不迷路  关注作者有好处 ...

  8. 基于springboot+vue(thymeleaf)+mysql下的自创音乐网站平台--CrushMusic(开发日志七)

    中间隔了有一段时间,因为去学了一些其他东西,加上还有课程,今天专门用了大半天来写前台界面与登录注册的UI设计,网上的模板我都不太想用,我就用框架来自己搭建前台,我参考了三大音乐网站的首页设计,基本都是 ...

  9. [附源码]Java计算机毕业设计SSM花田音乐网站

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

最新文章

  1. Js时间格式[转载]
  2. 合成(composite)模式
  3. linux 启动流程图
  4. ASP.NET Core MVC – Caching Tag Helpers
  5. java路径怎么找_Java路径怎么找
  6. 微服务架构案例(03):数据库选型简介,业务数据规划设计
  7. type python django models_Django 模型
  8. php html小项目,使用PHP把HTML生成PDF文件的几个开源项目介绍
  9. 安装指定的vue-router版本
  10. {面试题4: 替换空格}
  11. process 类 java_Process 执行命令行Java封装类详解
  12. 解决磁盘IO紧张的一种方法
  13. linux中删除svn中文件,删除SVN三种方法delSvn(windows+linux)
  14. Flash CS4运行时提示:Java运行时环境初始化时出现错误。您可能需要重新安装 Flash。解决方案
  15. 浅析帧、帧数、帧率、FPS区别
  16. PowerShell中使用WMI或CIM
  17. 关于雨林木风版的linux操作系统ymlf_os_3.0
  18. win10设置计算机关机时间,win10怎样固定时间关机_win10怎样设置电脑关机时间设置...
  19. JavaScript数字运算必备库——big.js源码解析
  20. SpringBoot2.0Web开发实例(一)WebJars静态资源

热门文章

  1. 中国科学院843遥感概论-目录
  2. python与统计分析课后答案_高校邦Python科学计算课后习题答案
  3. LintCode领扣算法问题答案:190. 下一个排列
  4. java高并发如何保证数据安全
  5. Python 3(15)多线程
  6. BootStrap4内容系列之图像排版
  7. html5视频播放器字幕,HTML5 带字幕播放器(类youtube字幕)
  8. 电磁鼓采样器含拓展 – Native Instruments Battery 4.1.6 WiN-MAC
  9. ROS控制elfin5机械臂教程
  10. 初用DB2 UDB V8.2(Stinger)制作CLR存储过程