【正文】
本文組織結(jié)構(gòu)如下: 第一章 緒論:根據(jù)實(shí)際情況,闡述、分析我國(guó)景區(qū)管理工作中的問(wèn)題,提出建立 旅游景區(qū)數(shù)字化暨一卡通系統(tǒng)的必要性。 第五章 詳細(xì)設(shè)計(jì)與初步實(shí)現(xiàn):對(duì)系統(tǒng)的各個(gè)功能進(jìn)行詳細(xì)設(shè)計(jì),并給出使用輕量級(jí) JavaEE( Struts+Spring+Hibernate)框架進(jìn)行初步實(shí)現(xiàn)的范例。 第二章 實(shí)現(xiàn)系統(tǒng)的技術(shù)方案和關(guān)鍵技術(shù) 在 旅游景區(qū)數(shù)字化暨一卡通 系統(tǒng)開(kāi)發(fā)之前必須確定系統(tǒng)的開(kāi)發(fā)目標(biāo),從而確定系統(tǒng)的設(shè)計(jì)原則,再根據(jù)系統(tǒng)的設(shè)計(jì)原則從可實(shí)現(xiàn)系統(tǒng)需求的眾多技術(shù)方案中選出最可靠、經(jīng)濟(jì)的一個(gè)成為實(shí)現(xiàn)系統(tǒng)的技術(shù)方案。這種可維護(hù)性不僅包括對(duì)原有錯(cuò)誤和缺陷的修復(fù),對(duì)應(yīng)于變化的需求,還應(yīng)該包括對(duì)原有功能的擴(kuò)充。 系統(tǒng)的設(shè)計(jì)原則 解決 設(shè)計(jì)目標(biāo)提出的 “可維護(hù)性 ”和 “可擴(kuò)展性 ”這兩個(gè)要求 方法是應(yīng)用現(xiàn)代軟件工程中所提出的 “開(kāi) 閉 ” 原則 (OCP: OpenClosed Principle)。 以 “開(kāi) 閉 ”原則為指導(dǎo),在系統(tǒng)的開(kāi)發(fā)過(guò)程中,為系統(tǒng)建立高度的解耦,即:模塊與模塊之間和類(lèi)與類(lèi)之間不能存在以硬編碼形式寫(xiě)入的調(diào)用關(guān)系,甚至模塊中的獨(dú)立的程序之間也不能 、或者盡量少的存在以硬編碼形式寫(xiě)入的調(diào)用關(guān)系,這些調(diào)用關(guān)系將以系統(tǒng)配置文件的方式配置到整個(gè)系統(tǒng)中。 系統(tǒng)采用承認(rèn)并擁抱變化的統(tǒng)一軟件開(kāi)發(fā)過(guò)程 [var Jacobson,Grady Booch,James Unified Software Development Process. New Jersey :AddisonWesley professional,2021]為指導(dǎo),即:與 UML(統(tǒng)一建模語(yǔ)言 )結(jié)合在一起 ,以用例 (系統(tǒng)功能 )和測(cè)試為驅(qū)動(dòng),以架構(gòu)為中心,遞增、迭代的開(kāi)發(fā)過(guò)程。 由于本系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)應(yīng)當(dāng)符合軟件設(shè)計(jì)的 OCP(開(kāi) 閉 )原則,這樣,就盡最大可能避免了軟件的 “腐 爛 ”(僵硬、脆弱、復(fù)用率低、黏度過(guò)高 )問(wèn)題,并且使得系統(tǒng)具備了可擴(kuò)展性、靈活性和可插入性的軟件設(shè)計(jì)特征。朱振昌 . C/S、 B/S的結(jié)構(gòu)的特點(diǎn)及在醫(yī)院系統(tǒng)中的應(yīng)用 [J]. 《 醫(yī)學(xué)信 息》 20210905]。由于客戶(hù)機(jī)系統(tǒng)配置低,因此在客戶(hù)機(jī)上只需安裝占用系統(tǒng)資源 少的客戶(hù)端軟件,而相對(duì)配置較高的服務(wù)器上提供較多的服務(wù)、負(fù)擔(dān)更多的工作,以達(dá)到“瘦客戶(hù)端、胖服務(wù)器端”的效果??蛻?hù)端只需標(biāo)準(zhǔn)的瀏覽器,除此之外無(wú)需專(zhuān)用的軟件,系統(tǒng)的維護(hù)工作簡(jiǎn)單。 B/S 結(jié)構(gòu)可以與企業(yè)原有的網(wǎng)絡(luò)很好 地結(jié)合。解決這些困難和麻煩的方法就是將這些的業(yè)務(wù)邏輯代碼、數(shù)據(jù)庫(kù)操作代碼以及 JSP 頁(yè)面設(shè)計(jì)代碼按照它們不同的關(guān)注方向分離開(kāi),這樣,就引入了 MVC 架構(gòu) ,在 MVC 中的 “M”代表業(yè) 務(wù)邏輯和數(shù)據(jù)庫(kù)操作代碼, “V” 代表頁(yè)面設(shè)計(jì)代碼, “C” 代表請(qǐng)求(request)和響應(yīng) (response)的導(dǎo)航代碼。 作為一種架構(gòu)模式,它是由幾個(gè)軟件設(shè)計(jì)模式組合而成的,包括合成模式、策略模式、觀察者模式,有時(shí)候可能會(huì) 加入裝飾模式、調(diào)停者模式、迭代模式和工廠方法模式等。同時(shí) JavaEE 技術(shù)并不對(duì) Microsoft 的產(chǎn)品設(shè)置壁壘,這就給系統(tǒng)開(kāi)發(fā)工具和產(chǎn)品的選擇帶來(lái)了極大的范圍。 關(guān)鍵技術(shù)介紹 輕量級(jí) JavaEE 技術(shù) 輕量級(jí) (Lightweight)技術(shù)通常意味著簡(jiǎn)化模型和更具影響能力的容器 [王 前紅 ,郝克剛 ,葛瑋 .采用輕量級(jí)框架實(shí)現(xiàn) web 訪問(wèn)統(tǒng)計(jì)分析系統(tǒng) [J].上海 :計(jì)算機(jī)應(yīng)用與軟件, 2021,25(4):146],輕量級(jí)方法在規(guī)則方面限制很少,這又給前期的開(kāi)發(fā)、后期的維護(hù)和升級(jí)帶來(lái) 了極大的靈活性。該公司和其產(chǎn)品 Java 于 2021 年被 oracle 收購(gòu)。 自 開(kāi)始, JAVAEE 平臺(tái)統(tǒng)一更名為 JavaEE。如今, Java 語(yǔ)言的功能和工具得到了極大的擴(kuò)充、豐富和發(fā)展,已經(jīng)完全可以用于復(fù)雜的、多層的以及分布式的電子商務(wù)和企業(yè)級(jí)應(yīng)用。組件可以在任何符合 JavaEE標(biāo)準(zhǔn)的平臺(tái)上獲得容器提供的各種所需要的服務(wù),從而使復(fù)雜的多層結(jié)構(gòu)應(yīng)用的開(kāi)發(fā)變得更加容易。簡(jiǎn)單的說(shuō), JSP技術(shù)簡(jiǎn)化了開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站的過(guò)程,使用 JSP技術(shù)??傮w而言, Servlet就是接受容器管理,通過(guò) Web 服務(wù)器實(shí)現(xiàn)的 “請(qǐng)求 響應(yīng) ”模型與客戶(hù)機(jī)進(jìn)行交互。 d. JDBC(Java Database Connectivity: Java 數(shù)據(jù)庫(kù)連接 ): JDBC 為訪問(wèn)不同的數(shù)據(jù)庫(kù)提供了統(tǒng)一的標(biāo)準(zhǔn) SQL(Structured Query Language:結(jié)構(gòu)化查詢(xún)語(yǔ)言 )數(shù)據(jù)庫(kù)訪問(wèn)接口, JDBC 對(duì)開(kāi)發(fā)者屏蔽了一些細(xì)節(jié)問(wèn)題,將開(kāi)發(fā)者和私有數(shù)據(jù)庫(kù)隔離開(kāi)來(lái)。 f. JavaMail: JavaMail 是用于訪問(wèn)郵件服務(wù)器的 API,可以作為發(fā)送和接收電子郵件的抽象工具。 i. JMS(Java Message Service: Java 消息服務(wù) ):在企業(yè)環(huán)境中,不同的分布式組件可能不會(huì)總之彼此持續(xù)接觸。因此,在系統(tǒng)的開(kāi)發(fā)過(guò)程中引入了 Struts框架,實(shí)現(xiàn) MVC模式。 Struts 框架與其它技術(shù)框架如: Spring、 Hibernate 可以很好的整合。 框架 (Framework)是用于解決相同或者相類(lèi)似的問(wèn)題的方案。 Spring 是一個(gè)輕量級(jí)的非入侵式的容器,它為軟件開(kāi)發(fā)提供了全方位支持的應(yīng)用程序框架。這樣,不但使得應(yīng)用的解耦和性得到了大幅度的提高,而且使得程序更加易于維護(hù)。 Hibernate 框架 Hibernate框架是 Gavin King于 2021年開(kāi)發(fā)出的 ORM框架。 要使用面向?qū)ο蟮木幊陶Z(yǔ)言持久化 (注:本文中所提到的持久化是指與數(shù)據(jù)庫(kù)相關(guān)的所有操作 )關(guān)系型數(shù)據(jù)庫(kù),解決方案有如下 3 種: a. 使用 JDBC 手工操作; b. 使用 ORM(Object Relation Mapping 對(duì)象關(guān)系映射 )框架解決。 c) 使用 ORM方案則沒(méi)有 JDBC 方案和 CMP方案中所述的問(wèn)題。 AJAX AJAX(Asynchronous JavaScript+ XML:異步的 JavaScript 和 XML): AJAX不是一種獨(dú)立的技術(shù),而是綜合運(yùn)用很多老技術(shù)融合成的一個(gè)思想。在 Hibernate 中 POJO 是對(duì) EJB的替換,相對(duì)于 EJB, POJO 僅僅是一個(gè)簡(jiǎn)單的 Java 對(duì)象,它不需要實(shí)現(xiàn)在 EJB 中定義的諸如安全、管理和持久化等接口。使用 CMP 方案負(fù)責(zé)持久化的對(duì)象是 EJB 組件。 Java 是一種面向?qū)ο蟮木幊陶Z(yǔ)言,然而,目前所投入市場(chǎng)并實(shí)際應(yīng)用的 數(shù)據(jù)庫(kù)都是關(guān)系型數(shù)據(jù)據(jù)庫(kù)。而 Spring 將這些對(duì)象的創(chuàng)建工作配置在 XML 文件中,這樣對(duì)象的創(chuàng)建工作就由容器負(fù)責(zé)完成。 Spring 的特性如下: a. 輕量 (Lightweight): Spring 的 Jar 包不到 1MB,而且所有的庫(kù)都是使用Java 原生 API 開(kāi)發(fā),使用 Spring 開(kāi)發(fā)出的功能類(lèi),不需要依賴(lài)于 Spring的 Jar 包就可以順利運(yùn)行 (也就是所謂的非入侵式 ); b. 控制反轉(zhuǎn) (Inversion of Control: IOC):也被稱(chēng)為依賴(lài)注入 (Dependency Injection: DI),使用 web 容器管理對(duì)象與對(duì)象之間的依賴(lài)關(guān)系,而不是由對(duì)象自身來(lái)管理這種依賴(lài)關(guān)系。 Struts 框架體系結(jié)構(gòu)如圖 43 所示[,202107]: C l i e n t B r o w s e rV i e w J S PM o d e lA p p l i c a t i o n S t a t eB u s i n e s s L o g i cA v t i o nC o n t r o l l e rS e r v l e tS t r u t s c o n f i g . x m lE v e n tH t t p R e q u e s tD i s p a t c hF o r w a r dG e t T a g U p d a t eH t t p R e s p o n s e 圖 43 Struts 框架的體系結(jié)構(gòu) Struts 框架提供的 3 個(gè)關(guān)鍵組件如下: a. 請(qǐng)求 (request)組件:代表用戶(hù)請(qǐng)求目標(biāo)的地標(biāo)準(zhǔn) URI(Universal Resource Identifier:通用資源標(biāo)識(shí) )地址; b. 響應(yīng) (response)組件:用于將用戶(hù)請(qǐng)求的資源轉(zhuǎn)發(fā)特定的地址; c. 標(biāo)簽庫(kù) (tag library):用于幫助開(kāi)發(fā)人員使用服務(wù)器頁(yè)面 (server pages)建立互動(dòng)應(yīng)用。 作為一個(gè)開(kāi)源項(xiàng)目, Struts 框架主要是采用 Servlet(MVC 模式中的業(yè)務(wù)邏輯 )和 JSP(MVC 模式中的顯示邏輯 )技術(shù)實(shí)現(xiàn),是基于 Sun 的 JavaEE 平臺(tái)的MVC 框架,即:充分的發(fā)揮了 MVC 模式的 “顯示邏輯與業(yè)務(wù)邏輯相分離 ”[Consoli John. Model Struts for UPN[J]. Media Week, 2021, 14(10):710]。 Struts 是 Apache 軟件組織 (Apache Software Foundation: ASF)主持的 Jakarta 項(xiàng)目的一個(gè)組成部分 [Ted Husted,Cedric Dumoulin,Gee Franciscus,David Winterfeldt. Struts In Action[M], USA:Manning Publications Co.,2021,8] ,它是 一 個(gè) 基 于 請(qǐng) 求 相 應(yīng)(RequestResponse)驅(qū)動(dòng)模式的應(yīng)用 MVC 框架的邏輯結(jié)構(gòu),但是主要是提供了一套好的控制器標(biāo)準(zhǔn)和一套定制的標(biāo)簽庫(kù)。 JMS 通過(guò)使用面向消息的中間件提供了這種發(fā)送和接收消息的功能。 g. JTA(Java Transaction API: Java 事務(wù) API): JTA 提供了 JAVAEE 中處理事務(wù)的標(biāo)準(zhǔn)接口,它支持事務(wù)的開(kāi)始、回滾和提交。 e. RMI(Remote Method Invoke:遠(yuǎn)程方法調(diào)用 ): RMI 是分布式對(duì)象應(yīng)用程序中的一種重要機(jī)制。 EJB規(guī)范定義了 EJB 組件在何時(shí)、如何與它們的容器進(jìn)行交互作用。 b. Servlet: Servlet 實(shí)質(zhì)上是一種小型的、與平臺(tái)無(wú)關(guān)的 Java 類(lèi),它被JavaEE 容器編譯成與平臺(tái)無(wú)關(guān)的字節(jié)碼,并接受容器管理,服從容器調(diào)用。 JavaEE 中主要的技術(shù)規(guī)范 ]如下: a. JSP(Java Server Pages): JSP頁(yè)面由 HTML頁(yè)面和嵌入其中的 Java代碼片段所組成,是對(duì) HTML的一種擴(kuò)展,它可以通過(guò)一些特殊的標(biāo)簽向靜態(tài) HTML頁(yè)面插入動(dòng)態(tài)信息。 JavaEE基于組件的開(kāi)發(fā)模型的中心就是容器的概念。 整體而言, JavaEE 并不是一套開(kāi)發(fā)工具,準(zhǔn)確的說(shuō) JavaEE 是一套標(biāo)準(zhǔn),或者說(shuō)是 一組規(guī)范, 它對(duì) 開(kāi)發(fā)和運(yùn)行企業(yè)級(jí) Web 應(yīng)用做出了定義。 a) 作為一種技術(shù)平臺(tái), Java 擁有 JRE(Java Runtime Environment: Java 運(yùn)行時(shí)環(huán)境 )和 JVM(Java Virtual Machine: Java 虛擬機(jī) ); b) 作為一種開(kāi)發(fā)語(yǔ)言, Java 的 JDK(Java Development Kit: Java 開(kāi)發(fā)工具 )能開(kāi)發(fā)出面向?qū)ο蟆踩?、健壯的? 跨平臺(tái)的應(yīng)用程序。但是大量使用框架所提供的 API(Application Programming Interface)帶來(lái)的后果是使得應(yīng)用程 序和所使用框架之間產(chǎn)生了很大依賴(lài),應(yīng)用程序無(wú)法從框架之中獨(dú)立出來(lái)。 基于以上考慮和數(shù)據(jù)庫(kù)安全性和應(yīng)用廣泛性的考 慮,本系統(tǒng)擬采用輕量級(jí) JavaEE+ Microsoft sql server 2021 技術(shù)開(kāi)發(fā)。 確定技術(shù)方案 旅 游 景 區(qū) 數(shù) 字 化 暨 一 卡 通 系 統(tǒng) 作 為 一 個(gè) 企 業(yè) 級(jí) 應(yīng) 用 (Enterprise Application),就第二章提出的需求而言,當(dāng)前業(yè)界普遍采用的 JavaEE 技術(shù)和Dot Net 技術(shù)都足以應(yīng)對(duì)該應(yīng)用的開(kāi)發(fā)。 MVC 模式的的體系結(jié)構(gòu)如圖 42 所 示 [李剛 .輕量級(jí) J2EE 企業(yè)應(yīng)用實(shí)踐—Struts + Spring + Hibernate 整合開(kāi)發(fā) [M].北京 :電子工業(yè)出版社 ,2021:116] 視 圖 1控 制 器視 圖 1事 件更 新更 新更 新更 新獲 得數(shù) 據(jù)獲 得數(shù) 據(jù)獲 得數(shù) 據(jù)獲 得數(shù) 據(jù)改 變改 變改 變改 變改 變改 變模 型模 型圖 42 MVC 模式的的體系結(jié)構(gòu) 通常 MVC 模式由 Sun 公司的 JSP 的 Model2 實(shí)現(xiàn)。 MVC 架構(gòu)模式 MVC(ModelViewController:模型 視圖 控制器 )架構(gòu)模式: MVC 模 式是施樂(lè)公司的 Xerox 研究中心 (Xerox PARC)在 20 世紀(jì) 80 年代為編程語(yǔ)言Smalltalk80 發(fā)明的一種軟件設(shè)計(jì)模式,至今已被廣泛使用,最近幾 年被推