




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于Java的短视频小程序系统的设计摘要随着移动通信和网络设备的日益发展和普及,通过智能手机等便携式移动设备进行咨询信息的使用者人群己经远远多于了传统的报纸、电视、广播,乃至是计算机用户。在这样的时代环境下,短视频逐渐发展成为主流并在国内也得到了快速的发展,也逐渐成为继文字、图片之后在社交平台上出现的新的信息承载方式。本篇论文是通过JavaWeb技术及其相关框架进行开发“短视频微信小程序”,从而更深入的了解和探讨有关短视频方向的基本需求和发展趋势。在开发过程中采用了建立动态网站的几种主要技术和框架,如Spring、Springboot、Mybatis、SpringMVC等。在基于以上几种框架与技术来进行在短视频微信小程序的开发和设计中,主要研究了有关短视频观看的需求分析,后台管理系统的主要功能需求。本次“短视频微信小程序”的总体思路是根据需求分析进行角色确立以及类的确立,之后再根据角色与类对后台系统的数据库及表乃至类型进行分析与设计,完成数据库工作之后用Java语言进行各类、各服务接口的编写,最终再将微信小程序的前台和后台两大部分进行结合。此次的开发主要实现了短视频软件的基本功能如短视频观看、点赞、评论、转发、举报功能、用户之间的关注以及后台管理对短视频进行管理等功能。本次开发系统的过程符合遵循软件工程基本开发流程和原理,采用J2EE技术常用的MVC与三层结构即Model模型、View视图和Controller控制器,使用了市面上较为流行和普遍使用的SSM架构即Spring、SpringMVC、Mybatis以及Springboot框架,其中Springmvc负责实现Web应用程序等功能,Spring容器负责实现各类的生命周期以及依赖等功能,而本次的数据交互层选择采用Mybatis框架进行与数据库的连接。关键字短视频;微信小程序;J2EE;Spring;Myabits目录1 前言 11.1课题研究背景 11.2研究方法 21.3研究目的与意义 22 开发环境及工具 42.1 开发工具简介 42.1.1JDK简介 42.1.2MySQL简介 42.1.3Tomcat简介 42.1.4Spring简介 42.1.5JDBC简介 52.1.6Springboot简介 52.1.7Mybatis简介 52.1.8Redis简介 52.2 本章小结 63 需求分析 83.1系统需求概述 83.2系统非功能性要求 93.3本章小结 94 系统总体设计 114.1 UML建模 114.2 体系结构 114.2.1 逻辑结构 134.2.2 数据流程 144.3 业务流程 124.4 状态模型 124.5 本章小结 125系统详细设计与实现 165.1前台功能模块实现 165.1.1实现注册登录 165.1.2实现短视频列表 205.1.3实现短视频详情页 225.1.4实现用户页面 245.2数据库设计 286系统测试 307结论 30参考文献 31前言1.1课题研究背景短视频行业在我国的发展可谓是如日方升。以智能手机为主的移动终端为基础的短视频APP以及网站在我国已经有近十年的发展历史。这一十年被社会大众称为“新时代风口”。短视频的“短”一般表示视频时间不超过五分钟,这样的视频满足用户处理碎片时间问题。在此基础上,短视频行业的各大企业都致力于数据收集以及算法分析,并最终推算出符合用户大致口味的短视频,这使得用户对短视频的热衷程度和依赖程度越来越深。而用户本身可以使用有摄像功能的智能手机进行视频拍摄并在拍摄后进行简单的剪辑和加工,在满足普通视频创作和有关短视频平台规范后随时可以上传到短视频平台。此外,短视频无论在短视频平台还是在各大流行社交平台都可以进行分享和观察。与传统的单一表达形式如图片、文字和音频相比,短视频的优势体现在是能将视觉和听觉结合起来,在短时间内满足用户的体验,形成传统表达形式不可比的感官刺激。这无疑使得短视频成为当下社会最为吸引年轻人眼球的媒介。通过对各个短视频平台进行市场渗透率的计算,可以看出市场渗透率,排位最靠前的分别为快手,火山小视频,西瓜视频。计算市场渗透率同比增幅,可以看出抖音短视频的市场渗透率同比增幅比其他短视频平台要高。其中西瓜视频的市场渗透率,同比增幅在240%左右。同时抖音短视频均值同比增幅,呈现出比较显著的成绩。短视频的本质上有较高的应用性,一方面有较高的理论价值,另一方面也有较高的实践意义,所以本篇文章的侧重点是对短视频部分功能进行研究和分析,除了查阅大量的参考文献之外结合自己所学的开发技术,对此小程序进行设计与开发,使自身对开发相关的理论以及当下短视频现状更加深入浅出,对短视频的发展趋势的发展具有参考性和可操作性。1.2系统的研究现状本课题的选取是基于目前我国互联网行业迅速发展势头良好的大环境下短视频行业存在于继续发展的必然性和必要性。在我国大市场下,短视频已经走过了四个阶段分别是准备期、转型期、高速发展期、到现在的稳定期。在准备期之时,智能手机、wifi和3G网络的普及让秒拍、美拍等短视频行业开始出现。随着网络设备基础设施不断发展完善,4G网络的出现让各大短视频平台开始分发渠道多元化。在高速发展期,字节跳动推出西瓜视频和抖音短视频,并靠成熟的智能算法吸引了市场上绝大用户迅速占领了风口,许多互联网大厂都开始在短视频领域开始布局,因此短视频行业在这个阶段得到了迅速发展。在经过一两年的沉淀后,短视频市场进入了稳定格局,很多短视频公司进行业务拓展、探索更多元化和深层次商业模式更有甚者开始布局海外市场并取得了较好的效果。近三年来,国内市场基本已成定局,海外发展成为短视频企业另谋出路获取更大利益的最好选择,热门巨头快手和字节跳动最典型的企业代表。两家企业在海外扩展都分别获得不俗的成绩,在美国、印度等地都出台了相应APP提供给海外用户,尽管在2020年8月,TikTop海外版遭到了美国政客的威胁并被美国政府要求关闭出售业务。由于短视频上传机制、入门门槛低和自我审查机制少,因此在快速发展的过程中,大量不良低俗低级、虚假信息、涉嫌抄袭和侵犯版权的短视频冒出水面。随着问题暴露愈发严重,我国相关监管部门开始对短视频进行相关监管和制定相关法律工作。在开发技术现状上,Java语言悠久的发展历史让其在当下开发语言中仍有一席之地,Java语言当前最新版本是JDK15,已经推出了较多新特性,Java无论在网络编程,数据库操作还是类、方法的封装都有强大的功能,这使得部分开发人员更青睐于Java开发。而SpringBoot的发展从2014年出现在人们眼球吸引了大量开源爱好者参与研究和开发到现在已经发展了七个年头。根据网上资料显示,SpringBoot在美国和中国的整体使用频率保持一致。社区对SpringBoot的热情也让Spring官方更加注重的SpringBoot框架的稳定和发展。1.3研究目的与意义课题在结束研究之后,想要达到的基本要求有:1.实现小程序的核心功能:用户注册登录注销、用户上传头像、查看用户信息、观看短视频、用户上传短视频相关操作、通过关键字搜索相关视频、用户与用户间的关注、用户与视频间的点赞收藏与举报功能、管理员上传BGM、管理员对用户的操作与管理等功能;2.为用户提供短视频的观看或收藏下载功能。因为集第一条所述的众多功能,平台的所有操作流程都梳理明确,实现过程都能一步到位的,并且在每个环节都有相当严格的规范化设置;3.全面直观的了解短视频的信息以及用户情况,实时都能一目了然的知道用户和视频的相关信息,可以查看到用户对哪类视频偏爱或违规视频;4.最终的要求希望所研究的课题能够落实到真实的生活当中,开发的短视频平台不仅能够为用户提供便利,更让这个平台在被用户能够在使用过后仍能被坚持,拥有长期的良好信誉和安全支撑。开发环境及工具开发工具简介2.1.1JDK简介JDK是Javadevelopmentkit,官方解释为Java标准版开发包,也就是Java开发所需要的工具包。JVM、JRE和JDK是Java三大概念。JVM即JavaVirtualMachine,Java虚拟机是一个虚构的计算机,其广义作用是在真实的计算机上模拟实现计算机的各种功能。此外,Java虚拟机有着其较为独特完善的硬件结构如处理器、堆栈、寄存器和指令系统等。作用实现具体体现在JVM作为Java字节码的执行引擎,可以根据独特的规则优化class字节码文件并转化为效率更高的机器指令。双亲委派机制是JVM进行类装载的重要机制,由类加载器与其子类进行实现。Bootstrap类加载器:主要负责加载Java的核心类库如lang包等;Ext类加载器:负责加载部分扩展的jar,一般是指在jre/lib/ext目录下的;App类加载器:负责加载应用程序的主函数类。JVM在这三者关系中处于最底层,负责与需要运行的操作系统进行交互。而有关Java的跨平台性主要体现在JVM,因为不同的操作系统对应着不同的JVM。JRE即JavaRuntimeenvironment从底层来说是一个软件,包含了Java虚拟机和与Java相关的基础类库。而JDK作为三者的最高层,包含了JRE与其相关的开发、监控和分析工具如用于编译Java源码的编译器javac、用于监控程序运行情况的监控工具jconsole、以及用于分析的工具jvisualvm等。2.1.2MySQL简介MySQL是一个开源的关系型数据库,被广泛地应用在互联网开发中。其中不乏很多大型互联网公司选择将主线业务部署到MySQL中,更多的中小型网站更是青睐于其微乎其微的成本、体积小速度快成本低、有不同的存储引擎对应不同的存储模式,开源和简单易用等特点,而选择MySQL作为网站开发时的数据库,因而在保证功能实现且运行稳定的基础上节省了开发成本。2.1.3Tomcat简介Tomcat服务器是一个用于部署JSP和Servlet的Web应用服务器,是目前各企业较为流行使用的一个轻量级服务器,在中小型系统和低并发、访问量不大的系统被普遍使用。Tomcat服务器具有技术先进,性能稳定,开源免费等特点,是目前学习与开发JavaWeb应用程序的首选,所以本次服务器部署采用Tomcat服务器。2.1.4Spring简介Spring是一个开源框架,是为了解决由于软件开发的复杂性问题如耦合度高,可维护性低。主要是利用最基本的JavaBean来完成未开发前只可以使用EJB完成的功能。Spring的作用不仅仅体现在服务端的开发,更让大部分Java程序受益的是,Spring让Java程序变得更为简洁易懂,提高了可测试性,大幅降低了耦合度。Spring简单来说就是一个用于创建对象容器实现了创建到反射的过程,用户可以把对象的创建、管理和维护对象的状态以及各对象的依赖关系交予Spring容器。Spring最重要两个思想是IOC和AOP,IOC即控制反转,这是一种促进松耦合的技术思想。一个对象依赖其他对象们时,其他对象们并不是由原对象进行创建或查询依赖,而是会通过被动传递的方式传递给原对象。AOP即面向切面编程,在我们的日常开发中,会出现大量重复编写但与业务逻辑无关的代码,而Spring提供了一个很好的支持去分离应用业务逻辑和系统级服务如权限判断和事务管理等。这样子实现后,应用对象就可以只负责解决业务逻辑问题,它们并不负责甚至意识不到其他的系统关注点如日志系统。2.1.5JDBC简介JDBC,JavaDataBaseConnectivity,java数据库连接,是Java连接市面上流行数据库的一种准则,可以通过Java的接口执行数据库的SQL语句,由一系列的Java接口和类组合而成,为多种数据库提供统一访问服务。它与Java结合使用功能稳健简洁,也使得像本系统这种类似于短视频的用户服务和视频服务能够拥有更好的获取信息的方法。2.1.6SpringBoot简介SpringBoot是在Spring框架的基础上功能更为强大,开发更为简便的全新框架。从本质上来讲,SpringBoot其实是部分库的集合,大部分项目的构建系统都可以使用SpringBoot。与常规的Spring框架相比,最大的不同点是SpringBoot内嵌了Tomcat服务器或Jetty服务器,可以基于Maven等其他插件,创建独立的Spring应用程序或可执行的JARs和WARs,而非手动部署到服务器。SpringBoot提供了一个yml文件用于确定各对象属性的值,这使得开发和后续维护,修改更为便利。SpringBoot也是有两个较为重要的思想,第一个是OutOfBox即开箱即用,指的是在我们开发过程中,管理对象的生命周期首先要通过MAVEN的pom.xml文件填写所需要依赖的jar包再在相应引用的地方用注解代替烦琐的xml配置文件。这使得开发工作可以更加专注在业务逻辑代码的编写上而非复杂的配置工作和依赖的管理。第二个是约定优于配置,意思是由SpringBoot框架来决定目标结构,然后开发者在此结构基础上增加额外的信息的软件设计范式。2.1.7Mybatis简介MyBatis本是apache的一个开源项目iBatis。在传统的JDBC连接数据库时,需要用户编写大量有关类,注册驱动、创建connection和statement、配置连接相关的参数、结果集封装和检索等大量重复的工作。而Mybatis正是为了解决这种繁琐的情况,更好地让开发者专注于SQL语句的编写从而封装了JDBC操作数据库的方法和过程。Mybatis的出现几乎让开发者把所有JDBC相关代码和参数配置工作从开发工作中消除。Mybatis有两种方式进行执行各操作,xml配置和注解方式。Xml配置是最为常见的,我们在配置文件里对Java的POJOs和接口映射成数据库的表和字段,并在mapper文件对各SQL语句进行编写。Mybatis应用程序生成的流程大致是,从一个xml配置文件中或一个预定配置类生成SqlSessionFactoryBuilder,再让SqlSessionFactoryBuilder实例化SqlSessionFactory,最终由SqlSessionFactory工厂模式进行实例化Mybatis应用。如果市面上已经出现大量的Mybatis自动生成配置文件的免费插件,这使得我们在开发过程更加简便,从而更专注于SQL语句的编写,达到了对SQL和程序编码的解耦。2.1.8Redis简介redis是一个由C语言编写的高性能NoSQL系列的非关系型数据库。而非关系型数据库在如今较为流行的有Memcached和redis,两者相似之处是它们都支持多种存储类型,任何一种存储类型都是以key-value的形式进行存储。存储类型包括String字符串、List链表、Set集合、Zset有序集合和Hash哈希。针对这些数据类型redis对它们都有各自独特的操作,常用常见的有String的set/get、List的LPOP/LPUSHRPOP/RPUSH、Set的Sadd/SPOP、Zset的ZADD/ZREM和Hash的HSET和HDEL等此外还包括数学集合的运算如取交集并集和差集。任何Redis对数据类型的操作都是原子性的,但其事务不包括回滚性和原子性。Redis之所以高性能是因为它跟memcached一样,数据都是缓存在内存当中,存取效率非常快。跟Memcached不同的是redis有两种持久化方式,会定时周期的把数据写入磁盘,AOF和RDB,在此之上redis还实现了主从复制和哨兵模式。本章小结本章讲解本次小程序系统的技术要求,主要是将制作本系统使用到的工具:JDK、MySQL、Tomcat、Redis、Spring、Springboot等技术和框架作了概述,同时对支持小程序技术的相关技术—JDBC和Mybatis作了详细地讲解,下一步系统将使用这些技术对系统做全面的开发,本章为下面的开发及测试提供了铺垫。需求分析系统需求概述随着现代社会互联网的迅速发展,越来越多的人热爱短视频。许多手机使用者为有利用短视频填补空闲时间,也有通过短视频在短时间内获取有用信息,但是也有用户投入大量精力和时间的情况出现,所以针对出现的这种状况,要采取合适的短视频平台系统。因此设计合适参与角色能更好的帮助用户管理和利用好短视频。本系统的实现流程如图3-1。3-1系统实现流程图此处的系统功能性模块主要依据使用者的区别进行相关分配。3-2系统具体模块图它们各自的功能如下所述:前台部分前台部分主要包括一下几个方面,用户的注册登录注销,修改信息,用户浏览所有短视频,评论短视频,点赞或收藏短视频,上传短视频,关注其他用户,举报短视频和通过关键字浏览短视频等。这里的使用对象主要是用户。首先用户可以方便地注册和登录。若还未注册的顾客只能进行短视频的浏览,不能进行用户间的交互和与视频的交互;未注册的用户可进入注册页面进行注册,然后可以进行到个人页面进行信息确定,头像上传等。用户可以地灵活的通过关键字对偏爱的短视频进行搜索浏览。用户可以在浏览短视频页面查看视频发布者信息,对视频进行点赞,对视频进行收藏,对视频进行评论和对视频进行举报等。用户还可以关注其他用户,以便在关注页面观看关注者所发布的视频。(2)后台部分后台部分,管理员必须登录才能进行管理。管理员可以对系统进行相应的操作。管理员可以查看所有用户信息。管理员可以对bgm进行上传。管理员可以查看所有视频信息,也可查看被举报视频并进行禁播操作。系统非功能性要求一个成熟软件产品除了满足用户的功能性需求更应该注重非功能性的需求。在开发过程中,开发者常常轻视甚至忽视一个软件产品的非功能性需求这一重要方面。系统非功能性需求一般不会出现用户的业务需求中,需要专业的分析人员根据实现沟通好的逻辑业务需求进行调研等相关工作,系统非功能需求在某种程度上也可以决定一个软件产品的适用与否。如果一个软件单单满足功能性需求而在非功能性需求方面没有进行规范的定义和实现,结果一般都不会令人满意,使得产品在实际应用中错漏百出甚至丧失了满足系统的功能性需求的能力。我们一般常说的非功能性需求是指软件产品为满足用户业务需求而必须具有的、除功能需求以外的特性。其中有几个较为重要的参考指数分别是UI、易用性需求、安全性需求、系统完整性需求、可维护性和可扩充性等。本次系统主要从安全、性能、可维护性、用户体验和成本预算方面出发对非功能性需求进行分析和实现。安全能够防止SQL数据库注入式攻击能够防止脚本源代码泄露性能使用缓存等技术提供访问速度。可维护性使用Swagger2可快速查看接口信息并测试,以便维护。事先评估可变因素,并尽量将可预估的可变参数实现可配置化,从而减少更改源代码的频率。用户体验易操作,页面设计较为简单而实用。成本预算大量使用市面上较流行有技术保证的开源免费技术从而减少开发成本。优化系统后期运维方式,减少运维人力成本。本章小结本章主要介绍了系统功能要求和系统非功能性要求,系统功能性要求包括前台部分和后台部分,系统非功能性要求主要包括安全、性能、可维护性、用户体验和成本预算。系统总体设计UML建模随着面向对象编程的快速发展,在开发上逐渐代替了面向过程编程。为了方便开发系统,加强对问题的分析,让各方人员更好的针对系统进行讨论和统一确定需求,UML建模技术应时而生,UML是整个软件产品开发中一种图形化建模语言,为使用者提供了多种图形模型来构建系统可视化模型,成为了当今面向对象编程不可缺少的一部分。体系结构RobJohnson在其著名作《ExpertOne-on-OneJ2EEDesignandDevelopment》中提到,传统的J2EE架构为确定web应用与部署web应用的服务器之间的通讯方式规定了一组编程接口,这组接口主要是针对web服务和业务对象等的一组规范。J2EE主要功能实现体现在建立一个web服务和服务器无关的标准以及让服务器为了更便利地处理事务和高并发访问量等问题从而让服务器掌控控件的生命周期。J2EE定义了四个独立逻辑层,分别是客户层、表示层、业务层以及系统层。然而这种体系架构在开发、测试、性能和维护过程的表现实在令人失望,EJB在当今开发意味着低性能、难维护、开发繁琐和维护成本高。这种种现象表示传统的J2EE架构已有违背了“帕累托法则”的迹象。说明了使用J2EE体系结构会花费大量时间精力去解决少数出现的复杂问题而非用于为解决常见的问题作出方案。从这本书当中也诞生了著名的springframework也就是我们本次开发使用的spring框架。Spring框架与J2EE架构并非对立关系。Spring中也有大量使用和体现了J2EE的标准。比如Spring-mvc是在servlet之上的封装。Springdata也实现了JPA等。4.2.1逻辑结构1.UI层: 微信小程序:利用微信小程序独特的语言将页面和数据返回给用户。2.业务逻辑层:(1)Interceptor:拦截所有业务调用请求,根据事先规定和编写好的Interceptor类对所有业务调用请求进行逻辑处理如权限验证,加载日志等或在数据返回给前端等情况进行拦截对数据进行加工。采用Spring-web的规范实现。(2)Controller:接收用户的访问请求,先在类本身进行参数处理然后调用业务逻辑层Service得到返回信息,并将数据或页面返回给前台微信小程序。(3)Service:核心业务逻辑实现类,根据需求分析来对各数据进行操作。3.数据访问层:(1)DAO:数据访问接口,这里包括所有定义好的数据库操作方法接口。然后编写mapper的SQL语句最后通过Mybatis的mapper映射进行对数据库操作。(2)MemoryCache:数据层的缓冲机制,将频繁使用的数据存储在内存缓存中。这里采用redisTemplete类进行对redis操作实现。4-2系统逻辑架构4.2.2数据流程业务提交数据流程:所有业务逻辑请求都会先在Incetceptor进行权限判定,然后通过Springmvc的mapper找到相应controller进行handle,controller类会将接收到数据进行初步的处理例如去空格等,然后controller会将数据传递给service层进行逻辑处理再根据实际情况对数据进行加工或存储。而最终数据的流向一般都会流向数据库MySQL,MySQL根据相应SQL语句进行操作并根据规定返回一个返回值给Service,一般在Service设置好返回类的属性再经controller返回给前台。前台再根据规定好的JSON规范作出相应反应。4-3业务提交数据流程业务流程活动图是UML中用于表示业务实例实现的工作流程,其本质也是一种状态图,通过活动图我们可以简单明了的认识此业务提供的价值所需要完成的任务。本节用活动图来表明本小程序中部分业务的流程和运行顺序。4-4系统主要业务流程状态模型状态一般用于表述对象在生命周期所处状况,对象在生命周期必因为符合某种条件而属于其中一种状态,而状态之间是可以转换的,在UML规定的建模语言中,状态图用于对一个具体对象在其生命周期的过程进行描述,记录了其生存时的各种动态行为和状态变化。状态图一般由状态、转换、事件、活动和动作五个部分组成。使用状态图可以节省大量时间和文字描述来对对象生命周期进行描述,也让参与项目者特别是开发者对事件顺序有清晰的了解。本次小程序开发中,附带状态的类是videos类,且有转换状态的情况出现,本节将针对videos类对视频的状态转换进行分析。4-5视频状态转换过程本章小结本章主要根据软件工程规定的思想,在系统分析与设计阶段对涉及到的业务或对象进行UML建模实例,还对传统的J2EE体系结构和本次开发所使用的Spring框架进行分析和比较,具体包括对Spring框架的逻辑结构进行介绍,和对数据流向进行简要的分析。在本次UML建模和系统设计阶段,本人大量使用UML标准建模语言对系统的业务进行绘制相应的图然而这些绘制图都会展示系统的需求和发展流程从而使整个开发阶段更加生动形象和抽象。在整个UML建模工作中,有大量图可供选择,常用的有用例图、状态图、活动图等各种流程图,在分析阶段要根据分析对象和实际实现情况来决定哪种图更能体现系统的需求和发展流程。本章节采用了其中几种图形如状态图,活动图等详细地对系统用例、业务流程和系统发展流程进行分析,使后续的开发工作提供了一个清晰的依据。系统详细设计与实现数据库设计表5.1用户表字段名称字段类型字段意义是否非空是否键值默认值useridVARCHAR主键ID是主键无usernameVARCHAR用户名是否无passwordVARCHAR密码是否无face_imageVARCHAR头像路径否否无nicknameVARCHAR昵称是否无fans_countsINT粉丝数否否0follow_countsINT关注数否否0receive_like_countsINT收到的点赞否否0表4.2bgm表字段名称字段类型字段意义是否非空是否键值默认值idVARCHAR主键ID是主键无authorVARCHAR作者名字是否无nameVARCHARBgm名字是否无pathVARCHAR存放路径是否无表4.3评论表字段名称字段类型字段意义是否非空是否键值默认值idVARCHAR主键ID是主键无father_comment_idVARCHAR父评论ID否否无to_user_idVARCHAR被评论者ID否否无video_idVARCHAR视频ID是否无from_user_idVARCHAR评论者ID是否无commentTEXT评论内容是否无create_timeDATATIME评论时间是否无表4.4热搜表字段名称字段类型字段意义是否非空是否键值默认值idVARCHAR主键ID是主键无contentVARCHAR内容是否无表4.5用户-粉丝表字段名称字段类型字段意义是否非空是否键值默认值idVARCHAR主键ID是主键无user_idVARCHAR被关注者ID是否无fan_idVARCHAR关注者ID是否无表4.6用户喜欢视频表字段名称字段类型字段意义是否非空是否键值默认值idVARCHAR主键ID是主键无user_idVARCHAR用户ID是否无video_idVARCHAR视频ID是否无表4.7举报表字段名称字段类型字段意义是否非空是否键值默认值idVARCHAR主键ID是主键无deal_user_idVARCHAR被举报者ID是否无deal_video_idVARCHAR被举报视频ID是否无titleVARCHAR类型标题是否无contentVARCHAR内容否否无useridVARCHAR举报者ID是否无create_dateDATATIME举报时间是否无表4.8订单状态表字段名称字段类型字段意义是否非空是否键值默认值idVARCHAR主键ID是主键无user_idVARCHAR发布者id是否无audio_idVARCHAR用户使用音频的信息否否无video_descVARCHAR视频描述否否无video_pathVARCHAR视频存放的路径是否无video_secondsFLOAT视频秒数否否无video_widthINT视频宽度否否无video_heightINT视频高度否否无cover_pathVARCHAR视频封面图否否无like_countsBIGINT喜欢/赞美的数量是否无statusINT视频状态是否无create_timeDATATIME创建时间是否无后端接口设计本后端接口是利用Java语言实现,类与接口的组成可以参与第四章系统总体设计中4-2图所示。大致可分为pojo类、mapper接口、service类、controller类和interceptor类,另外还包括一些公共类、配置类、Springboot独特的启动类以及Swagger2类。图5.1后端结构5.2.1Pojo类Pojo类可以简单理解为简单的Java类,其一般的设置是根据数据库中的数据表来进行设计,这样就方便开发者在连接数据库后操作数据库。有需要还可以根据实际开发需要建立相应的VO。图5.2pojo类包一个pojo类一般只用于表示一个实体类的属性以及简单的set/get操作等。以下以本设计最为重要的一个pojo类Videos类进行分析。@DatapublicclassVideosimplementsSerializable{privateStringid;/**发布者id*/privateStringuserId;/**用户使用音频的信息*/privateStringaudioId;/**视频描述*/privateStringvideoDesc;/**视频存放的路径*/privateStringvideoPath;/**视频秒数*/privateDoublevideoSeconds;/**视频宽度*/privateIntegervideoWidth;/**视频高度*/privateIntegervideoHeight;/**视频封面图*/privateStringcoverPath;/**喜欢/赞美的数量*/privateLonglikeCounts;/**视频状态:1、发布成功2、禁止播放,管理员操作*/privateIntegerstatus;/**创建时间*/privateDatecreateTime;privatestaticfinallongserialVersionUID=1L;}本次在pojo类部署上采用lombok的@Data注解,该注解可以让开发者不用编写此类的get/set方法从而使代码更为简洁。5.2.2Mapper接口Mapper接口又称Dao接口,数据访问对象是一个面对对象的数据库接口。一般在此接口中定义了操作数据库的方法,再用具体实现类进行实现,但此次开发采用了Mybatis作为Dao层开发工具,则所有SQL语句都写在xml而非源码中。图5.3mapper接口包以下我选择BgmDao接口进行具体分析,在此接口中我定义所有有关数据库bgm表的方法。@Mapper@RepositorypublicinterfaceBgmDao{intdeleteByPrimaryKey(Stringid);intinsert(Bgmrecord);intinsertSelective(Bgmrecord);BgmselectByPrimaryKey(Stringid);intupdateByPrimaryKeySelective(Bgmrecord);intupdateByPrimaryKey(Bgmrecord);List<Bgm>list();BgmqueryBgmById(StringbgmId);} 而具体的SQL语句编码放在resources/mappers包下的BgmDao.xml,由于xml文件有各种配置格式以及接口方法较多,此处选择两个方法具体展示:<updateid="updateByPrimaryKey"parameterType="com.hang.hangvideosdev.pojo.Bgm">updatebgmsetauthor=#{author,jdbcType=VARCHAR},`name`=#{name,jdbcType=VARCHAR},`path`=#{path,jdbcType=VARCHAR}whereid=#{id,jdbcType=VARCHAR}</update><selectid="list"resultMap="BaseResultMap">select<includerefid="Base_Column_List"></include>frombgm</select> 在使用Mybatisxml配置方式中一定要事先配置好xml的映射关系和mybatis必备的配置文件才能正常使用mybatis操作数据库。5.2.3Service接口与具体实现类Service即服务层业务层,在此层一般用于处理业务逻辑,将多个Dao层的操作方法结合起来从而实现业务功能。一般Service层分为Service接口和具体实现类,这样设计的目的是为了提高系统扩展性。图5.4mapper接口包以下选择UserService接口进行方法分析,并将其中一个具体方法进行展示:publicinterfaceUserService{booleanqueryUsernameIsExist(Stringusername);voidsaveUser(Usersuser);UsersqueryUserForLogin(Stringusername,Stringpassword);JSONResultuploadFace(StringuserId,MultipartFile[]files,StringFILE_SPACE);JSONResultqueryUserInfo(StringuserId,StringfanId);JSONResultqueryPublisher(StringloginUserId,StringvideoId,StringpublishUserId);JSONResultsaveUserFanRelation(StringuserId,StringfanId);JSONResultdeleteUserFanRelation(StringuserId,StringfanId);JSONResultreportUser(UsersReportusersReport);}其中queryUserInfo方法是用于实现查询用户信息的:@Override@Transactional(propagation=Propagation.REQUIRED)publicJSONResultqueryUserInfo(StringuserId,StringfanId){UsersuserInfo=usersDao.queryUserInfo(userId);if(userInfo!=null){UsersVOuserVO=newUsersVO();BeanUtils.copyProperties(userInfo,userVO);StringuniqueToken=String.valueOf(redisTemplate.opsForValue().get(USER_REDIS_SESSION+":"+userId)).trim();userVO.setUserToken(uniqueToken);userVO.setFollow(usersFansDao.queryIsFollow(userId,fanId)==1?true:false);returnJSONResult.ok(userVO);}returnJSONResult.errorMsg("查询失败");}5.2.4Controller层与InterceptorController层是用于接受前端的访问请求,从而进行简单的数据处理。此层让开发设计流程更为抽象归纳。以下将选择UserController进行分析:@RestController@Api(value="用户相关业务的接口",tags={"用户相关业务的controller"})@RequestMapping("/user")publicclassUserControllerextendsBasicController{@AutowiredprivateUserServiceuserService;@ApiOperation(value="用户上传头像",notes="用户上传头像的接口")@ApiImplicitParam(name="userId",value="用户id",required=true,dataType="String",paramType="query")@PostMapping("/uploadFace")publicJSONResultuploadFace(StringuserId,@RequestParam("file")MultipartFile[]files)throwsException{if(StringUtils.isBlank(userId)){returnJSONResult.errorMsg("用户id不能为空...");}returnuserService.uploadFace(userId,files,FILE_SPACE);}}在此userController上传头像接口中首先会对前端传来的参数userId进行校准,如为空或不符合标准将直接返回错误信息而非调用userService的接口方法。Interceptor是用于在前端访问请求Controller前对访问进行一个拦截,根据相关规则进行放行或取消访问,或在返回数据时对数据进行加工。publicclassMiniInterceptorimplementsHandlerInterceptor{ @Autowired publicRedisTemplateredisTemplate; publicstaticfinalStringUSER_REDIS_SESSION="user-redis-session"; /** *拦截请求,在controller调用之前 */ @Override publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse, Objectarg2)throwsException{ StringuserId=request.getHeader("headerUserId"); StringuserToken=request.getHeader("headerUserToken"); if(StringUtils.isNotBlank(userId)&&StringUtils.isNotBlank(userToken)){ StringuniqueToken=String.valueOf(redisTemplate.opsForValue().get(USER_REDIS_SESSION+":"+userId)).trim(); if(StringUtils.isEmpty(uniqueToken)&&StringUtils.isBlank(uniqueToken)){ System.out.println("请登录..."); returnErrorResponse(response,newJSONResult().errorTokenMsg("请登录...")); returnfalse; }else{ if(!uniqueToken.equals(userToken)){ System.out.println("账号被挤出..."); returnErrorResponse(response,newJSONResult().errorTokenMsg("账号被挤出...")); returnfalse; } } }else{ System.out.println("请登录..."); returnErrorResponse(response,newJSONResult().errorTokenMsg("请登录...")); returnfalse; } /** *返回false:请求被拦截,返回 *返回true:请求OK,可以继续执行,放行 */ returntrue; }}此处对每一个请求访问对进行拦截,然后判断其请求所带的一各参数Token进行校对,若与redis数据库存的数据不一致或为空时将拦截返回相关操作信息。5.2.5Commond公共类包与相关配置类Commond包一般存放在开发过程频繁使用到的类或工具类,这样在开发的过程就能避免重复,使结构更加清晰明了。以下就以Commond包下的JSONResult类进行简要分析:publicclassJSONResult{//响应业务状态privateIntegerstatus;//响应消息privateStringmsg;//响应中的数据privateObjectdata;privateStringok; //不使用publicstaticJSONResultbuild(Integerstatus,Stringmsg,Objectdata){returnnewJSONResult(status,msg,data);}publicstaticJSONResultok(Objectdata){returnnewJSONResult(data);}publicstaticJSONResultok(){returnnewJSONResult(null);}publicstaticJSONResulterrorMsg(Stringmsg){returnnewJSONResult(500,msg,null);}publicstaticJSONResulterrorMap(Objectdata){returnnewJSONResult(501,"error",data);}publicstaticJSONResulterrorTokenMsg(Stringmsg){returnnewJSONResult(502,msg,null);}publicstaticJSONResulterrorException(Stringmsg){returnnewJSONResult(555,msg,null);}publicJSONResult(){}publicJSONResult(Integerstatus,Stringmsg,Objectdata){this.status=status;this.msg=msg;this.data=data;}publicJSONResult(Objectdata){this.status=200;this.msg="OK";this.data=data;}publicBooleanisOK(){returnthis.status==200;} ...}JSONResult类贯穿整个开发流程,它作为一个跟返回结构类,里面定义了状态码,信息和数据,并包含各种简便方法来快速填补这三个信息以便更快地传输信息予前端。另外Springboot最重要的一个配置类WebMvcConfig.java:@ConfigurationpublicclassWebMvcConfigimplementsWebMvcConfigurer{@OverridepublicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){registry.addResourceHandler("/**").addResourceLocations("classpath:/META-INF/resources/").addResourceLocations("file:D:/hang-videos-dev/");}@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(miniInterceptor()).addPathPatterns("/user/**");}@BeanpublicMiniInterceptorminiInterceptor(){returnnewMiniInterceptor();}@BeanpublicRedisTemplateredisTemplate(RedisConnectionFactoryfactory){RedisTemplate<String,String>redisTemplate=newRedisTemplate<>();redisTemplate.setConnectionFactory(factory);StringRedisSerializerstringRedisSerializer=newStringRedisSerializer();redisTemplate.setKeySerializer(stringRedisSerializer);redisTemplate.setHashKeySerializer(stringRedisSerializer);redisTemplate.setValueSerializer(stringRedisSerializer);redisTemplate.setHashValueSerializer(stringRedisSerializer);returnredisTemplate;}}这此配置类里,我们增加了资源文件并将RedisTemplate和miniInterceptor配置进Spring容器。前台设计基于微信小程序的短视频开发主要实现了用户的登录注册、短视频列表、视频详情页、个人主页等功能页面。5.3.1视频列表展示页首先一进入这个页面就会自动调用接口函数,把数据库所有的视频进行查询并通过一个长方形图片组件、圆形图片组件和文本对视频的信息、发布者头像和名字进行展示。此处采用了分页功能,具体实现在后端代码,每次调用都会返回五个视频信息。图5.5视频展示页在此页面点击大封面页面,会跳转到视频详情页。在展示完五个视频后继续往下来会重新发起请求,若展示完全部视频则会提示没有其他视频了。图5.6视频展示页底部5.3.2视频列表展示页视频列表展示页会展示视频本身,左边中部有一个星型作为收藏按钮,一个聊天框作为评论按钮,再者是表示其他按钮。再往下展示视频发布者的名字和视频关键字信息。底部由一个主页和个人信息跳转按钮。顶部有一个摄像机图片,和一个搜索按钮组件组成。图5.7视频详情页在这个页面观赏短视频,并根据用户的需求点击相应的按钮作出相应的请求。5.3.3个人信息展示页首先一进入这个页面就会自动调用接口函数,请求该用户的所有信息,并该用户的信息进行展示。其中有一个问题,就是要判断当前使用用户是否与所要展示用户为同一用户,若是同一用户则如图5.8所示,若不是则为图5.9所示。图5.8个人信息页面图5.9他人信息页面决定展示个人信息页面还是他人展示页面由一个变量isMe进行决定。具体部分实现代码为:<blockwx:if="{{isMe}}"><buttonsize='mini'class='primary'bindtap='uploadVideo'>上传作品</button><buttonsize='mini'type=''class='logout'bindtap='logout'>注销</button></block><blockwx:if="{{!isMe}}"><blockwx:if="{{isFollow}}"><buttonsize='mini'type=''class='follow'data-followType='0'bindtap='followMe'>已关注</button></block><blockwx:if="{{!isFollow}}"><buttonsize='mini'type='primary'class='follow'data-followType='1'bindtap='followMe'>关注我</button></block>5.3.3登录注册页面在此页面用户可以直接输入账号密码进行登录,若没有注册过则可以点击注册按钮进行用户注册。而每一个用户的密码在注册时都会在后端代码进行MD5加密。图5.10登录页面图5.11注册页面6结论随着通讯行业5G新时代的普及和互联网的快速发展,短视频行业的发展只会越来越好,再加如今短视频已经
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中菲机械制造与维修服务合同
- 2025型材购销合同书范本
- 2025建设用地使用权出让合同样本
- 2025吊车租赁合同(台班版)
- 9.1《日益完善的法律体系》- 课件 2024-2025学年统编版道德与法治七年级下册
- 2025商业房产租赁合同
- 《高血压自我管理手册》课件
- 六年级思想品德下册 中国人民站起来了教学设计 泰山版
- 《癌痛疼痛治疗方案》课件
- 新质生产力局长
- DB65T 8020-2024 房屋建筑与市政基础设施工程施工现场从业人员配备标准
- 酒店餐饮销售培训
- 情报信息发布规范
- 无卤阻燃剂知识培训课件
- DB42∕T 1496-2019 公路边坡监测技术规程
- 2025-2030年中国小麦加工产业运行动态及发展可行性分析报告
- 乾坤未定皆有可能-2025届高三百日誓师班会课件
- 2025年山西汾西矿业集团公司招聘笔试参考题库含答案解析
- 2024年度英语课件容貌焦虑
- 神经外科质量与安全管理工作计划
- 城市违建拆除施工方案
评论
0/150
提交评论