肖 鑫,李旭昌,司靖梓,張 恒
(西藏大學(xué)信息科學(xué)技術(shù)學(xué)院,拉薩 850000)
旅游業(yè)是西藏的特色產(chǎn)業(yè)和優(yōu)勢產(chǎn)業(yè)。1982—2019 年,38 年來藏旅游人數(shù)年均增長超過20%,旅游收入年均增長率超30%,2019 年來藏旅游人數(shù)超過4000 萬人次,旅游創(chuàng)收超550億元。西藏旅游業(yè)發(fā)展對于促進(jìn)當(dāng)?shù)孛裆?jīng)濟(jì)、改善民生福祉有著重大價(jià)值,在改善當(dāng)?shù)鼐用裆钏缴嫌兄e足輕重的作用[1]。其中旅游網(wǎng)站作為一種跨時間與空間的媒體,對于通過“互聯(lián)網(wǎng)+”模式為游客提供優(yōu)質(zhì)服務(wù),促進(jìn)西藏旅游業(yè)發(fā)展具有積極意義[2]。在旅游產(chǎn)業(yè)鏈中實(shí)現(xiàn)信息資源的共享,是構(gòu)建智慧旅游平臺、應(yīng)用旅游大數(shù)據(jù)的核心[3]。
本文設(shè)計(jì)實(shí)現(xiàn)了一款基于JavaWeb 相關(guān)技術(shù),通過B/S 架構(gòu),采用MVVM 模式實(shí)現(xiàn)用戶端、后臺管理端的旅游平臺?;谖鞑氐牡赜蛱厥庑裕撈脚_有針對性地進(jìn)行了安全性設(shè)計(jì),有效地提高了平臺的安全性。該平臺專注于為來藏游客與對西藏文化感興趣的用戶服務(wù),具有一定的專一性和較強(qiáng)的信息深入性。
該平臺前端采用Vue.js 與Thymeleaf 配合使用,以提供更高的開發(fā)效率與更優(yōu)秀的性能表現(xiàn),以實(shí)現(xiàn)一個高效的、現(xiàn)代化的、易維護(hù)的JavaWeb 應(yīng)用[4]。其中,Vue.js 是一種流行的JavaScript 框架,它提供了一個響應(yīng)式和組件化的開發(fā)方式,用于負(fù)責(zé)前端邏輯的實(shí)現(xiàn),可以輕松構(gòu)建現(xiàn)代化的用戶界面。而Thymeleaf 是一種Java 模板引擎,它允許將動態(tài)數(shù)據(jù)渲染到HTML中,以實(shí)現(xiàn)頁面的快速生成。這兩種技術(shù)均具有簡單易上手的特點(diǎn),開發(fā)人員可以快速上手并開發(fā)出可重用的組件,以加快項(xiàng)目開發(fā)速度。
該平臺后端采用了SpringBoot 框架與MyBatis-Plus 框架配合使用。其中SpringBoot 框架是基于Spring 的輕量級后端框架,可有效提高Java 應(yīng)用程序開發(fā),提供了豐富的自動化配置與多種插件機(jī)制,使其具有易于學(xué)習(xí)、快速搭建與高效運(yùn)行等特點(diǎn),可顯著地簡化傳統(tǒng)Spring應(yīng)用的開發(fā)、部署和運(yùn)行[5]。MyBatis-plus則是MyBatis 的增強(qiáng)工具,在其基礎(chǔ)上提供了更便捷的操作,其代碼生成器可根據(jù)表結(jié)構(gòu)自動生成常用的CRUD 操作代碼,且提供多種性能優(yōu)化方案以有效提高系統(tǒng)性能,如批處理、緩存。平臺后端SpringBoot 框架與MyBatis-plus 框架結(jié)合使用,可有效簡化開發(fā)、提高性能、提高系統(tǒng)的可維護(hù)與可拓展性。
該平臺采用Redis 進(jìn)行緩存、MySQL 實(shí)現(xiàn)持久存儲,可有效地實(shí)現(xiàn)負(fù)載均衡與性能優(yōu)化等多種優(yōu)勢,是現(xiàn)代化應(yīng)用開發(fā)的數(shù)據(jù)庫常用后端技術(shù)方案[6]。其中,Redis 數(shù)據(jù)庫是一種高性能的鍵值對數(shù)據(jù)庫,適用于頻繁讀寫、對響應(yīng)速度要求較高的場景。在后端架構(gòu)中,常常將熱點(diǎn)數(shù)據(jù)以及高訪問數(shù)據(jù)存儲在Redis 中,以加速響應(yīng)時間和提升性能。其次,MySQL 是一種穩(wěn)定可靠、功能豐富的關(guān)系型數(shù)據(jù)庫,適合存儲大量結(jié)構(gòu)化數(shù)據(jù)和進(jìn)行復(fù)雜的數(shù)據(jù)查詢分析操作。在后端架構(gòu)中,可以將業(yè)務(wù)相關(guān)的數(shù)據(jù)存儲在MySQL 中,并對數(shù)據(jù)建立索引、進(jìn)行優(yōu)化,以保證數(shù)據(jù)的完整性和一致性。
該平臺通過綜合采用多種網(wǎng)站安全策略來提高網(wǎng)站安全策略:①通過使用Thymeleaf、Vue.js等框架自帶的轉(zhuǎn)義功能對外部輸入的數(shù)據(jù)進(jìn)行過濾和轉(zhuǎn)義,避免惡意用戶插入腳本代碼導(dǎo)致前端頁面被攻擊;②使用Web 應(yīng)用程序防火墻WAF 來檢測和防止Web 應(yīng)用程序?qū)用娴墓?,如SQL 注入、跨站腳本攻擊XSS 和跨站請求偽造CSRF,WAF 保護(hù)Web 應(yīng)用程序減少遭受常見漏洞攻擊的可能性;③通過后端使用MyBatis-Plus 持久層框架進(jìn)行自動化處理,對輸入的數(shù)據(jù)進(jìn)行過濾核實(shí),避免用戶惡意注入SQL 命令導(dǎo)致數(shù)據(jù)庫被攻擊;④進(jìn)行數(shù)據(jù)庫定期備份和數(shù)據(jù)庫云端備份[7],以便在網(wǎng)站遭受攻擊后及時恢復(fù),減少損失。
平臺整體功能設(shè)計(jì)如圖1所示。
圖1 平臺整體功能設(shè)計(jì)
該平臺采用了MVVM 設(shè)計(jì)模式。MVVM 設(shè)計(jì)模式是一種基于MVC 設(shè)計(jì)模式的軟件架構(gòu)模式,其由Model-View-ViewModel 三個部分組成[8]。View 層主要通過Thymleaf 模板與Lay-UI實(shí)現(xiàn)前端用戶界面展示和交互,Model 層通過MyBatis-plus 框架與SpringBoot 框架負(fù)責(zé)邏輯業(yè)務(wù)的實(shí)現(xiàn)和數(shù)據(jù)庫的訪問,而ViewModel層作為中間交互層,采用Vue.js 框架通過Ajax 與Json實(shí)現(xiàn)View 層和Model 層之間的數(shù)據(jù)雙向綁定。使用MVVM 模式可以將用戶視圖與業(yè)務(wù)邏輯解耦,使項(xiàng)目易于維護(hù)與拓展。該平臺項(xiàng)目MVVM架構(gòu)如圖2所示。
圖2 平臺MVVM架構(gòu)圖
該平臺分為前臺與后臺兩部分,服務(wù)的對象分別為前臺游客用戶,后臺管理員。其中前臺主要實(shí)現(xiàn)了六大模塊:①景點(diǎn)信息;②旅游攻略;③搜索欄;④賬號管理;⑤藏地介紹;⑥游記分享。在后臺,管理員可以進(jìn)行管理端登錄,通過權(quán)限驗(yàn)證后,對網(wǎng)站信息進(jìn)行管理:①用戶信息管理;②景點(diǎn)信息管理;③游記信息管理。平臺前臺界面如圖3所示。
圖3 前臺首頁圖
E-R圖是實(shí)體—聯(lián)系圖,提供了數(shù)據(jù)庫設(shè)計(jì)時實(shí)體、屬性、聯(lián)系的表示方法,是在軟件工程學(xué)中用于將現(xiàn)實(shí)世界中的事務(wù)抽象為概念模型的常用工具[9]。
在該平臺數(shù)據(jù)庫的設(shè)計(jì)中,擁有以下六大主要實(shí)體:用戶、管理員、評論、游記、標(biāo)簽和景點(diǎn)。數(shù)據(jù)庫E-R圖如圖4所示。
圖4 數(shù)據(jù)庫E-R圖
用戶進(jìn)入登錄/注冊頁面,在對用戶傳遞的注冊信息進(jìn)行操作時,通過vue.js 調(diào)用Axios 庫使用AJAX 技術(shù)將技術(shù)異步傳輸?shù)胶蠖诉M(jìn)行處理。在View-Model 層,通過Service 類調(diào)用Spring Securit 等庫實(shí)現(xiàn)對前端傳入數(shù)據(jù)進(jìn)行校驗(yàn),檢測是否有SQL 注入或是違法字符,并通過BASE64 技術(shù)進(jìn)行數(shù)據(jù)加密處理。通過MyBatis-plus 的BaseMapper 查詢數(shù)據(jù)庫中是否存在同一郵箱/電話號碼注冊的賬號。若無,則向用戶信息表新添數(shù)據(jù);若有,則返回拒絕該次注冊請求的頁面。
為防止黑客DOS 攻擊等網(wǎng)絡(luò)入侵手段,設(shè)置登錄注冊頁面,同一IP 地址在5 s內(nèi)只能執(zhí)行一次提交操作,驗(yàn)證碼有效時間為5 min,且只可使用一次。
在前臺網(wǎng)站各個頁面,用戶都可以通過在網(wǎng)頁上部的搜索框輸入關(guān)鍵詞進(jìn)行搜索。首先進(jìn)行的是基于數(shù)據(jù)庫的站內(nèi)檢索。前端經(jīng)過SQL注入過濾后,通過AJAX 向后端發(fā)送異步請求,首先在Redis 緩存數(shù)據(jù)庫中檢索高頻數(shù)據(jù),將數(shù)據(jù)按照瀏覽量排序返回到搜索頁面。若用戶不滿意當(dāng)前結(jié)果,則可點(diǎn)擊“查看更多”按鍵,從持久層MySQL 數(shù)據(jù)庫獲取更多與關(guān)鍵詞匹配的數(shù)據(jù),并將數(shù)據(jù)回顯在當(dāng)前頁面中。
若游客用戶仍不滿足,則可點(diǎn)擊全網(wǎng)檢索,獲取全網(wǎng)基于該關(guān)鍵詞的數(shù)據(jù)。其功能是通過將游客在搜索框所輸入的內(nèi)容作為關(guān)鍵詞,調(diào)用百度API 檢索,并將結(jié)果返回渲染當(dāng)前頁面來實(shí)現(xiàn)的。
游記模塊實(shí)現(xiàn)了為用戶提供上傳、查閱、評論個人旅游記錄分享的功能。
游記模塊的重點(diǎn)是上傳審核功能,基于西藏地域的特殊性和敏感性,對于平臺內(nèi)容的審核有著較高的要求,因此該平臺采用了雙重審核的策略。首先將用戶上傳的游記通過敏感詞語料庫審查,若審查出敏感內(nèi)容,則將該游記鎖定退回給用戶修改編輯[10]。當(dāng)通過一輪審核,則進(jìn)入第二輪審查隊(duì)列,后臺管理系統(tǒng)由管理員人工審核,此輪審查重點(diǎn)為圖片等非文本內(nèi)容。并決定該篇游記是否可以公開發(fā)布到平臺上展示。
游客可對平臺上的游記進(jìn)行評論、點(diǎn)贊、舉報(bào)等,以獲取更優(yōu)質(zhì)的使用體驗(yàn)。
后臺管理端實(shí)現(xiàn)了數(shù)據(jù)信息管理,涵蓋了驗(yàn)證管理、用戶管理、訂單管理、景點(diǎn)管理、機(jī)票管理、酒店管理。實(shí)現(xiàn)了數(shù)據(jù)庫的增刪改查操作。采用SpringBoot 作為框架并整合了MyBatis-plus、MySQL 持久層框架實(shí)現(xiàn)了數(shù)據(jù)庫連接。在郵箱系統(tǒng)方面整合了JavaMail 操作。利用SMTP 協(xié)議實(shí)現(xiàn)了郵箱系統(tǒng)管理。在與前端的交互上采用了Cookie 機(jī)制來傳輸Session數(shù)據(jù)(Session機(jī)制),實(shí)現(xiàn)了會話和區(qū)分多用戶。采用JsonResponse 來實(shí)現(xiàn)后端數(shù)據(jù)封裝,配合Axios前端接口接收數(shù)據(jù),統(tǒng)一化管理過程。
管理員通過后臺登錄驗(yàn)證后,即可便捷地對網(wǎng)站進(jìn)行管理。該平臺的后臺管理系統(tǒng)截圖如圖5所示。
圖5 后臺管理系統(tǒng)圖
本文設(shè)計(jì)并實(shí)現(xiàn)了一個基于JavaWeb的面向西藏地區(qū)的旅游信息平臺。該平臺采用了Spring-Boot框架與Vue.js框架,實(shí)現(xiàn)了軟件工程中迅捷開發(fā)的思想。該平臺的實(shí)現(xiàn)不僅方便了對于西藏地區(qū)有旅游興趣的人群,也為想要了解西藏自治區(qū)文化歷史、自然風(fēng)光的人群提供了一個便捷窗口,具有一定的現(xiàn)實(shí)價(jià)值。