天天看点

大三上学期实训——基于SpringBoot的电影后台管理系统

目 录

1 系统需求分析... 1

1.1 产品非功能需求... 1

1.1.1 用户需求... 1

1.1.2 易用性需求... 1

1.1.3 性能需求... 1

1.1.4 可维护性和可扩展性需求... 1

1.1.5 安全性需求... 1

1.2 产品功能需求... 2

1.2.1 登录功能... 2

1.2.2 退出功能... 2

1.2.3 新闻管理功能... 2

1.2.4 修改密码功能... 2

1.2.5 电影管理功能... 3

1.2.6 分类和标签信息管理功能... 3

1.2.7 md5密码加密功能... 3

2 系统设计... 4

2.1 可行性分析... 5

2.1.1 调查分析... 5

2.1.2 必要性分析... 6

2.2 数据库设计... 6

2.3 项目结构设计... 8

2.4 设计模式... 9

2.5 通信协议设计... 9

3 系统实现... ... 11

3.1 登录功能... 11

3.2 浏览所有新闻信息... 12

3.3 多条件组合查询以及分页查询... 13

3.4 浏览所有电影信息... 14

3.5 编辑电影信息... 14

3.6 删除电影信息... 15

3.7 预览新闻信息... 15

3.8 预览电影信息... 16

4 测试... 17

5 项目总结... 18

6 实训感想... 19

系统的设计建立在用户的需求之上,通过对用户需求的分析,可以更好的实现系统,明确系统的设计方向。

随着社会的不断发展,越来越多的年轻人选择通过观看电影来娱乐。同时,网络上的各种电影网站也越来越多。年轻人也已经习惯通过网络来访问和查看最新的电影。正是在这种情况下,我们推出了电影后台管理系统。本着用户至上的原则,我们对用户需求进行了分析调研。根据用户的反馈,电影后台管理系统将开发以下几个模块:新闻管理模块、电影管理模块、分类信息管理模块、标签信息管理模块。同时为了确保安全性,不允许随便进行注册。

本产品为web项目,使用最新的SpringBoot框架进行开发。同时在前端使用layui后台模板框架,为用户设计了简单易用的操作界面。同时为了避免用户误操作,对输入框添加了误操作提示。在前后台进行了数据校验。同时为用户提供了多条件搜索功能,方面用户进行查找和搜索。

本产品在保持界面的美观的同时为优化性能设计了具体的算法,尽量为用户提供及时的响应。同时尽量对mysql语句进行了调优,希望能够为用户提供良好的访问体验。

本产品使用Java作为主要的开发语言,使用了SpringBoot2+Springmvc5+mybatis3框架。使用MVC的设计模式,为产品的拓展性提供了保障。同时SpringBoot框架也有利于解耦,通过控制反转和依赖注入的基本思想,可以更容易的对程序进行修改和拓展。

本产品在设计时采用正则表达式对用户输入进行过滤,同时使用了较为可靠的sql连接、查询方式。为了避免用户破坏数据库,对数据库的连接信息写入到了xml配置文件当中。同时对数据库的增删改操作添加了事务控制,确保操作的安全性。

登录页面提供以下功能:

(1)对用户的输入进行校验,例如用户名的长度以及密码的长度需要符合规范。

(2)对用户的账号密码进行校验,如果账号或者密码错误会进行相应的提示。

(3)如果密码正确跳转到首页。

(4)记住密码功能,用户可以选择记住密码,这样下次访问就无需填写密码。

(5)验证码功能,用户需要输入验证码才能进行登录操作。

当用户登录以后可以进入首页,如果用户已经完成工作,可以选择退出当前登录的用户。服务器端会清除session数据。

​ 新闻管理可以对新闻信息进行管理,具有以下功能:

(1)浏览所有新闻信息。

(2)进行多条件组合查询,并根据查询条件对查询结果进行展示。

(3)可以对浏览或者查询结果进行分页展示,可以减轻服务器的压力。

(4)可以根据用户的id删除相应的新闻信息。

(5)可以根据id对新闻进行编辑,允许对新闻的内容、标签、分类等信息进行编辑,但是不允许更改id。

(6)可以新增一条新闻信息(包括作者、标题、内容、分类、标签等),新闻编辑使用富文本编辑器实现。

(7)可以预览新闻的内容。

当前用户登录之后可以修改密码,修改密码对格式有限制,同时不允许新密码和旧密码相同。

​ 电影管理主要是对电影信息的管理,主要用来浏览和查找以及新增电影信息,功能包括:

(1)展示所有电影的信息并通过分页进行展示。

(2)可以对电影信息进行多条件组合查询,可以根据电影名称进行相应的查询。

(3)可以删除某部电影的信息。

(4)可以批量删除多部电影的信息。

(5)可以对电影的信息进行编辑。

(6)可以新增电影信息。

(7)可以上传与电影相关的图片。

(8)可以上传电影。

(9)可以预览电影。

​ 分类信息管理和标签信息管理可以对分类或标签信息进行管理,主要提供增删改查的基本操作,有以下几个功能:

(1)展示所有分类或标签的基本信息。

(2)可以根据分类名称对分类信息进行查询,同时支持模糊查询。

(3)可以根据id对分类或标签进行删除,同时会删除关联的所有新闻或电影信息。

(4)可以对分类或标签的信息进行修改,但是不允许操作id。

(5)可以向数据库中插入一条分类或标签信息,但是需要符合规则,否则会提示相应的错误信息。

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

MD5加密算法是一种不可逆的加密算法,目前还没有有效的方式对其进行破解。唯一的破解方式就是暴力破解。

随着信息安全问题越来越严峻,公司数据库信息加密变得尤为重要。在本项目中,使用md5加密算法对密码进行了加密处理,可以确保用户信息的安全。

系统的初步调查是系统设计的规划阶段的第一项活动,也是整个系统开发的第一项活动,主要目标就是了解组织机构、工作现状。

通过对整个管理系统业务的了解,主要业务逻辑是用户对新闻、电影、分类或标签信息的各种操作,用户的操作可能通过get方式或者post方式发送给服务器端,服务器端对用户的请求进行处理,最后通过json数据的方式返回给前端使用。用户的操作主要有以下几个点:

(1)登录。

(2)记住密码。

(3)退出。

(4)修改密码。

(5)浏览全部新闻信息。

(6)根据不同的条件对新闻信息进行查询。

(7)浏览全部新闻信息。

(8)根据不同的条件对新闻信息进行查找。

(9)编辑并更新新闻的信息。

(10)删除新闻信息。

(11)为新闻添加一个分类或标签。

(12)浏览新闻的分类信息。

(13)新增一条新闻。

(14)浏览所有电影的信息。

(15)根据电影的名字进行模糊查询。

(16)删除某一条电影的信息。

(17)编辑并更新某一条电影的记录。

(18)新增一条电影的信息。

总之,必须对现行系统进行详尽调查,明确用户需求,保证开发的新系统的功能与用户的要求相吻合,避免耗费大量的人力、物力、财力。

随着现代社会,科技快速发展,娱乐方式呈多元化趋势。越来越多的人开始通过观看电影来度过闲暇时间。看电影也成了人们平时不可或缺的娱乐活动。但随之而来的,是优质电影平台的选择问题。电影平台如何为用户提供优质电影以及电影资讯成了急需解决的问题。因此,设计一款电影后台管理系统是很有必要的。电影后台管理系统为电影管理者提供了一个管理电影的平台,电影管理者可以通过电影后台管理系统平台对电影的各种信息进行管理,同时可以上传电影以及电影海报。

本系统数据库主要设计了六张表,分别是:blog表、blog_tags表、movie表、type表、user表、tag表。

blog表用来存储新闻的基本信息,新闻相关的各种信息都存在这张表上。blog表的具体设计如表2-1所示。

列名

数据类型

长度

主键

非空

自增

注释

id

varchar

255

title

标题

header_image_url

头图

create_date

timestamp

创建时间

type_id

分类id

content

longtext

新闻内容

author

15

作者

from_link

来源地址

​ 表2-1 blog表设计

blog_tags表用来关联新闻和标签之间的关系,blog_tags表的具体设计如表2-2所示。

tag_id

标签表id

blog_id

新闻表id

​ 表2-2 blog_tags表设计

movie表用来存储电影的基本信息,电影相关的各种信息都存在这张表上。movie表的具体设计如表2-3所示。

首图

description

描述

导演

movie_link

电影链接

​ 表2-3 movie表设计

type表用来存放电影或者新闻的分类信息。type表的具体设计如表2-4所示。

type_name

vrchar

50

分类名称

​ 表2-4 type表设计

tag表用来存放电影或者新闻的标签信息,标签的各种信息都存在这张表上。tag表的具体设计如表2-5所示。

tag_name

标签名称

​ 表2-5 tag表设计

user表用来存储管理员的基本信息。用户的各种信息都存在这张表上。user表的具体设计如表2-6所示。

nickname

20

昵称

username

账号

email

30

邮箱

avatar_url

头像

password

密码

​ 表2-6 user表设计

同时,为了确保数据的安全以及数据的完整,在设计数据库表时使用了外键来确保表的完整性约束。数据库的架构设计如图2-1所示。

​图2-1 数据库架构设计

为了产品的可维护性以及可扩展性需求,本项目采用了经典的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所示。

大三上学期实训——基于SpringBoot的电影后台管理系统

图2-2 项目结构设计

为了项目的维护性以及可扩展性,本项目采用了一些Java经典的设计模式:观察者模式,中介者模式,单例模式,装饰器模式等。

装饰器模式时Java基础类库中IO包下各个类和接口的基本设计思想。装饰器模式综合运用了Java面向对象的思想:继承、多态进行设计,体现出Java面向对象思想的强大。本项目大量使用IO流,因此对装饰器模式的基本了解是必不可少的。

总之,一个好的系统离不开设计模式的使用,本项目采用了一些经典的设计模式,正是为了提高程序的可读性、可维护性、可拓展性,以便为用户提供更好的体验。

为了各个客户端和服务器交互时信息类型的统一性,在项目设计过程中必须实现一个统一的通信协议。该通信协议的目的是为了方便客户端之间的数据交互,类似于一种“暗号”。本项目为web项目,使用了经典的Servlet容器Tomcat,在通信协议方面使用了HTTP协议,同时使用json对数据进行传输。为了统一前后端的交互,我们设计了JsonResult类。JsonResult类主要有以下属性:msg、code、data、count。msg用来表示提示信息,code是状态码,用来表示响应的状态。data用来表示数据,count表示数据的数量。

本项目采用流行的B/S架构,用户通过浏览器发送的请求都将传送到Tomcat服务器端进行处理。服务器主要包括数据库以及服务端后台软件。在用户输入账号和密码信息后,浏览器会首先检查用户的输入是否符合规范,如果符合规范进行下一步,否则提示相应的错误信息。服务器在接收到用户的请求之后通过SpringMVC提供的校验工具根据规则再次进行校验,如果出现错误,则返回封装好的json数据,json数据包含错误信息,客户端得到json数据后会进行解析,如果包含错误信息就进行提示。如果服务器没有检查到错误,那么就会通过请求转发的方式对页面进行跳转。同时用户可以使用记住密码功能。服务器会检查用户是否选择了记住密码功能。如果检测到选择了该功能,就会将用户的相关信息存入cookie中,并设置相应的响应头,带给浏览器。浏览器接收到数据后会对cookie进行检测,如果检测到了cookie,就会将cookie取出来,并放入相应的输入框内。同时为了安全,设置了验证码,用户只有在验证码输入正确的情况下才能进行后续的操作。登录界面如图3-1所示,登录的顺序图如图3-2所示。

大三上学期实训——基于SpringBoot的电影后台管理系统

​ 图3-1 登录界面

大三上学期实训——基于SpringBoot的电影后台管理系统

​ 图3-2 登录顺序图

浏览所有新闻信息的实现分为客户端和服务端的实现。首先讲解客户端的实现。客户端使用了layui,在点击左侧菜单栏中的功能时可以跳转相应的页面,页面的跳转是通过服务器端进行的,服务器端使用了Thymeleaf技术,可以在后端对静态页面进行渲染。页面跳转之后会显示所有新闻的信息,同时可以通过上方的搜索框进行多条件组合查询。Layui对ajax请求进行了封装,同时提供了对表格进行渲染的方法。客户端只需要传递相应的参数给服务端即可。服务器端可以使用SpringMVC的参数绑定来接受前端传递的参数。在后端使用MVC的设计模式,我们调用service层调用dao层的方法即可。后端的接口是提前设计好的。在前后端分离的方式下这是一种常用的方式。后端同时也要对参数进行校验,并将错误信息封装到json数据中。浏览所有新闻信息界面如图3-3所示。

大三上学期实训——基于SpringBoot的电影后台管理系统

​ 图3-3 浏览所有新闻信息

多条件组合查询的实现也需要分成前后端的实现进行讲解。在前端,我们使用了layui框架,layui框架封装了一个ajax请求,在我们呢传递参数的时候,他会自动在后面添加两个参数,一个是page代表当前页,一个是limit代表每页显示的数量。我们可以使用公式:(page-1)* limit来进行分页计算。还可以使用开源的工具PageHelper来进行分页。PageHelper是mybatis框架的一个插件。专门用来实现分页,PageHelper的好处是,它是跨平台实现的。无论是使用mysql还是oracle都可以使用PageHelper来进行分页。参数传递时需要注意,在后端一般是使用同一个api来进行实现,需要对初始化时的参数进行判断。

大三上学期实训——基于SpringBoot的电影后台管理系统

​ 图3-4 多条件组合查询

浏览所有电影信息的实现和上述浏览所有新闻信息类似。浏览所有电影信息如图3-5所示。

大三上学期实训——基于SpringBoot的电影后台管理系统

​ 图3-5 浏览所有电影信息

电影信息编辑是通过ajax请求来实现的,使用post请求方式,向服务端发起请求,服务端完成更新并返回处理结果。编辑电影信息如图3-6。

大三上学期实训——基于SpringBoot的电影后台管理系统

​ 图3-6 编辑电影信息

​ 删除新闻信息具体的效果如图3-7所示。

大三上学期实训——基于SpringBoot的电影后台管理系统

​ 图3-7 删除新闻

预览视频的效果如图3-8所示。

大三上学期实训——基于SpringBoot的电影后台管理系统

​ 图3-8 预览新闻信息

预览视频的效果如图3-9所示。

大三上学期实训——基于SpringBoot的电影后台管理系统

​ 图3-9 预览视频

本项目主要使用junit5自动测试框架进行单元测试,junit5为我们提供了方便的测试方法,并能方便的查看单元测试覆盖率。同时我们使用了SpringBoot为我们提供的单元测试框架,以便于对IOC容器中的组件进行测试。

在单元测试过程中,我们使用了白盒测试中的基本路径测试,条件覆盖测试等测试方法。

测试样例设计如表4-1所示:

测试样例

预期输出

“学习”

Type类型集合

“123”、“002”

2

​ 表4-1 测试样例设计

具体的测试的部分代码如图4-1所示:

大三上学期实训——基于SpringBoot的电影后台管理系统

​ 图4-1 单元测试代码

本项目使用最新的SpringBoot技术进行构建,并结合了SpringMVC、mybatis等热门框架技术。

SpringBoot技术为用户提供了自动装配功能,用户只需要遵守约定就可以减少甚至不需要再进行繁琐的配置。相较于Spring,SpringBoot为我们提供的自动装配节约了我们大量的开发时间,提高了开发效率。

在项目开发过程中我们采用团队开发的方式进行开发,每个组员负责其中的一个模块。我主要负责登录以及文件上传等模块的开发。文件上传是本项目中较为重要的模块,管理员可以通过该模块实现图片以及视频的上传功能。SpringBoot为我们提供了上传组件,实现起来还是比较简单的,但是也要考虑一些问题,例如用户选择的文件文件名可能有些问题,我们需要通过UUID来为用户上传的文件名进行重命名。

相较于传统的Web项目开发,SpringBoot为我们提供了大量开箱即用的功能,使用起来十分方便。在项目开发过程中,我们通过SpringBoot与其它框架进行整合,实现了web应用的快速开发。

总体来说,项目的开发还是很顺利的,但是也有一些需要记录的错误。例如有的组员不重视单元测试,导致整合开发的时候出现了很多错误,拖慢了整体的开发进度。

本次实训的课题是设计一个电影后台管理系统。通过这个项目也确实学到了很多的知识。对ssm框架的配置、使用整合进行了学习。总体来说本项目作为阶段性的实训项目很合适,基本将ssm框架的基础知识串了起来。

做这个项目更大的收获是对于面向对象思想的理解。学习Java的过程中很容易形成一个不好的思维:单纯的将Java的优点理解为随时调用的方法和丰富的类库。这些自然是Java的强大之处,但是面向对象的思想才是项目设计过程中不可或缺的制胜法宝。面向对象必须要理解对象的作用,对象该做什么,是设计类时的难点。什么方法就应该在什么类中,什么对象就应该做什么样的事情。总之,熟练掌握面向对象的程序设计思想是一个Java工程师应该具备的基本技能。面向对象思想可以极大的简化代码数量以及降低业务逻辑的复杂度。学习使用面向对象的思想解决问题也是后续学习的基础。因此,在学习Java的过程中一定要把握住面向对象思想的掌握。

计算机的基础知识对今后的编程学习是有很大的帮助的。因此一定要重视计算机的基本知识。同时也要重视数据结构以及算法,在做项目的过程中,正是因为数据结构和算法功底不够,所以无法实现更高效的算法。

总之,通过这个项目对Java基础知识有了更深入的理解。也为后续的学习做好了铺垫。

继续阅读