目 錄
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
賬号
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所示。

圖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所示。
圖3-1 登入界面
圖3-2 登入順序圖
浏覽所有新聞資訊的實作分為用戶端和服務端的實作。首先講解用戶端的實作。用戶端使用了layui,在點選左側菜單欄中的功能時可以跳轉相應的頁面,頁面的跳轉是通過伺服器端進行的,伺服器端使用了Thymeleaf技術,可以在後端對靜态頁面進行渲染。頁面跳轉之後會顯示所有新聞的資訊,同時可以通過上方的搜尋框進行多條件組合查詢。Layui對ajax請求進行了封裝,同時提供了對表格進行渲染的方法。用戶端隻需要傳遞相應的參數給服務端即可。伺服器端可以使用SpringMVC的參數綁定來接受前端傳遞的參數。在後端使用MVC的設計模式,我們調用service層調用dao層的方法即可。後端的接口是提前設計好的。在前後端分離的方式下這是一種常用的方式。後端同時也要對參數進行校驗,并将錯誤資訊封裝到json資料中。浏覽所有新聞資訊界面如圖3-3所示。
圖3-3 浏覽所有新聞資訊
多條件組合查詢的實作也需要分成前後端的實作進行講解。在前端,我們使用了layui架構,layui架構封裝了一個ajax請求,在我們呢傳遞參數的時候,他會自動在後面添加兩個參數,一個是page代表目前頁,一個是limit代表每頁顯示的數量。我們可以使用公式:(page-1)* limit來進行分頁計算。還可以使用開源的工具PageHelper來進行分頁。PageHelper是mybatis架構的一個插件。專門用來實作分頁,PageHelper的好處是,它是跨平台實作的。無論是使用mysql還是oracle都可以使用PageHelper來進行分頁。參數傳遞時需要注意,在後端一般是使用同一個api來進行實作,需要對初始化時的參數進行判斷。
圖3-4 多條件組合查詢
浏覽所有電影資訊的實作和上述浏覽所有新聞資訊類似。浏覽所有電影資訊如圖3-5所示。
圖3-5 浏覽所有電影資訊
電影資訊編輯是通過ajax請求來實作的,使用post請求方式,向服務端發起請求,服務端完成更新并傳回處理結果。編輯電影資訊如圖3-6。
圖3-6 編輯電影資訊
删除新聞資訊具體的效果如圖3-7所示。
圖3-7 删除新聞
預覽視訊的效果如圖3-8所示。
圖3-8 預覽新聞資訊
預覽視訊的效果如圖3-9所示。
圖3-9 預覽視訊
本項目主要使用junit5自動測試架構進行單元測試,junit5為我們提供了友善的測試方法,并能友善的檢視單元測試覆寫率。同時我們使用了SpringBoot為我們提供的單元測試架構,以便于對IOC容器中的元件進行測試。
在單元測試過程中,我們使用了白盒測試中的基本路徑測試,條件覆寫測試等測試方法。
測試樣例設計如表4-1所示:
測試樣例
預期輸出
“學習”
Type類型集合
“123”、“002”
2
表4-1 測試樣例設計
具體的測試的部分代碼如圖4-1所示:
圖4-1 單元測試代碼
本項目使用最新的SpringBoot技術進行建構,并結合了SpringMVC、mybatis等熱門架構技術。
SpringBoot技術為使用者提供了自動裝配功能,使用者隻需要遵守約定就可以減少甚至不需要再進行繁瑣的配置。相較于Spring,SpringBoot為我們提供的自動裝配節約了我們大量的開發時間,提高了開發效率。
在項目開發過程中我們采用團隊開發的方式進行開發,每個組員負責其中的一個子產品。我主要負責登入以及檔案上傳等子產品的開發。檔案上傳是本項目中較為重要的子產品,管理者可以通過該子產品實作圖檔以及視訊的上傳功能。SpringBoot為我們提供了上傳元件,實作起來還是比較簡單的,但是也要考慮一些問題,例如使用者選擇的檔案檔案名可能有些問題,我們需要通過UUID來為使用者上傳的檔案名進行重命名。
相較于傳統的Web項目開發,SpringBoot為我們提供了大量開箱即用的功能,使用起來十分友善。在項目開發過程中,我們通過SpringBoot與其它架構進行整合,實作了web應用的快速開發。
總體來說,項目的開發還是很順利的,但是也有一些需要記錄的錯誤。例如有的組員不重視單元測試,導緻整合開發的時候出現了很多錯誤,拖慢了整體的開發進度。
本次實訓的課題是設計一個電影背景管理系統。通過這個項目也确實學到了很多的知識。對ssm架構的配置、使用整合進行了學習。總體來說本項目作為階段性的實訓項目很合适,基本将ssm架構的基礎知識串了起來。
做這個項目更大的收獲是對于面向對象思想的了解。學習Java的過程中很容易形成一個不好的思維:單純的将Java的優點了解為随時調用的方法和豐富的類庫。這些自然是Java的強大之處,但是面向對象的思想才是項目設計過程中不可或缺的制勝法寶。面向對象必須要了解對象的作用,對象該做什麼,是設計類時的難點。什麼方法就應該在什麼類中,什麼對象就應該做什麼樣的事情。總之,熟練掌握面向對象的程式設計思想是一個Java工程師應該具備的基本技能。面向對象思想可以極大的簡化代碼數量以及降低業務邏輯的複雜度。學習使用面向對象的思想解決問題也是後續學習的基礎。是以,在學習Java的過程中一定要把握住面向對象思想的掌握。
計算機的基礎知識對今後的程式設計學習是有很大的幫助的。是以一定要重視計算機的基本知識。同時也要重視資料結構以及算法,在做項目的過程中,正是因為資料結構和算法功底不夠,是以無法實作更高效的算法。
總之,通過這個項目對Java基礎知識有了更深入的了解。也為後續的學習做好了鋪墊。