《基于Java的短視頻小程序系統(tǒng)的設(shè)計(jì)》13000字(論文)_第1頁
《基于Java的短視頻小程序系統(tǒng)的設(shè)計(jì)》13000字(論文)_第2頁
《基于Java的短視頻小程序系統(tǒng)的設(shè)計(jì)》13000字(論文)_第3頁
《基于Java的短視頻小程序系統(tǒng)的設(shè)計(jì)》13000字(論文)_第4頁
《基于Java的短視頻小程序系統(tǒng)的設(shè)計(jì)》13000字(論文)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

基于Java的短視頻小程序系統(tǒng)的設(shè)計(jì)摘要隨著移動通信和網(wǎng)絡(luò)設(shè)備的日益發(fā)展和普及,通過智能手機(jī)等便攜式移動設(shè)備進(jìn)行咨詢信息的使用者人群己經(jīng)遠(yuǎn)遠(yuǎn)多于了傳統(tǒng)的報(bào)紙、電視、廣播,乃至是計(jì)算機(jī)用戶。在這樣的時(shí)代環(huán)境下,短視頻逐漸發(fā)展成為主流并在國內(nèi)也得到了快速的發(fā)展,也逐漸成為繼文字、圖片之后在社交平臺上出現(xiàn)的新的信息承載方式。本篇論文是通過JavaWeb技術(shù)及其相關(guān)框架進(jìn)行開發(fā)“短視頻微信小程序”,從而更深入的了解和探討有關(guān)短視頻方向的基本需求和發(fā)展趨勢。在開發(fā)過程中采用了建立動態(tài)網(wǎng)站的幾種主要技術(shù)和框架,如Spring、Springboot、Mybatis、SpringMVC等。在基于以上幾種框架與技術(shù)來進(jìn)行在短視頻微信小程序的開發(fā)和設(shè)計(jì)中,主要研究了有關(guān)短視頻觀看的需求分析,后臺管理系統(tǒng)的主要功能需求。本次“短視頻微信小程序”的總體思路是根據(jù)需求分析進(jìn)行角色確立以及類的確立,之后再根據(jù)角色與類對后臺系統(tǒng)的數(shù)據(jù)庫及表乃至類型進(jìn)行分析與設(shè)計(jì),完成數(shù)據(jù)庫工作之后用Java語言進(jìn)行各類、各服務(wù)接口的編寫,最終再將微信小程序的前臺和后臺兩大部分進(jìn)行結(jié)合。此次的開發(fā)主要實(shí)現(xiàn)了短視頻軟件的基本功能如短視頻觀看、點(diǎn)贊、評論、轉(zhuǎn)發(fā)、舉報(bào)功能、用戶之間的關(guān)注以及后臺管理對短視頻進(jìn)行管理等功能。本次開發(fā)系統(tǒng)的過程符合遵循軟件工程基本開發(fā)流程和原理,采用J2EE技術(shù)常用的MVC與三層結(jié)構(gòu)即Model模型、View視圖和Controller控制器,使用了市面上較為流行和普遍使用的SSM架構(gòu)即Spring、SpringMVC、Mybatis以及Springboot框架,其中Springmvc負(fù)責(zé)實(shí)現(xiàn)Web應(yīng)用程序等功能,Spring容器負(fù)責(zé)實(shí)現(xiàn)各類的生命周期以及依賴等功能,而本次的數(shù)據(jù)交互層選擇采用Mybatis框架進(jìn)行與數(shù)據(jù)庫的連接。關(guān)鍵字短視頻;微信小程序;J2EE;Spring;Myabits目錄1 前言 11.1課題研究背景 11.2研究方法 21.3研究目的與意義 22 開發(fā)環(huán)境及工具 42.1 開發(fā)工具簡介 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 本章小結(jié) 63 需求分析 83.1系統(tǒng)需求概述 83.2系統(tǒng)非功能性要求 93.3本章小結(jié) 94 系統(tǒng)總體設(shè)計(jì) 114.1 UML建模 114.2 體系結(jié)構(gòu) 114.2.1 邏輯結(jié)構(gòu) 134.2.2 數(shù)據(jù)流程 144.3 業(yè)務(wù)流程 124.4 狀態(tài)模型 124.5 本章小結(jié) 125系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 165.1前臺功能模塊實(shí)現(xiàn) 165.1.1實(shí)現(xiàn)注冊登錄 165.1.2實(shí)現(xiàn)短視頻列表 205.1.3實(shí)現(xiàn)短視頻詳情頁 225.1.4實(shí)現(xiàn)用戶頁面 245.2數(shù)據(jù)庫設(shè)計(jì) 286系統(tǒng)測試 307結(jié)論 30參考文獻(xiàn) 31前言1.1課題研究背景短視頻行業(yè)在我國的發(fā)展可謂是如日方升。以智能手機(jī)為主的移動終端為基礎(chǔ)的短視頻APP以及網(wǎng)站在我國已經(jīng)有近十年的發(fā)展歷史。這一十年被社會大眾稱為“新時(shí)代風(fēng)口”。短視頻的“短”一般表示視頻時(shí)間不超過五分鐘,這樣的視頻滿足用戶處理碎片時(shí)間問題。在此基礎(chǔ)上,短視頻行業(yè)的各大企業(yè)都致力于數(shù)據(jù)收集以及算法分析,并最終推算出符合用戶大致口味的短視頻,這使得用戶對短視頻的熱衷程度和依賴程度越來越深。而用戶本身可以使用有攝像功能的智能手機(jī)進(jìn)行視頻拍攝并在拍攝后進(jìn)行簡單的剪輯和加工,在滿足普通視頻創(chuàng)作和有關(guān)短視頻平臺規(guī)范后隨時(shí)可以上傳到短視頻平臺。此外,短視頻無論在短視頻平臺還是在各大流行社交平臺都可以進(jìn)行分享和觀察。與傳統(tǒng)的單一表達(dá)形式如圖片、文字和音頻相比,短視頻的優(yōu)勢體現(xiàn)在是能將視覺和聽覺結(jié)合起來,在短時(shí)間內(nèi)滿足用戶的體驗(yàn),形成傳統(tǒng)表達(dá)形式不可比的感官刺激。這無疑使得短視頻成為當(dāng)下社會最為吸引年輕人眼球的媒介。通過對各個短視頻平臺進(jìn)行市場滲透率的計(jì)算,可以看出市場滲透率,排位最靠前的分別為快手,火山小視頻,西瓜視頻。計(jì)算市場滲透率同比增幅,可以看出抖音短視頻的市場滲透率同比增幅比其他短視頻平臺要高。其中西瓜視頻的市場滲透率,同比增幅在240%左右。同時(shí)抖音短視頻均值同比增幅,呈現(xiàn)出比較顯著的成績。短視頻的本質(zhì)上有較高的應(yīng)用性,一方面有較高的理論價(jià)值,另一方面也有較高的實(shí)踐意義,所以本篇文章的側(cè)重點(diǎn)是對短視頻部分功能進(jìn)行研究和分析,除了查閱大量的參考文獻(xiàn)之外結(jié)合自己所學(xué)的開發(fā)技術(shù),對此小程序進(jìn)行設(shè)計(jì)與開發(fā),使自身對開發(fā)相關(guān)的理論以及當(dāng)下短視頻現(xiàn)狀更加深入淺出,對短視頻的發(fā)展趨勢的發(fā)展具有參考性和可操作性。1.2系統(tǒng)的研究現(xiàn)狀本課題的選取是基于目前我國互聯(lián)網(wǎng)行業(yè)迅速發(fā)展勢頭良好的大環(huán)境下短視頻行業(yè)存在于繼續(xù)發(fā)展的必然性和必要性。在我國大市場下,短視頻已經(jīng)走過了四個階段分別是準(zhǔn)備期、轉(zhuǎn)型期、高速發(fā)展期、到現(xiàn)在的穩(wěn)定期。在準(zhǔn)備期之時(shí),智能手機(jī)、wifi和3G網(wǎng)絡(luò)的普及讓秒拍、美拍等短視頻行業(yè)開始出現(xiàn)。隨著網(wǎng)絡(luò)設(shè)備基礎(chǔ)設(shè)施不斷發(fā)展完善,4G網(wǎng)絡(luò)的出現(xiàn)讓各大短視頻平臺開始分發(fā)渠道多元化。在高速發(fā)展期,字節(jié)跳動推出西瓜視頻和抖音短視頻,并靠成熟的智能算法吸引了市場上絕大用戶迅速占領(lǐng)了風(fēng)口,許多互聯(lián)網(wǎng)大廠都開始在短視頻領(lǐng)域開始布局,因此短視頻行業(yè)在這個階段得到了迅速發(fā)展。在經(jīng)過一兩年的沉淀后,短視頻市場進(jìn)入了穩(wěn)定格局,很多短視頻公司進(jìn)行業(yè)務(wù)拓展、探索更多元化和深層次商業(yè)模式更有甚者開始布局海外市場并取得了較好的效果。近三年來,國內(nèi)市場基本已成定局,海外發(fā)展成為短視頻企業(yè)另謀出路獲取更大利益的最好選擇,熱門巨頭快手和字節(jié)跳動最典型的企業(yè)代表。兩家企業(yè)在海外擴(kuò)展都分別獲得不俗的成績,在美國、印度等地都出臺了相應(yīng)APP提供給海外用戶,盡管在2020年8月,TikTop海外版遭到了美國政客的威脅并被美國政府要求關(guān)閉出售業(yè)務(wù)。由于短視頻上傳機(jī)制、入門門檻低和自我審查機(jī)制少,因此在快速發(fā)展的過程中,大量不良低俗低級、虛假信息、涉嫌抄襲和侵犯版權(quán)的短視頻冒出水面。隨著問題暴露愈發(fā)嚴(yán)重,我國相關(guān)監(jiān)管部門開始對短視頻進(jìn)行相關(guān)監(jiān)管和制定相關(guān)法律工作。在開發(fā)技術(shù)現(xiàn)狀上,Java語言悠久的發(fā)展歷史讓其在當(dāng)下開發(fā)語言中仍有一席之地,Java語言當(dāng)前最新版本是JDK15,已經(jīng)推出了較多新特性,Java無論在網(wǎng)絡(luò)編程,數(shù)據(jù)庫操作還是類、方法的封裝都有強(qiáng)大的功能,這使得部分開發(fā)人員更青睞于Java開發(fā)。而SpringBoot的發(fā)展從2014年出現(xiàn)在人們眼球吸引了大量開源愛好者參與研究和開發(fā)到現(xiàn)在已經(jīng)發(fā)展了七個年頭。根據(jù)網(wǎng)上資料顯示,SpringBoot在美國和中國的整體使用頻率保持一致。社區(qū)對SpringBoot的熱情也讓Spring官方更加注重的SpringBoot框架的穩(wěn)定和發(fā)展。1.3研究目的與意義課題在結(jié)束研究之后,想要達(dá)到的基本要求有:1.實(shí)現(xiàn)小程序的核心功能:用戶注冊登錄注銷、用戶上傳頭像、查看用戶信息、觀看短視頻、用戶上傳短視頻相關(guān)操作、通過關(guān)鍵字搜索相關(guān)視頻、用戶與用戶間的關(guān)注、用戶與視頻間的點(diǎn)贊收藏與舉報(bào)功能、管理員上傳BGM、管理員對用戶的操作與管理等功能;2.為用戶提供短視頻的觀看或收藏下載功能。因?yàn)榧谝粭l所述的眾多功能,平臺的所有操作流程都梳理明確,實(shí)現(xiàn)過程都能一步到位的,并且在每個環(huán)節(jié)都有相當(dāng)嚴(yán)格的規(guī)范化設(shè)置;3.全面直觀的了解短視頻的信息以及用戶情況,實(shí)時(shí)都能一目了然的知道用戶和視頻的相關(guān)信息,可以查看到用戶對哪類視頻偏愛或違規(guī)視頻;4.最終的要求希望所研究的課題能夠落實(shí)到真實(shí)的生活當(dāng)中,開發(fā)的短視頻平臺不僅能夠?yàn)橛脩籼峁┍憷屵@個平臺在被用戶能夠在使用過后仍能被堅(jiān)持,擁有長期的良好信譽(yù)和安全支撐。開發(fā)環(huán)境及工具開發(fā)工具簡介2.1.1JDK簡介JDK是Javadevelopmentkit,官方解釋為Java標(biāo)準(zhǔn)版開發(fā)包,也就是Java開發(fā)所需要的工具包。JVM、JRE和JDK是Java三大概念。JVM即JavaVirtualMachine,Java虛擬機(jī)是一個虛構(gòu)的計(jì)算機(jī),其廣義作用是在真實(shí)的計(jì)算機(jī)上模擬實(shí)現(xiàn)計(jì)算機(jī)的各種功能。此外,Java虛擬機(jī)有著其較為獨(dú)特完善的硬件結(jié)構(gòu)如處理器、堆棧、寄存器和指令系統(tǒng)等。作用實(shí)現(xiàn)具體體現(xiàn)在JVM作為Java字節(jié)碼的執(zhí)行引擎,可以根據(jù)獨(dú)特的規(guī)則優(yōu)化class字節(jié)碼文件并轉(zhuǎn)化為效率更高的機(jī)器指令。雙親委派機(jī)制是JVM進(jìn)行類裝載的重要機(jī)制,由類加載器與其子類進(jìn)行實(shí)現(xiàn)。Bootstrap類加載器:主要負(fù)責(zé)加載Java的核心類庫如lang包等;Ext類加載器:負(fù)責(zé)加載部分?jǐn)U展的jar,一般是指在jre/lib/ext目錄下的;App類加載器:負(fù)責(zé)加載應(yīng)用程序的主函數(shù)類。JVM在這三者關(guān)系中處于最底層,負(fù)責(zé)與需要運(yùn)行的操作系統(tǒng)進(jìn)行交互。而有關(guān)Java的跨平臺性主要體現(xiàn)在JVM,因?yàn)椴煌牟僮飨到y(tǒng)對應(yīng)著不同的JVM。JRE即JavaRuntimeenvironment從底層來說是一個軟件,包含了Java虛擬機(jī)和與Java相關(guān)的基礎(chǔ)類庫。而JDK作為三者的最高層,包含了JRE與其相關(guān)的開發(fā)、監(jiān)控和分析工具如用于編譯Java源碼的編譯器javac、用于監(jiān)控程序運(yùn)行情況的監(jiān)控工具jconsole、以及用于分析的工具jvisualvm等。2.1.2MySQL簡介MySQL是一個開源的關(guān)系型數(shù)據(jù)庫,被廣泛地應(yīng)用在互聯(lián)網(wǎng)開發(fā)中。其中不乏很多大型互聯(lián)網(wǎng)公司選擇將主線業(yè)務(wù)部署到MySQL中,更多的中小型網(wǎng)站更是青睞于其微乎其微的成本、體積小速度快成本低、有不同的存儲引擎對應(yīng)不同的存儲模式,開源和簡單易用等特點(diǎn),而選擇MySQL作為網(wǎng)站開發(fā)時(shí)的數(shù)據(jù)庫,因而在保證功能實(shí)現(xiàn)且運(yùn)行穩(wěn)定的基礎(chǔ)上節(jié)省了開發(fā)成本。2.1.3Tomcat簡介Tomcat服務(wù)器是一個用于部署JSP和Servlet的Web應(yīng)用服務(wù)器,是目前各企業(yè)較為流行使用的一個輕量級服務(wù)器,在中小型系統(tǒng)和低并發(fā)、訪問量不大的系統(tǒng)被普遍使用。Tomcat服務(wù)器具有技術(shù)先進(jìn),性能穩(wěn)定,開源免費(fèi)等特點(diǎn),是目前學(xué)習(xí)與開發(fā)JavaWeb應(yīng)用程序的首選,所以本次服務(wù)器部署采用Tomcat服務(wù)器。2.1.4Spring簡介Spring是一個開源框架,是為了解決由于軟件開發(fā)的復(fù)雜性問題如耦合度高,可維護(hù)性低。主要是利用最基本的JavaBean來完成未開發(fā)前只可以使用EJB完成的功能。Spring的作用不僅僅體現(xiàn)在服務(wù)端的開發(fā),更讓大部分Java程序受益的是,Spring讓Java程序變得更為簡潔易懂,提高了可測試性,大幅降低了耦合度。Spring簡單來說就是一個用于創(chuàng)建對象容器實(shí)現(xiàn)了創(chuàng)建到反射的過程,用戶可以把對象的創(chuàng)建、管理和維護(hù)對象的狀態(tài)以及各對象的依賴關(guān)系交予Spring容器。Spring最重要兩個思想是IOC和AOP,IOC即控制反轉(zhuǎn),這是一種促進(jìn)松耦合的技術(shù)思想。一個對象依賴其他對象們時(shí),其他對象們并不是由原對象進(jìn)行創(chuàng)建或查詢依賴,而是會通過被動傳遞的方式傳遞給原對象。AOP即面向切面編程,在我們的日常開發(fā)中,會出現(xiàn)大量重復(fù)編寫但與業(yè)務(wù)邏輯無關(guān)的代碼,而Spring提供了一個很好的支持去分離應(yīng)用業(yè)務(wù)邏輯和系統(tǒng)級服務(wù)如權(quán)限判斷和事務(wù)管理等。這樣子實(shí)現(xiàn)后,應(yīng)用對象就可以只負(fù)責(zé)解決業(yè)務(wù)邏輯問題,它們并不負(fù)責(zé)甚至意識不到其他的系統(tǒng)關(guān)注點(diǎn)如日志系統(tǒng)。2.1.5JDBC簡介JDBC,JavaDataBaseConnectivity,java數(shù)據(jù)庫連接,是Java連接市面上流行數(shù)據(jù)庫的一種準(zhǔn)則,可以通過Java的接口執(zhí)行數(shù)據(jù)庫的SQL語句,由一系列的Java接口和類組合而成,為多種數(shù)據(jù)庫提供統(tǒng)一訪問服務(wù)。它與Java結(jié)合使用功能穩(wěn)健簡潔,也使得像本系統(tǒng)這種類似于短視頻的用戶服務(wù)和視頻服務(wù)能夠擁有更好的獲取信息的方法。2.1.6SpringBoot簡介SpringBoot是在Spring框架的基礎(chǔ)上功能更為強(qiáng)大,開發(fā)更為簡便的全新框架。從本質(zhì)上來講,SpringBoot其實(shí)是部分庫的集合,大部分項(xiàng)目的構(gòu)建系統(tǒng)都可以使用SpringBoot。與常規(guī)的Spring框架相比,最大的不同點(diǎn)是SpringBoot內(nèi)嵌了Tomcat服務(wù)器或Jetty服務(wù)器,可以基于Maven等其他插件,創(chuàng)建獨(dú)立的Spring應(yīng)用程序或可執(zhí)行的JARs和WARs,而非手動部署到服務(wù)器。SpringBoot提供了一個yml文件用于確定各對象屬性的值,這使得開發(fā)和后續(xù)維護(hù),修改更為便利。SpringBoot也是有兩個較為重要的思想,第一個是OutOfBox即開箱即用,指的是在我們開發(fā)過程中,管理對象的生命周期首先要通過MAVEN的pom.xml文件填寫所需要依賴的jar包再在相應(yīng)引用的地方用注解代替煩瑣的xml配置文件。這使得開發(fā)工作可以更加專注在業(yè)務(wù)邏輯代碼的編寫上而非復(fù)雜的配置工作和依賴的管理。第二個是約定優(yōu)于配置,意思是由SpringBoot框架來決定目標(biāo)結(jié)構(gòu),然后開發(fā)者在此結(jié)構(gòu)基礎(chǔ)上增加額外的信息的軟件設(shè)計(jì)范式。2.1.7Mybatis簡介MyBatis本是apache的一個開源項(xiàng)目iBatis。在傳統(tǒng)的JDBC連接數(shù)據(jù)庫時(shí),需要用戶編寫大量有關(guān)類,注冊驅(qū)動、創(chuàng)建connection和statement、配置連接相關(guān)的參數(shù)、結(jié)果集封裝和檢索等大量重復(fù)的工作。而Mybatis正是為了解決這種繁瑣的情況,更好地讓開發(fā)者專注于SQL語句的編寫從而封裝了JDBC操作數(shù)據(jù)庫的方法和過程。Mybatis的出現(xiàn)幾乎讓開發(fā)者把所有JDBC相關(guān)代碼和參數(shù)配置工作從開發(fā)工作中消除。Mybatis有兩種方式進(jìn)行執(zhí)行各操作,xml配置和注解方式。Xml配置是最為常見的,我們在配置文件里對Java的POJOs和接口映射成數(shù)據(jù)庫的表和字段,并在mapper文件對各SQL語句進(jìn)行編寫。Mybatis應(yīng)用程序生成的流程大致是,從一個xml配置文件中或一個預(yù)定配置類生成SqlSessionFactoryBuilder,再讓SqlSessionFactoryBuilder實(shí)例化SqlSessionFactory,最終由SqlSessionFactory工廠模式進(jìn)行實(shí)例化Mybatis應(yīng)用。如果市面上已經(jīng)出現(xiàn)大量的Mybatis自動生成配置文件的免費(fèi)插件,這使得我們在開發(fā)過程更加簡便,從而更專注于SQL語句的編寫,達(dá)到了對SQL和程序編碼的解耦。2.1.8Redis簡介redis是一個由C語言編寫的高性能NoSQL系列的非關(guān)系型數(shù)據(jù)庫。而非關(guān)系型數(shù)據(jù)庫在如今較為流行的有Memcached和redis,兩者相似之處是它們都支持多種存儲類型,任何一種存儲類型都是以key-value的形式進(jìn)行存儲。存儲類型包括String字符串、List鏈表、Set集合、Zset有序集合和Hash哈希。針對這些數(shù)據(jù)類型redis對它們都有各自獨(dú)特的操作,常用常見的有String的set/get、List的LPOP/LPUSHRPOP/RPUSH、Set的Sadd/SPOP、Zset的ZADD/ZREM和Hash的HSET和HDEL等此外還包括數(shù)學(xué)集合的運(yùn)算如取交集并集和差集。任何Redis對數(shù)據(jù)類型的操作都是原子性的,但其事務(wù)不包括回滾性和原子性。Redis之所以高性能是因?yàn)樗鷐emcached一樣,數(shù)據(jù)都是緩存在內(nèi)存當(dāng)中,存取效率非常快。跟Memcached不同的是redis有兩種持久化方式,會定時(shí)周期的把數(shù)據(jù)寫入磁盤,AOF和RDB,在此之上redis還實(shí)現(xiàn)了主從復(fù)制和哨兵模式。本章小結(jié)本章講解本次小程序系統(tǒng)的技術(shù)要求,主要是將制作本系統(tǒng)使用到的工具:JDK、MySQL、Tomcat、Redis、Spring、Springboot等技術(shù)和框架作了概述,同時(shí)對支持小程序技術(shù)的相關(guān)技術(shù)—JDBC和Mybatis作了詳細(xì)地講解,下一步系統(tǒng)將使用這些技術(shù)對系統(tǒng)做全面的開發(fā),本章為下面的開發(fā)及測試提供了鋪墊。需求分析系統(tǒng)需求概述隨著現(xiàn)代社會互聯(lián)網(wǎng)的迅速發(fā)展,越來越多的人熱愛短視頻。許多手機(jī)使用者為有利用短視頻填補(bǔ)空閑時(shí)間,也有通過短視頻在短時(shí)間內(nèi)獲取有用信息,但是也有用戶投入大量精力和時(shí)間的情況出現(xiàn),所以針對出現(xiàn)的這種狀況,要采取合適的短視頻平臺系統(tǒng)。因此設(shè)計(jì)合適參與角色能更好的幫助用戶管理和利用好短視頻。本系統(tǒng)的實(shí)現(xiàn)流程如圖3-1。3-1系統(tǒng)實(shí)現(xiàn)流程圖此處的系統(tǒng)功能性模塊主要依據(jù)使用者的區(qū)別進(jìn)行相關(guān)分配。3-2系統(tǒng)具體模塊圖它們各自的功能如下所述:前臺部分前臺部分主要包括一下幾個方面,用戶的注冊登錄注銷,修改信息,用戶瀏覽所有短視頻,評論短視頻,點(diǎn)贊或收藏短視頻,上傳短視頻,關(guān)注其他用戶,舉報(bào)短視頻和通過關(guān)鍵字瀏覽短視頻等。這里的使用對象主要是用戶。首先用戶可以方便地注冊和登錄。若還未注冊的顧客只能進(jìn)行短視頻的瀏覽,不能進(jìn)行用戶間的交互和與視頻的交互;未注冊的用戶可進(jìn)入注冊頁面進(jìn)行注冊,然后可以進(jìn)行到個人頁面進(jìn)行信息確定,頭像上傳等。用戶可以地靈活的通過關(guān)鍵字對偏愛的短視頻進(jìn)行搜索瀏覽。用戶可以在瀏覽短視頻頁面查看視頻發(fā)布者信息,對視頻進(jìn)行點(diǎn)贊,對視頻進(jìn)行收藏,對視頻進(jìn)行評論和對視頻進(jìn)行舉報(bào)等。用戶還可以關(guān)注其他用戶,以便在關(guān)注頁面觀看關(guān)注者所發(fā)布的視頻。(2)后臺部分后臺部分,管理員必須登錄才能進(jìn)行管理。管理員可以對系統(tǒng)進(jìn)行相應(yīng)的操作。管理員可以查看所有用戶信息。管理員可以對bgm進(jìn)行上傳。管理員可以查看所有視頻信息,也可查看被舉報(bào)視頻并進(jìn)行禁播操作。系統(tǒng)非功能性要求一個成熟軟件產(chǎn)品除了滿足用戶的功能性需求更應(yīng)該注重非功能性的需求。在開發(fā)過程中,開發(fā)者常常輕視甚至忽視一個軟件產(chǎn)品的非功能性需求這一重要方面。系統(tǒng)非功能性需求一般不會出現(xiàn)用戶的業(yè)務(wù)需求中,需要專業(yè)的分析人員根據(jù)實(shí)現(xiàn)溝通好的邏輯業(yè)務(wù)需求進(jìn)行調(diào)研等相關(guān)工作,系統(tǒng)非功能需求在某種程度上也可以決定一個軟件產(chǎn)品的適用與否。如果一個軟件單單滿足功能性需求而在非功能性需求方面沒有進(jìn)行規(guī)范的定義和實(shí)現(xiàn),結(jié)果一般都不會令人滿意,使得產(chǎn)品在實(shí)際應(yīng)用中錯漏百出甚至喪失了滿足系統(tǒng)的功能性需求的能力。我們一般常說的非功能性需求是指軟件產(chǎn)品為滿足用戶業(yè)務(wù)需求而必須具有的、除功能需求以外的特性。其中有幾個較為重要的參考指數(shù)分別是UI、易用性需求、安全性需求、系統(tǒng)完整性需求、可維護(hù)性和可擴(kuò)充性等。本次系統(tǒng)主要從安全、性能、可維護(hù)性、用戶體驗(yàn)和成本預(yù)算方面出發(fā)對非功能性需求進(jìn)行分析和實(shí)現(xiàn)。安全能夠防止SQL數(shù)據(jù)庫注入式攻擊能夠防止腳本源代碼泄露性能使用緩存等技術(shù)提供訪問速度??删S護(hù)性使用Swagger2可快速查看接口信息并測試,以便維護(hù)。事先評估可變因素,并盡量將可預(yù)估的可變參數(shù)實(shí)現(xiàn)可配置化,從而減少更改源代碼的頻率。用戶體驗(yàn)易操作,頁面設(shè)計(jì)較為簡單而實(shí)用。成本預(yù)算大量使用市面上較流行有技術(shù)保證的開源免費(fèi)技術(shù)從而減少開發(fā)成本。優(yōu)化系統(tǒng)后期運(yùn)維方式,減少運(yùn)維人力成本。本章小結(jié)本章主要介紹了系統(tǒng)功能要求和系統(tǒng)非功能性要求,系統(tǒng)功能性要求包括前臺部分和后臺部分,系統(tǒng)非功能性要求主要包括安全、性能、可維護(hù)性、用戶體驗(yàn)和成本預(yù)算。系統(tǒng)總體設(shè)計(jì)UML建模隨著面向?qū)ο缶幊痰目焖侔l(fā)展,在開發(fā)上逐漸代替了面向過程編程。為了方便開發(fā)系統(tǒng),加強(qiáng)對問題的分析,讓各方人員更好的針對系統(tǒng)進(jìn)行討論和統(tǒng)一確定需求,UML建模技術(shù)應(yīng)時(shí)而生,UML是整個軟件產(chǎn)品開發(fā)中一種圖形化建模語言,為使用者提供了多種圖形模型來構(gòu)建系統(tǒng)可視化模型,成為了當(dāng)今面向?qū)ο缶幊滩豢扇鄙俚囊徊糠?。體系結(jié)構(gòu)RobJohnson在其著名作《ExpertOne-on-OneJ2EEDesignandDevelopment》中提到,傳統(tǒng)的J2EE架構(gòu)為確定web應(yīng)用與部署web應(yīng)用的服務(wù)器之間的通訊方式規(guī)定了一組編程接口,這組接口主要是針對web服務(wù)和業(yè)務(wù)對象等的一組規(guī)范。J2EE主要功能實(shí)現(xiàn)體現(xiàn)在建立一個web服務(wù)和服務(wù)器無關(guān)的標(biāo)準(zhǔn)以及讓服務(wù)器為了更便利地處理事務(wù)和高并發(fā)訪問量等問題從而讓服務(wù)器掌控控件的生命周期。J2EE定義了四個獨(dú)立邏輯層,分別是客戶層、表示層、業(yè)務(wù)層以及系統(tǒng)層。然而這種體系架構(gòu)在開發(fā)、測試、性能和維護(hù)過程的表現(xiàn)實(shí)在令人失望,EJB在當(dāng)今開發(fā)意味著低性能、難維護(hù)、開發(fā)繁瑣和維護(hù)成本高。這種種現(xiàn)象表示傳統(tǒng)的J2EE架構(gòu)已有違背了“帕累托法則”的跡象。說明了使用J2EE體系結(jié)構(gòu)會花費(fèi)大量時(shí)間精力去解決少數(shù)出現(xiàn)的復(fù)雜問題而非用于為解決常見的問題作出方案。從這本書當(dāng)中也誕生了著名的springframework也就是我們本次開發(fā)使用的spring框架。Spring框架與J2EE架構(gòu)并非對立關(guān)系。Spring中也有大量使用和體現(xiàn)了J2EE的標(biāo)準(zhǔn)。比如Spring-mvc是在servlet之上的封裝。Springdata也實(shí)現(xiàn)了JPA等。4.2.1邏輯結(jié)構(gòu)1.UI層: 微信小程序:利用微信小程序獨(dú)特的語言將頁面和數(shù)據(jù)返回給用戶。2.業(yè)務(wù)邏輯層:(1)Interceptor:攔截所有業(yè)務(wù)調(diào)用請求,根據(jù)事先規(guī)定和編寫好的Interceptor類對所有業(yè)務(wù)調(diào)用請求進(jìn)行邏輯處理如權(quán)限驗(yàn)證,加載日志等或在數(shù)據(jù)返回給前端等情況進(jìn)行攔截對數(shù)據(jù)進(jìn)行加工。采用Spring-web的規(guī)范實(shí)現(xiàn)。(2)Controller:接收用戶的訪問請求,先在類本身進(jìn)行參數(shù)處理然后調(diào)用業(yè)務(wù)邏輯層Service得到返回信息,并將數(shù)據(jù)或頁面返回給前臺微信小程序。(3)Service:核心業(yè)務(wù)邏輯實(shí)現(xiàn)類,根據(jù)需求分析來對各數(shù)據(jù)進(jìn)行操作。3.數(shù)據(jù)訪問層:(1)DAO:數(shù)據(jù)訪問接口,這里包括所有定義好的數(shù)據(jù)庫操作方法接口。然后編寫mapper的SQL語句最后通過Mybatis的mapper映射進(jìn)行對數(shù)據(jù)庫操作。(2)MemoryCache:數(shù)據(jù)層的緩沖機(jī)制,將頻繁使用的數(shù)據(jù)存儲在內(nèi)存緩存中。這里采用redisTemplete類進(jìn)行對redis操作實(shí)現(xiàn)。4-2系統(tǒng)邏輯架構(gòu)4.2.2數(shù)據(jù)流程業(yè)務(wù)提交數(shù)據(jù)流程:所有業(yè)務(wù)邏輯請求都會先在Incetceptor進(jìn)行權(quán)限判定,然后通過Springmvc的mapper找到相應(yīng)controller進(jìn)行handle,controller類會將接收到數(shù)據(jù)進(jìn)行初步的處理例如去空格等,然后controller會將數(shù)據(jù)傳遞給service層進(jìn)行邏輯處理再根據(jù)實(shí)際情況對數(shù)據(jù)進(jìn)行加工或存儲。而最終數(shù)據(jù)的流向一般都會流向數(shù)據(jù)庫MySQL,MySQL根據(jù)相應(yīng)SQL語句進(jìn)行操作并根據(jù)規(guī)定返回一個返回值給Service,一般在Service設(shè)置好返回類的屬性再經(jīng)controller返回給前臺。前臺再根據(jù)規(guī)定好的JSON規(guī)范作出相應(yīng)反應(yīng)。4-3業(yè)務(wù)提交數(shù)據(jù)流程業(yè)務(wù)流程活動圖是UML中用于表示業(yè)務(wù)實(shí)例實(shí)現(xiàn)的工作流程,其本質(zhì)也是一種狀態(tài)圖,通過活動圖我們可以簡單明了的認(rèn)識此業(yè)務(wù)提供的價(jià)值所需要完成的任務(wù)。本節(jié)用活動圖來表明本小程序中部分業(yè)務(wù)的流程和運(yùn)行順序。4-4系統(tǒng)主要業(yè)務(wù)流程狀態(tài)模型狀態(tài)一般用于表述對象在生命周期所處狀況,對象在生命周期必因?yàn)榉夏撤N條件而屬于其中一種狀態(tài),而狀態(tài)之間是可以轉(zhuǎn)換的,在UML規(guī)定的建模語言中,狀態(tài)圖用于對一個具體對象在其生命周期的過程進(jìn)行描述,記錄了其生存時(shí)的各種動態(tài)行為和狀態(tài)變化。狀態(tài)圖一般由狀態(tài)、轉(zhuǎn)換、事件、活動和動作五個部分組成。使用狀態(tài)圖可以節(jié)省大量時(shí)間和文字描述來對對象生命周期進(jìn)行描述,也讓參與項(xiàng)目者特別是開發(fā)者對事件順序有清晰的了解。本次小程序開發(fā)中,附帶狀態(tài)的類是videos類,且有轉(zhuǎn)換狀態(tài)的情況出現(xiàn),本節(jié)將針對videos類對視頻的狀態(tài)轉(zhuǎn)換進(jìn)行分析。4-5視頻狀態(tài)轉(zhuǎn)換過程本章小結(jié)本章主要根據(jù)軟件工程規(guī)定的思想,在系統(tǒng)分析與設(shè)計(jì)階段對涉及到的業(yè)務(wù)或?qū)ο筮M(jìn)行UML建模實(shí)例,還對傳統(tǒng)的J2EE體系結(jié)構(gòu)和本次開發(fā)所使用的Spring框架進(jìn)行分析和比較,具體包括對Spring框架的邏輯結(jié)構(gòu)進(jìn)行介紹,和對數(shù)據(jù)流向進(jìn)行簡要的分析。在本次UML建模和系統(tǒng)設(shè)計(jì)階段,本人大量使用UML標(biāo)準(zhǔn)建模語言對系統(tǒng)的業(yè)務(wù)進(jìn)行繪制相應(yīng)的圖然而這些繪制圖都會展示系統(tǒng)的需求和發(fā)展流程從而使整個開發(fā)階段更加生動形象和抽象。在整個UML建模工作中,有大量圖可供選擇,常用的有用例圖、狀態(tài)圖、活動圖等各種流程圖,在分析階段要根據(jù)分析對象和實(shí)際實(shí)現(xiàn)情況來決定哪種圖更能體現(xiàn)系統(tǒng)的需求和發(fā)展流程。本章節(jié)采用了其中幾種圖形如狀態(tài)圖,活動圖等詳細(xì)地對系統(tǒng)用例、業(yè)務(wù)流程和系統(tǒng)發(fā)展流程進(jìn)行分析,使后續(xù)的開發(fā)工作提供了一個清晰的依據(jù)。系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)數(shù)據(jù)庫設(shè)計(jì)表5.1用戶表字段名稱字段類型字段意義是否非空是否鍵值默認(rèn)值useridVARCHAR主鍵ID是主鍵無usernameVARCHAR用戶名是否無passwordVARCHAR密碼是否無face_imageVARCHAR頭像路徑否否無nicknameVARCHAR昵稱是否無fans_countsINT粉絲數(shù)否否0follow_countsINT關(guān)注數(shù)否否0receive_like_countsINT收到的點(diǎn)贊否否0表4.2bgm表字段名稱字段類型字段意義是否非空是否鍵值默認(rèn)值idVARCHAR主鍵ID是主鍵無authorVARCHAR作者名字是否無nameVARCHARBgm名字是否無pathVARCHAR存放路徑是否無表4.3評論表字段名稱字段類型字段意義是否非空是否鍵值默認(rèn)值idVARCHAR主鍵ID是主鍵無father_comment_idVARCHAR父評論ID否否無to_user_idVARCHAR被評論者ID否否無video_idVARCHAR視頻ID是否無from_user_idVARCHAR評論者ID是否無commentTEXT評論內(nèi)容是否無create_timeDATATIME評論時(shí)間是否無表4.4熱搜表字段名稱字段類型字段意義是否非空是否鍵值默認(rèn)值idVARCHAR主鍵ID是主鍵無contentVARCHAR內(nèi)容是否無表4.5用戶-粉絲表字段名稱字段類型字段意義是否非空是否鍵值默認(rèn)值idVARCHAR主鍵ID是主鍵無user_idVARCHAR被關(guān)注者ID是否無fan_idVARCHAR關(guān)注者ID是否無表4.6用戶喜歡視頻表字段名稱字段類型字段意義是否非空是否鍵值默認(rèn)值idVARCHAR主鍵ID是主鍵無user_idVARCHAR用戶ID是否無video_idVARCHAR視頻ID是否無表4.7舉報(bào)表字段名稱字段類型字段意義是否非空是否鍵值默認(rèn)值idVARCHAR主鍵ID是主鍵無deal_user_idVARCHAR被舉報(bào)者ID是否無deal_video_idVARCHAR被舉報(bào)視頻ID是否無titleVARCHAR類型標(biāo)題是否無contentVARCHAR內(nèi)容否否無useridVARCHAR舉報(bào)者ID是否無create_dateDATATIME舉報(bào)時(shí)間是否無表4.8訂單狀態(tài)表字段名稱字段類型字段意義是否非空是否鍵值默認(rèn)值idVARCHAR主鍵ID是主鍵無user_idVARCHAR發(fā)布者id是否無audio_idVARCHAR用戶使用音頻的信息否否無video_descVARCHAR視頻描述否否無video_pathVARCHAR視頻存放的路徑是否無video_secondsFLOAT視頻秒數(shù)否否無video_widthINT視頻寬度否否無video_heightINT視頻高度否否無cover_pathVARCHAR視頻封面圖否否無like_countsBIGINT喜歡/贊美的數(shù)量是否無statusINT視頻狀態(tài)是否無create_timeDATATIME創(chuàng)建時(shí)間是否無后端接口設(shè)計(jì)本后端接口是利用Java語言實(shí)現(xiàn),類與接口的組成可以參與第四章系統(tǒng)總體設(shè)計(jì)中4-2圖所示。大致可分為pojo類、mapper接口、service類、controller類和interceptor類,另外還包括一些公共類、配置類、Springboot獨(dú)特的啟動類以及Swagger2類。圖5.1后端結(jié)構(gòu)5.2.1Pojo類Pojo類可以簡單理解為簡單的Java類,其一般的設(shè)置是根據(jù)數(shù)據(jù)庫中的數(shù)據(jù)表來進(jìn)行設(shè)計(jì),這樣就方便開發(fā)者在連接數(shù)據(jù)庫后操作數(shù)據(jù)庫。有需要還可以根據(jù)實(shí)際開發(fā)需要建立相應(yīng)的VO。圖5.2pojo類包一個pojo類一般只用于表示一個實(shí)體類的屬性以及簡單的set/get操作等。以下以本設(shè)計(jì)最為重要的一個pojo類Videos類進(jìn)行分析。@DatapublicclassVideosimplementsSerializable{privateStringid;/**發(fā)布者id*/privateStringuserId;/**用戶使用音頻的信息*/privateStringaudioId;/**視頻描述*/privateStringvideoDesc;/**視頻存放的路徑*/privateStringvideoPath;/**視頻秒數(shù)*/privateDoublevideoSeconds;/**視頻寬度*/privateIntegervideoWidth;/**視頻高度*/privateIntegervideoHeight;/**視頻封面圖*/privateStringcoverPath;/**喜歡/贊美的數(shù)量*/privateLonglikeCounts;/**視頻狀態(tài):1、發(fā)布成功2、禁止播放,管理員操作*/privateIntegerstatus;/**創(chuàng)建時(shí)間*/privateDatecreateTime;privatestaticfinallongserialVersionUID=1L;}本次在pojo類部署上采用lombok的@Data注解,該注解可以讓開發(fā)者不用編寫此類的get/set方法從而使代碼更為簡潔。5.2.2Mapper接口Mapper接口又稱Dao接口,數(shù)據(jù)訪問對象是一個面對對象的數(shù)據(jù)庫接口。一般在此接口中定義了操作數(shù)據(jù)庫的方法,再用具體實(shí)現(xiàn)類進(jìn)行實(shí)現(xiàn),但此次開發(fā)采用了Mybatis作為Dao層開發(fā)工具,則所有SQL語句都寫在xml而非源碼中。圖5.3mapper接口包以下我選擇BgmDao接口進(jìn)行具體分析,在此接口中我定義所有有關(guān)數(shù)據(jù)庫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的映射關(guān)系和mybatis必備的配置文件才能正常使用mybatis操作數(shù)據(jù)庫。5.2.3Service接口與具體實(shí)現(xiàn)類Service即服務(wù)層業(yè)務(wù)層,在此層一般用于處理業(yè)務(wù)邏輯,將多個Dao層的操作方法結(jié)合起來從而實(shí)現(xiàn)業(yè)務(wù)功能。一般Service層分為Service接口和具體實(shí)現(xiàn)類,這樣設(shè)計(jì)的目的是為了提高系統(tǒng)擴(kuò)展性。圖5.4mapper接口包以下選擇UserService接口進(jìn)行方法分析,并將其中一個具體方法進(jìn)行展示: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方法是用于實(shí)現(xiàn)查詢用戶信息的:@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層是用于接受前端的訪問請求,從而進(jìn)行簡單的數(shù)據(jù)處理。此層讓開發(fā)設(shè)計(jì)流程更為抽象歸納。以下將選擇UserController進(jìn)行分析:@RestController@Api(value="用戶相關(guān)業(yè)務(wù)的接口",tags={"用戶相關(guān)業(yè)務(wù)的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上傳頭像接口中首先會對前端傳來的參數(shù)userId進(jìn)行校準(zhǔn),如為空或不符合標(biāo)準(zhǔn)將直接返回錯誤信息而非調(diào)用userService的接口方法。Interceptor是用于在前端訪問請求Controller前對訪問進(jìn)行一個攔截,根據(jù)相關(guān)規(guī)則進(jìn)行放行或取消訪問,或在返回?cái)?shù)據(jù)時(shí)對數(shù)據(jù)進(jìn)行加工。publicclassMiniInterceptorimplementsHandlerInterceptor{ @Autowired publicRedisTemplateredisTemplate; publicstaticfinalStringUSER_REDIS_SESSION="user-redis-session"; /** *攔截請求,在controller調(diào)用之前 */ @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,可以繼續(xù)執(zhí)行,放行 */ returntrue; }}此處對每一個請求訪問對進(jìn)行攔截,然后判斷其請求所帶的一各參數(shù)Token進(jìn)行校對,若與redis數(shù)據(jù)庫存的數(shù)據(jù)不一致或?yàn)榭諘r(shí)將攔截返回相關(guān)操作信息。5.2.5Commond公共類包與相關(guān)配置類Commond包一般存放在開發(fā)過程頻繁使用到的類或工具類,這樣在開發(fā)的過程就能避免重復(fù),使結(jié)構(gòu)更加清晰明了。以下就以Commond包下的JSONResult類進(jìn)行簡要分析:publicclassJSONResult{//響應(yīng)業(yè)務(wù)狀態(tài)privateIntegerstatus;//響應(yīng)消息privateStringmsg;//響應(yīng)中的數(shù)據(jù)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類貫穿整個開發(fā)流程,它作為一個跟返回結(jié)構(gòu)類,里面定義了狀態(tài)碼,信息和數(shù)據(jù),并包含各種簡便方法來快速填補(bǔ)這三個信息以便更快地傳輸信息予前端。另外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配置進(jìn)Spring容器。前臺設(shè)計(jì)基于微信小程序的短視頻開發(fā)主要實(shí)現(xiàn)了用戶的登錄注冊、短視頻列表、視頻詳情頁、個人主頁等功能頁面。5.3.1視頻列表展示頁首先一進(jìn)入這個頁面就會自動調(diào)用接口函數(shù),把數(shù)據(jù)庫所有的視頻進(jìn)行查詢并通過一個長方形圖片組件、圓形圖片組件和文本對視頻的信息、發(fā)布者頭像和名字進(jìn)行展示。此處采用了分頁功能,具體實(shí)現(xiàn)在后端代碼,每次調(diào)用都會返回五個視頻信息。圖5.5視頻展示頁在此頁面點(diǎn)擊大封面頁面,會跳轉(zhuǎn)到視頻詳情頁。在展示完五個視頻后繼續(xù)往下來會重新發(fā)起請求,若展示完全部視頻則會提示沒有其他視頻了。圖5.6視頻展示頁底部5.3.2視頻列表展示頁視頻列表展示頁會展示視頻本身,左邊中部有一個星型作為收藏按鈕,一個聊天框作為評論按鈕,再者是表示其他按鈕。再往下展示視頻發(fā)布者的名字和視頻關(guān)鍵字信息。底部由一個主頁和個人信息跳轉(zhuǎn)按鈕。頂部有一個攝像機(jī)圖片,和一個搜索按鈕組件組成。圖5.7視頻詳情頁在這個頁面觀賞短視頻,并根據(jù)用戶的需求點(diǎn)擊相應(yīng)的按鈕作出相應(yīng)的請求。5.3.3個人信息展示頁首先一進(jìn)入這個頁面就會自動調(diào)用接口函數(shù),請求該用戶的所有信息,并該用戶的信息進(jìn)行展示。其中有一個問題,就是要判斷當(dāng)前使用用戶是否與所要展示用戶為同一用戶,若是同一用戶則如圖5.8所示,若不是則為圖5.9所示。圖5.8個人信息頁面圖5.9他人信息頁面決定展示個人信息頁面還是他人展示頁面由一個變量isMe進(jìn)行決定。具體部分實(shí)現(xiàn)代碼為:<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'>已關(guān)注</button></block><blockwx:if="{{!isFollow}}"><buttonsize='mini'type='primary'class='follow'data-followType='1'bindtap='followMe'>關(guān)注我</button></block>5.3.3登錄注冊頁面在此頁面用戶可以直接輸入賬號密碼進(jìn)行登錄,若沒有注冊過則可以點(diǎn)擊注冊按鈕進(jìn)行用戶注冊。而每一個用戶的密碼在注冊時(shí)都會在后端代碼進(jìn)行MD5加密。圖5.10登錄頁面圖5.11注冊頁面6結(jié)論隨著通訊行業(yè)5G新時(shí)代的普及和互聯(lián)網(wǎng)的快速發(fā)展,短視頻行業(yè)的發(fā)展只會越來越好,再加如今短視頻已經(jīng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論