




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