基于 SpringBoot 的电影后台管理系统
1 系统需求分析
1.1 产品非功能需求
1.1.1 用户需求
系统的设计建立在用户的需求之上,通过对用户需求的分析,可以更好的实现系统,明确系统的设计方向。
随着社会的不断发展,越来越多的年轻人选择通过观看电影来娱乐。同时,网络上的各种电影网站也越来越多。年轻人也已经习惯通过网络来访问和查看最新的电影。正是在这种情况下,我们推出了电影后台管理系统。本着用户至上的原则,我们对用户需求进行了分析调研。根据用户的反馈,电影后台管理系统将开发以下几个模块:新闻管理模块、电影管理模块、分类信息管理模块、标签信息管理模块。同时为了确保安全性,不允许随便进行注册。
1.1.2 易用性需求
本产品为 Web 项目,使用最新的 SpringBoot 框架进行开发。同时在前端使用 layui 后台模板框架,为用户设计了简单易用的操作界面。同时为了避免用户误操作,对输入框添加了误操作提示。在前后台进行了数据校验。同时为用户提供了多条件搜索功能,方面用户进行查找和搜索。
1.1.3 性能需求
本产品在保持界面的美观的同时为优化性能设计了具体的算法,尽量为用户提供及时的响应。同时尽量对 MySQL 语句进行了调优,希望能够为用户提供良好的访问体验。
1.1.4 可维护性和扩展性需求
本产品使用 Java 作为主要的开发语言,使用了 SpringBoot2+Springmvc5+mybatis3 框架。使用 MVC 的设计模式,为产品的拓展性提供了保障。同时 SpringBoot 框架也有利于解耦,通过控制反转和依赖注入的基本思想,可以更容易的对程序进行修改和拓展。
1.1.5 安全性需求
本产品在设计时采用正则表达式对用户输入进行过滤,同时使用了较为可靠的 SQL 连接、查询方式。为了避免用户破坏数据库,对数据库的连接信息写入到了 XML 配置文件当中。同时对数据库的增删改操作添加了事务控制,确保操作的安全性。
1.2 产品功能需求
1.2.1 登录功能
登录页面提供以下功能:
(1)对用户的输入进行校验,例如用户名的长度以及密码的长度需要符合规范。
(2)对用户的账号密码进行校验,如果账号或者密码错误会进行相应的提示。
(3)如果密码正确跳转到首页。
(4)记住密码功能,用户可以选择记住密码,这样下次访问就无需填写密码。
(5)验证码功能,用户需要输入验证码才能进行登录操作。
1.2.2 退出功能
当用户登录以后可以进入首页,如果用户已经完成工作,可以选择退出当前登录的用户。服务器端会清除 session 数据。
1.2.3 新闻管理
新闻管理可以对新闻信息进行管理,具有以下功能:
(1)浏览所有新闻信息。
(2)进行多条件组合查询,并根据查询条件对查询结果进行展示。
(3)可以对浏览或者查询结果进行分页展示,可以减轻服务器的压力。
(4)可以根据用户的 id 删除相应的新闻信息。
(5)可以根据 id 对新闻进行编辑,允许对新闻的内容、标签、分类等信息进行编辑,但是不允许更改 id。
(6)可以新增一条新闻信息(包括作者、标题、内容、分类、标签等),新闻编辑使用富文本编辑器实现。
(7)可以预览新闻的内容。
1.2.4 修改密码功能
当前用户登录之后可以修改密码,修改密码对格式有限制,同时不允许新密码和旧密码相同。
1.2.5 电影管理
电影管理主要是对电影信息的管理,主要用来浏览和查找以及新增电影信息,功能包括:
(1)展示所有电影的信息并通过分页进行展示。
(2)可以对电影信息进行多条件组合查询,可以根据电影名称进行相应的查询。
(3)可以删除某部电影的信息。
(4)可以批量删除多部电影的信息。
(5)可以对电影的信息进行编辑。
(6)可以新增电影信息。
(7)可以上传与电影相关的图片。
(8)可以上传电影。
(9)可以预览电影。
1.2.6 分类和标签信息管理
分类信息管理和标签信息管理可以对分类或标签信息进行管理,主要提供增删改查的基本操作,有以下几个功能:
(1)展示所有分类或标签的基本信息。
(2)可以根据分类名称对分类信息进行查询,同时支持模糊查询。
(3)可以根据 id 对分类或标签进行删除,同时会删除关联的所有新闻或电影信息。
(4)可以对分类或标签的信息进行修改,但是不允许操作 id。
(5)可以向数据库中插入一条分类或标签信息,但是需要符合规则,否则会提示相应的错误信息。
1.2.7 md5 密码加密功能
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
MD5 加密算法是一种不可逆的加密算法,目前还没有有效的方式对其进行破解。唯一的破解方式就是暴力破解。
随着信息安全问题越来越严峻,公司数据库信息加密变得尤为重要。在本项目中,使用 md5 加密算法对密码进行了加密处理,可以确保用户信息的安全。
2 系统设计
2.1 可行性分析
2.1.1 调查分析
系统的初步调查是系统设计的规划阶段的第一项活动,也是整个系统开发的第一项活动,主要目标就是了解组织机构、工作现状。
通过对整个管理系统业务的了解,主要业务逻辑是用户对新闻、电影、分类或标签信息的各种操作,用户的操作可能通过 get 方式或者 post 方式发送给服务器端,服务器端对用户的请求进行处理,最后通过 JSON 数据的方式返回给前端使用。用户的操作主要有以下几个点:
(1)登录。
(2)记住密码。
(3)退出。
(4)修改密码。
(5)浏览全部新闻信息。
(6)根据不同的条件对新闻信息进行查询。
(7)浏览全部新闻信息。
(8)根据不同的条件对新闻信息进行查找。
(9)编辑并更新新闻的信息。
(10)删除新闻信息。
(11)为新闻添加一个分类或标签。
(12)浏览新闻的分类信息。
(13)新增一条新闻。
(14)浏览所有电影的信息。
(15)根据电影的名字进行模糊查询。
(16)删除某一条电影的信息。
(17)编辑并更新某一条电影的记录。
(18)新增一条电影的信息。
总之,必须对现行系统进行详尽调查,明确用户需求,保证开发的新系统的功能与用户的要求相吻合,避免耗费大量的人力、物力、财力。
2.1.2 必要性分析
随着现代社会,科技快速发展,娱乐方式呈多元化趋势。越来越多的人开始通过观看电影来度过闲暇时间。看电影也成了人们平时不可或缺的娱乐活动。但随之而来的,是优质电影平台的选择问题。电影平台如何为用户提供优质电影以及电影资讯成了急需解决的问题。因此,设计一款电影后台管理系统是很有必要的。电影后台管理系统为电影管理者提供了一个管理电影的平台,电影管理者可以通过电影后台管理系统平台对电影的各种信息进行管理,同时可以上传电影以及电影海报。
2.2 数据库设计
本系统数据库主要设计了六张表,分别是:blog 表、blog_tags 表、movie 表、type 表、user 表、tag 表。
blog 表用来存储新闻的基本信息,新闻相关的各种信息都存在这张表上。blog 表的具体设计如表 2-1 所示。
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
id | varchar | 255 | 是 | 是 | 主键 | |
title | varchar | 255 | 是 | 标题 | ||
header_image_url | varchar | 255 | 是 | 头图 | ||
create_date | timestamp | 创建时间 | ||||
type_id | varchar | 255 | 分类 id | |||
content | longtext | 是 | 新闻内容 | |||
author | varchar | 15 | 作者 | |||
from_link | varchar | 255 | 来源地址 |
表 2-1 blog 表设计
blog_tags 表用来关联新闻和标签之间的关系,blog_tags 表的具体设计如表 2-2 所示。
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
id | varchar | 255 | 是 | 是 | 主键 | |
tag_id | varchar | 255 | 标签表 id | |||
blog_id | varchar | 255 | 新闻表 id |
表 2-2 blog_tags 表设计
movie 表用来存储电影的基本信息,电影相关的各种信息都存在这张表上。movie 表的具体设计如表 2-3 所示。
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
id | varchar | 255 | 是 | 是 | 主键 | |
title | varchar | 255 | 标题 | |||
header_image_url | varchar | 255 | 首图 | |||
create_date | timestamp | 创建时间 | ||||
description | varchar | 255 | 描述 | |||
author | varchar | 255 | 导演 | |||
movie_link | varchar | 255 | 电影链接 |
表 2-3 movie 表设计
type 表用来存放电影或者新闻的分类信息。type 表的具体设计如表 2-4 所示。
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
id | varchar | 255 | 是 | 是 | 主键 | |
type_name | vrchar | 50 | 是 | 分类名称 |
表 2-4 type 表设计
tag 表用来存放电影或者新闻的标签信息,标签的各种信息都存在这张表上。tag 表的具体设计如表 2-5 所示。
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
id | varchar | 255 | 是 | 是 | 主键 | |
tag_name | varchar | 50 | 是 | 标签名称 |
表 2-5 tag 表设计
user 表用来存储管理员的基本信息。用户的各种信息都存在这张表上。user 表的具体设计如表 2-6 所示。
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
id | varchar | 255 | 是 | 是 | 主键 | |
nickname | varchar | 20 | 是 | 昵称 | ||
username | varchar | 15 | 是 | 账号 | ||
varchar | 30 | 是 | 邮箱 | |||
avatar_url | varchar | 255 | 是 | 头像 | ||
create_date | timestamp | 是 | 创建时间 | |||
password | varchar | 255 | 是 | 密码 |
表 2-6 user 表设计
同时,为了确保数据的安全以及数据的完整,在设计数据库表时使用了外键来确保表的完整性约束。数据库的架构设计如图 2-1 所示。
图 2-1 数据库架构设计
2.3 项目结构设计
为了产品的可维护性以及可扩展性需求,本项目采用了经典的 ssm(SpringBoot+SpringMVC+Mybatis)框架,遵循 MVC 设计模式,并进行分层设计。MyBatis 官方为开发者提供了进行逆向工程的工具。通过逆向工程开发者可以快速生成 MyBatis 的 mapper 文件,这样开发者可以将主要精力放在业务逻辑的处理上而无需关心 SQL 语句的编写,提高了开发效率。同时,开发者也可以在 mapper 文件中对复杂 SQL 进行处理,提高了灵活性。本项目也使用了 MyBatis 的逆向工程,同时对于简单的查询我们使用了注解版本的 MyBatis。同时为了方便项目的管理以及构建,本项目选择了 maven 对项目进行管理。Maven 是 Java 平台一款优秀的项目管理工具,它可以对项目中的依赖进行管理,同时支持对项目进行一键构建,极大的方便了开发者。SpringMVC 框架作为一款成熟的 MVC 框架,很好的实现了 MVC 的设计模式,开发者只需要进行少量配置就可以使用,为 Web 开发提供了便捷的方式。在本项目中使用 controller 包来存放 MVC 相关的类。使用 mapper 包存放 MyBatis 相关的接口。使用 service 包存放业务相关的接口以及实现类。具体的项目结构如图 2-2 所示。
图 2-2 项目结构设计
2.4 设计模式
为了项目的维护性以及可扩展性,本项目采用了一些 Java 经典的设计模式:观察者模式,中介者模式,单例模式,装饰器模式等。
装饰器模式时 Java 基础类库中 IO 包下各个类和接口的基本设计思想。装饰器模式综合运用了 Java 面向对象的思想:继承、多态进行设计,体现出 Java 面向对象思想的强大。本项目大量使用 IO 流,因此对装饰器模式的基本了解是必不可少的。
总之,一个好的系统离不开设计模式的使用,本项目采用了一些经典的设计模式,正是为了提高程序的可读性、可维护性、可拓展性,以便为用户提供更好的体验。
2.5 通信协议
为了各个客户端和服务器交互时信息类型的统一性,在项目设计过程中必须实现一个统一的通信协议。该通信协议的目的是为了方便客户端之间的数据交互,类似于一种“暗号”。本项目为 Web 项目,使用了经典的 Servlet 容器 Tomcat,在通信协议方面使用了 HTTP 协议,同时使用 JSON 对数据进行传输。为了统一前后端的交互,我们设计了 JsonResult 类。JsonResult 类主要有以下属性:msg、code、data、count。msg 用来表示提示信息,code 是状态码,用来表示响应的状态。data 用来表示数据,count 表示数据的数量。
3 系统实现
3.1 登录功能
本项目采用流行的 B/S 架构,用户通过浏览器发送的请求都将传送到 Tomcat 服务器端进行处理。服务器主要包括数据库以及服务端后台软件。在用户输入账号和密码信息后,浏览器会首先检查用户的输入是否符合规范,如果符合规范进行下一步,否则提示相应的错误信息。服务器在接收到用户的请求之后通过 SpringMVC 提供的校验工具根据规则再次进行校验,如果出现错误,则返回封装好的 JSON 数据,JSON 数据包含错误信息,客户端得到 JSON 数据后会进行解析,如果包含错误信息就进行提示。如果服务器没有检查到错误,那么就会通过请求转发的方式对页面进行跳转。同时用户可以使用记住密码功能。服务器会检查用户是否选择了记住密码功能。如果检测到选择了该功能,就会将用户的相关信息存入 cookie 中,并设置相应的响应头,带给浏览器。浏览器接收到数据后会对 cookie 进行检测,如果检测到了 cookie,就会将 cookie 取出来,并放入相应的输入框内。同时为了安全,设置了验证码,用户只有在验证码输入正确的情况下才能进行后续的操作。登录界面如图 3-1 所示,登录的顺序图如图 3-2 所示。
图 3-1 登录界面
图 3-2 登录顺序图
3.2 浏览所有新闻信息
浏览所有新闻信息的实现分为客户端和服务端的实现。首先讲解客户端的实现。客户端使用了 layui,在点击左侧菜单栏中的功能时可以跳转相应的页面,页面的跳转是通过服务器端进行的,服务器端使用了 Thymeleaf 技术,可以在后端对静态页面进行渲染。页面跳转之后会显示所有新闻的信息,同时可以通过上方的搜索框进行多条件组合查询。Layui 对 AJAX 请求进行了封装,同时提供了对表格进行渲染的方法。客户端只需要传递相应的参数给服务端即可。服务器端可以使用 SpringMVC 的参数绑定来接受前端传递的参数。在后端使用 MVC 的设计模式,我们调用 service 层调用 dao 层的方法即可。后端的接口是提前设计好的。在前后端分离的方式下这是一种常用的方式。后端同时也要对参数进行校验,并将错误信息封装到 JSON 数据中。浏览所有新闻信息界面如图 3-3 所示。
图 3-3 浏览所有新闻信息
3.3 多条件组合查询以及分页查询
多条件组合查询的实现也需要分成前后端的实现进行讲解。在前端,我们使用了 layui 框架,layui 框架封装了一个 AJAX 请求,在我们呢传递参数的时候,他会自动在后面添加两个参数,一个是 page 代表当前页,一个是 limit 代表每页显示的数量。我们可以使用公式:(page-1)* limit 来进行分页计算。还可以使用开源的工具 PageHelper 来进行分页。PageHelper 是 MyBatis 框架的一个插件。专门用来实现分页,PageHelper 的好处是,它是跨平台实现的。无论是使用 MySQL 还是 Oracle 都可以使用 PageHelper 来进行分页。参数传递时需要注意,在后端一般是使用同一个 API 来进行实现,需要对初始化时的参数进行判断。
图 3-4 多条件组合查询
3.4 浏览所有电影信息
浏览所有电影信息的实现和上述浏览所有新闻信息类似。浏览所有电影信息如图 3-5 所示。
图 3-5 浏览所有电影信息
3.5 编辑电影信息
电影信息编辑是通过 AJAX 请求来实现的,使用 post 请求方式,向服务端发起请求,服务端完成更新并返回处理结果。编辑电影信息如图 3-6。
图 3-6 编辑电影信息
3.6 删除新闻信息
删除新闻信息具体的效果如图3-7所示。
图 3-7 删除新闻
3.7 预览新闻信息
预览视频的效果如图 3-8 所示。
图 3-8 预览新闻信息
3.8 预览视频
预览视频的效果如图 3-9 所示。
图 3-9 预览视频
4 测试
本项目主要使用 junit5 自动测试框架进行单元测试,junit5 为我们提供了方便的测试方法,并能方便的查看单元测试覆盖率。同时我们使用了 SpringBoot 为我们提供的单元测试框架,以便于对 IoC 容器中的组件进行测试。
在单元测试过程中,我们使用了白盒测试中的基本路径测试,条件覆盖测试等测试方法。
测试样例设计如表 4-1 所示:
测试样例 | 预期输出 |
---|---|
“学习” | Type 类型集合 |
“123”、“002” | 2 |
表 4-1 测试样例设计
具体的测试的部分代码如图 4-1 所示:
图 4-1 单元测试代码
5 项目总结
本项目使用最新的 SpringBoot 技术进行构建,并结合了 SpringMVC、MyBatis 等热门框架技术。
SpringBoot 技术为用户提供了自动装配功能,用户只需要遵守约定就可以减少甚至不需要再进行繁琐的配置。相较于 Spring,SpringBoot 为我们提供的自动装配节约了我们大量的开发时间,提高了开发效率。
在项目开发过程中我们采用团队开发的方式进行开发,每个组员负责其中的一个模块。我主要负责登录以及文件上传等模块的开发。文件上传是本项目中较为重要的模块,管理员可以通过该模块实现图片以及视频的上传功能。SpringBoot 为我们提供了上传组件,实现起来还是比较简单的,但是也要考虑一些问题,例如用户选择的文件文件名可能有些问题,我们需要通过 UUID 来为用户上传的文件名进行重命名。
相较于传统的 Web 项目开发,SpringBoot 为我们提供了大量开箱即用的功能,使用起来十分方便。在项目开发过程中,我们通过 SpringBoot 与其它框架进行整合,实现了 Web 应用的快速开发。
总体来说,项目的开发还是很顺利的,但是也有一些需要记录的错误。例如有的组员不重视单元测试,导致整合开发的时候出现了很多错误,拖慢了整体的开发进度。
6 实训感想
本次实训的课题是设计一个电影后台管理系统。通过这个项目也确实学到了很多的知识。对 ssm 框架的配置、使用整合进行了学习。总体来说本项目作为阶段性的实训项目很合适,基本将 ssm 框架的基础知识串了起来。
做这个项目更大的收获是对于面向对象思想的理解。学习 Java 的过程中很容易形成一个不好的思维:单纯的将 Java 的优点理解为随时调用的方法和丰富的类库。这些自然是 Java 的强大之处,但是面向对象的思想才是项目设计过程中不可或缺的制胜法宝。面向对象必须要理解对象的作用,对象该做什么,是设计类时的难点。什么方法就应该在什么类中,什么对象就应该做什么样的事情。总之,熟练掌握面向对象的程序设计思想是一个 Java 工程师应该具备的基本技能。面向对象思想可以极大的简化代码数量以及降低业务逻辑的复杂度。学习使用面向对象的思想解决问题也是后续学习的基础。因此,在学习 Java 的过程中一定要把握住面向对象思想的掌握。
计算机的基础知识对今后的编程学习是有很大的帮助的。因此一定要重视计算机的基本知识。同时也要重视数据结构以及算法,在做项目的过程中,正是因为数据结构和算法功底不够,所以无法实现更高效的算法。
总之,通过这个项目对 Java 基础知识有了更深入的理解。也为后续的学习做好了铺垫。
参考文献
- 电影推荐与点评系统的设计与实现(华中科技大学·连浩磊)
- 基于内容与协同过滤算法的电影推荐系统研究(黑龙江大学·潘悦)
- 基于JSP的视频点播系统设计与实现(厦门大学·常雯)
- 企业内部管理系统的设计与实现(山东大学·李灿灿)
- 在线学习过程管理系统软件设计与实现(北京邮电大学·王嘉康)
- 基于OAuth2.0协议的企业分布式授权系统设计与实现(华中科技大学·支猛)
- 基于.NET技术的电影票网购系统的设计与实现(河南大学·李珍)
- 基于Spring Boot的校园轻博客系统的设计与实现(华中科技大学·邓笑)
- 具有反爬虫机制的影评系统的设计与实现(北京交通大学·高萍)
- 具有反爬虫机制的影评系统的设计与实现(北京交通大学·高萍)
- 基于SSH框架的人力资源管理系统的设计与开发(电子科技大学·唐伟)
- 基于OAuth2.0协议的企业分布式授权系统设计与实现(华中科技大学·支猛)
- 多功能影院网站的设计与开发(北京工业大学·郭光明)
- 基于OAuth2.0协议的企业分布式授权系统设计与实现(华中科技大学·支猛)
- 基于OAuth2.0协议的企业分布式授权系统设计与实现(华中科技大学·支猛)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码驿站 ,原文地址:https://m.bishedaima.com/yuanma/35935.html