熊宏杰 李祥 余筱
【摘? 要】每年各校讀書(shū)協(xié)會(huì)的同學(xué)都會(huì)舉行圖書(shū)漂流活動(dòng),但效果甚微,相應(yīng)的網(wǎng)站系統(tǒng)雖能實(shí)現(xiàn)圖書(shū)的交流,但仍不能在圖書(shū)的管理和用戶(hù)的交互有而很大的改進(jìn)。圖書(shū)流動(dòng)困難,圖書(shū)利用率低。本項(xiàng)目旨在開(kāi)發(fā)一個(gè)SSM(spring+springMVC+mybatis)框架的圖書(shū)管理系統(tǒng),與學(xué)校網(wǎng)站如信息門(mén)戶(hù)相結(jié)合,將其推廣實(shí)現(xiàn)圖書(shū)資源的高效利用。本項(xiàng)目的特點(diǎn)在于將實(shí)體的圖書(shū)漂流角進(jìn)行網(wǎng)絡(luò)虛擬化,提高可管理性,將圖書(shū)資源最大化利用建立統(tǒng)一的高校管理服務(wù)平臺(tái),提供專(zhuān)業(yè)和高質(zhì)量的學(xué)習(xí)交流途徑。
【關(guān)鍵詞】圖書(shū)漂流;SSM;JavaWeb
1.項(xiàng)目背景
1.1項(xiàng)目背景及目標(biāo)
“圖書(shū)漂流角”在每個(gè)學(xué)校都存在,并且每年各校讀書(shū)協(xié)會(huì)的同學(xué)都會(huì)舉行圖書(shū)漂流活動(dòng),但效果甚微。主要的問(wèn)題在于圖書(shū)管理問(wèn)題難以解決,即使有學(xué)生愿意將自己的書(shū)籍捐出去,但是過(guò)不了多長(zhǎng)時(shí)間就會(huì)丟失,而且想要尋找資源的人往往不能準(zhǔn)確迅捷的找到自己的目標(biāo),只能在眾多書(shū)籍中一一尋找。雖然相應(yīng)的網(wǎng)站系統(tǒng)能具備圖書(shū)的交流功能,但仍不能得到廣泛的支持。一是學(xué)生捐獻(xiàn)圖書(shū)的意向,因?yàn)槭占攸c(diǎn)的距離消退,而是只有在正規(guī)的網(wǎng)站發(fā)表和宣傳同學(xué)們才能接受圖書(shū)漂流這種書(shū)籍資源高效利用的新方法,因此可將本項(xiàng)目與學(xué)校網(wǎng)站如信息門(mén)戶(hù)相結(jié)合,將其推廣實(shí)現(xiàn)圖書(shū)資源的高效利用。
本項(xiàng)目的目標(biāo)是讓更多學(xué)生參與圖書(shū)漂流,使之在校內(nèi)流轉(zhuǎn),推而廣之,各高校學(xué)生之間也可進(jìn)行相應(yīng)圖書(shū)交流。項(xiàng)目成熟后,我們會(huì)為系統(tǒng)升級(jí),實(shí)現(xiàn)除圖書(shū)資源以外其它資料的交流。本項(xiàng)目實(shí)現(xiàn)圖書(shū)的簡(jiǎn)便管理以方便用戶(hù)的操作以及管理員的管理,投放圖書(shū)的人會(huì)詳細(xì)提供圖書(shū)信息,此保證書(shū)籍的完整和真實(shí)。
1.2項(xiàng)目創(chuàng)新特色概述
(1)中通過(guò)分類(lèi)實(shí)現(xiàn)自主管理實(shí)現(xiàn)用戶(hù)輕松使用和管理員輕松管理。
(2)將實(shí)體的圖書(shū)漂流角進(jìn)行網(wǎng)絡(luò)虛擬化,提高可管理性,將圖書(shū)資源最大化利用,建立統(tǒng)一的高校管理服務(wù)平臺(tái),提供專(zhuān)業(yè)和高質(zhì)量的學(xué)習(xí)交流途徑。
2.技術(shù)簡(jiǎn)介
此系統(tǒng)采用Spring、SpringMVC、Mybatis后端技術(shù)進(jìn)行網(wǎng)站后臺(tái)的搭建,使用JQuery、HTML、CSS、JavaScript、Ajax進(jìn)行前端頁(yè)面的編寫(xiě),主要技術(shù)如下:
2.1 Spring、SpringMVC簡(jiǎn)介
Spring是一個(gè)開(kāi)源的、輕量級(jí)的Java開(kāi)發(fā)框架,在該網(wǎng)站使用Spring減少了代碼的書(shū)寫(xiě)量,將實(shí)例交給spring進(jìn)行管理,通過(guò)Bean進(jìn)行Java對(duì)象、Java組件的管理和處理。在系統(tǒng)創(chuàng)建的過(guò)程中使用的是Maven進(jìn)行項(xiàng)目的管理,減少出錯(cuò)的概率。
Spring組成:
Spring Core:提供Spring框架的基本功能,提供了依賴(lài)注入來(lái)實(shí)現(xiàn)容器對(duì)Bean的管理。
Spring AOP:面向切面編程 ,使用AOP可以將通用邏輯(事務(wù)管理、日志管理等)分離出來(lái)然后統(tǒng)一切入到業(yè)務(wù)邏輯代碼中。
Spring DAO:使用JDBC時(shí)需要取得連接、創(chuàng)建語(yǔ)句、處理結(jié)果、關(guān)閉連接,這會(huì)導(dǎo)致大量的重復(fù)代碼,而SpringDAO模塊抽取了這些重復(fù)的代碼,不僅能保證數(shù)據(jù)庫(kù)方位代碼的過(guò)程簡(jiǎn)潔而且還能防止因數(shù)據(jù)庫(kù)資源關(guān)閉失敗而引起的問(wèn)題。
Spring Context:向Spring框架提供上下文信息。如果說(shuō)BeanFactory使Spring成為一個(gè)容器,那么上下文模塊便使得Spring成為一個(gè)框架。
SpringIOC::控制反轉(zhuǎn),由Spring來(lái)負(fù)責(zé)對(duì)象的生命周期和對(duì)象間的關(guān)系。主要通過(guò)DI(依賴(lài)注入)來(lái)實(shí)現(xiàn)IOC,本系統(tǒng)使用標(biāo)注注入的方式。注入需要在配置文件中寫(xiě)大量的代碼為了簡(jiǎn)化配置文件,Spring提供了標(biāo)注注入,常見(jiàn)的注解標(biāo)記如下:
@Component:通用注解
@Controller:控制層組件注解
@Resource:默認(rèn)按照名稱(chēng)進(jìn)行注入
@Autowired:默認(rèn)按類(lèi)型注入
@Service:業(yè)務(wù)層組件注解
@Value:基本值注入
SpringMVC簡(jiǎn)介:
SpringMVC是典型的MVC結(jié)構(gòu),其提供了模型、視圖和控制器相關(guān)的主要實(shí)現(xiàn)組件,具體如下:
DispatcherServlet:前端控制器,是SpringMVC的中央調(diào)度器,是請(qǐng)求的入口,當(dāng)請(qǐng)求到達(dá)前端控制器,由其來(lái)調(diào)用其他的組件處理用戶(hù)的請(qǐng)求。
HandlerMapping:處理器映射,請(qǐng)求派發(fā),DispatcherServlet會(huì)一句HandlerMapping來(lái)調(diào)用相應(yīng)的Controller組件
Controller:二級(jí)控制器,也可以成為后端控制器,負(fù)責(zé)具體的請(qǐng)求處理流程,然后將處理結(jié)果返回給前端控制器
ModelAndView:模型,封裝了處理結(jié)果數(shù)據(jù)和視圖名稱(chēng)信息。
ViewResolver:視圖,視圖顯示處理器
SpringMVC常見(jiàn)注解:
@Controller:定義控制器,簡(jiǎn)化配置文件,降低侵入性
@Responsebody:放在方法上,表示返回類(lèi)型將會(huì)直接作為HTTP響應(yīng)字節(jié)輸出,此注解可以方便的將數(shù)據(jù)自動(dòng)轉(zhuǎn)換為JSON格式字符轉(zhuǎn)返回到客戶(hù)端。
@RequestMapping:用來(lái)定義訪問(wèn)的URL,放在類(lèi)級(jí)別上,也可以放在方法級(jí)別上
@PathVariabble:用來(lái)獲取請(qǐng)求URL中的動(dòng)態(tài)參數(shù),在使用SpringMVC創(chuàng)建RESTful API時(shí)會(huì)用到
2.2 Mybatis技術(shù)介紹
Mybatis支持普通SQL查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射;對(duì)JDBC戶(hù)數(shù)進(jìn)行封裝,簡(jiǎn)化數(shù)據(jù)庫(kù)操作代碼;使用簡(jiǎn)單的XML或注解用于配置和映射,將接口和Java對(duì)象映射成數(shù)據(jù)庫(kù)中的記錄。此系統(tǒng)中使用注解的方式對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行操作。
按照功能Mybatis可以分為三層,分別是接口層、數(shù)據(jù)處理層、基礎(chǔ)支撐層。
接口層:作用是和數(shù)據(jù)庫(kù)進(jìn)行交互,提供可供外部使用的接口,開(kāi)發(fā)人員可以通過(guò)這些本地接口來(lái)操作數(shù)據(jù)庫(kù)。包括數(shù)據(jù)的增刪改查,獲取配置接口
數(shù)據(jù)處理層:是Mybatis的核心層。包括參數(shù)映射、SQL解析、SQL執(zhí)行和結(jié)果映射四部分。
基礎(chǔ)支撐層:將共用的組件抽取出來(lái)為數(shù)據(jù)處理層提供最基礎(chǔ)的功能支撐,包含連接管理、事務(wù)管理、配置加載和緩存處理。
2.3 Ajax及JQuery、Thymeleaf
JQuery是一個(gè)強(qiáng)大的JavaScript庫(kù)??梢钥焖?、簡(jiǎn)潔的實(shí)現(xiàn)JavaScript代碼可以簡(jiǎn)化HTML文檔元素的遍歷、事件處理、動(dòng)畫(huà)和Ajax交互可以實(shí)現(xiàn)快速的Web開(kāi)發(fā)。
功能:
方便快捷獲取DOM元素:使用純JavaScript的方式遍歷DOM以及查詢(xún)DOM中的某一部分,需要編寫(xiě)冗余的代碼,使用JQuery只需要一行代碼就可以了。
動(dòng)態(tài)修改CSS樣式:使用JQuery可以動(dòng)態(tài)修改頁(yè)面的CSS,即使在頁(yè)面展現(xiàn)出來(lái)以后,JQuery仍然可以改變文檔中某個(gè)部分的類(lèi)或者樣式屬性。
動(dòng)態(tài)改變DOM內(nèi)容:使用JQuery可以很容易的對(duì)頁(yè)面DOM進(jìn)行修改。
響應(yīng)用戶(hù)的教化操作:JQuery提供了截取頁(yè)面時(shí)間的適當(dāng)方式,而不需要使用時(shí)間處理程序拆散HTML代碼。此外,他的事件處理API也滿(mǎn)足瀏覽器的不一致性。
為頁(yè)面添加動(dòng)態(tài)效果:JQuery內(nèi)置了一批淡入、淡出、擦除等動(dòng)態(tài)效果
JQuery Ajax操作:JQuery統(tǒng)一了多種瀏覽器的Ajax操作。
Thymeleaf是一個(gè)XML/XHTML/HTML5模板引擎,可用于Web與非Web環(huán)境中的應(yīng)用開(kāi)發(fā)。它是一個(gè)開(kāi)源的Java庫(kù),Thymeleaf提供了一個(gè)用于整合Spring MVC的可選模塊。 使用Thymeleaf可以創(chuàng)建動(dòng)態(tài)的頁(yè)面渲染頁(yè)面,減少了使用jQuery對(duì)頁(yè)面進(jìn)行數(shù)據(jù)操作,可以實(shí)現(xiàn)頁(yè)面數(shù)據(jù)的動(dòng)態(tài)更新等。
此系統(tǒng)中使用JQuery和Ajax實(shí)現(xiàn)前后端數(shù)據(jù)的交互行為。
2.4加密
使用Java自帶的Base64對(duì)輸入的重要信息進(jìn)行加密存儲(chǔ),保證系統(tǒng)的安全性,防止數(shù)據(jù)的泄露。
3.系統(tǒng)概述
3.1表現(xiàn)層
本系統(tǒng)的表現(xiàn)層是通過(guò)HTML、JQuery、Ajax、CSS技術(shù),以web頁(yè)面的方式展示給用戶(hù),在從前端向后端傳輸數(shù)據(jù)的過(guò)程中利用了兩種技術(shù)方式,一種是通過(guò)form表單的形式,另一種是通過(guò)ajax技術(shù)的方式,進(jìn)行前后端的交互,ajax的使用使前后端交互更加便捷,同時(shí)可以實(shí)現(xiàn)異步刷新的作用,不會(huì)每次都刷新整個(gè)頁(yè)面,這樣極大的提高了用戶(hù)的體驗(yàn)。利用jquery框架可以更容易的對(duì)JavaScript進(jìn)行使用,在部分頁(yè)面使用CSS和Thymeleaf對(duì)頁(yè)面進(jìn)行渲染。
所需要的主要頁(yè)面有:
(1)注冊(cè)頁(yè)面:用來(lái)填寫(xiě)普通用戶(hù)的主要信息。(2)登錄頁(yè)面:填寫(xiě)登錄用戶(hù)信息的用戶(hù)名和密碼,并進(jìn)行登錄驗(yàn)證。(3)主頁(yè):就是用戶(hù)進(jìn)入的首頁(yè),在這里展示的該網(wǎng)站所表達(dá)的主題,可以看到網(wǎng)站的功能,可以搜索書(shū)籍,查看書(shū)籍信息。(4)管理員管理頁(yè)面:對(duì)管理員進(jìn)行分級(jí),不同級(jí)別的管理員擁有不同的權(quán)限。(5)書(shū)籍詳情頁(yè):書(shū)籍詳情頁(yè)顯示的是該書(shū)籍的所有信息,包括作者和時(shí)間,同時(shí)在文章的底部將看到評(píng)論的內(nèi)容,所有用戶(hù)對(duì)該文章的評(píng)論的內(nèi)容都會(huì)顯示在底部。
3.2業(yè)務(wù)邏輯層
業(yè)務(wù)邏輯層主要處理前端控制器傳來(lái)的請(qǐng)求和數(shù)據(jù),后端通過(guò)地址映射分發(fā)到對(duì)應(yīng)的控制器,進(jìn)行相應(yīng)的業(yè)務(wù)上的邏輯處理,在進(jìn)行業(yè)務(wù)邏輯處理的時(shí)候,通過(guò)springmvc注解的形式。通過(guò)注解的形式減少了配置文件的繁瑣,代碼整體看上去更加整潔,維護(hù)性起來(lái)更加方便,在后端進(jìn)行控制器,服務(wù)接口層,服務(wù)實(shí)現(xiàn)層的分層排布,同時(shí)利用mybatis框架對(duì)DAO層進(jìn)行封裝,在mybtis的DAO文件中寫(xiě)sql語(yǔ)句,這樣方便修改和便于對(duì)sql語(yǔ)句的管理。
服務(wù)接口層主要是用來(lái)向各個(gè)實(shí)現(xiàn)方法提供接口,不同的方法根據(jù)不同的功能可以對(duì)同一個(gè)接口進(jìn)行不同的業(yè)務(wù)邏輯,接口層的使用讓代碼邏輯看起來(lái)更加的清晰,服務(wù)實(shí)現(xiàn)層主要實(shí)現(xiàn)的是對(duì)數(shù)據(jù)的處理,通過(guò)調(diào)用數(shù)據(jù)層的方法來(lái)從數(shù)據(jù)庫(kù)中取出相應(yīng)的數(shù)據(jù),根據(jù)固定返回條件,返回給控制器的業(yè)務(wù)邏輯中,控制器對(duì)返回來(lái)的數(shù)據(jù)進(jìn)行處理,經(jīng)過(guò)業(yè)務(wù)邏輯處理,通過(guò)Model類(lèi)進(jìn)行封裝,返回給前端控制器。
3.3數(shù)據(jù)層
該層主要對(duì)數(shù)據(jù)進(jìn)行更新和讀取,作為業(yè)務(wù)層和數(shù)據(jù)庫(kù)的中間層,主要為邏輯服務(wù)提供數(shù)據(jù),通過(guò)DAO層對(duì)數(shù)據(jù)進(jìn)行分離,將數(shù)據(jù)邏輯和數(shù)據(jù)源進(jìn)行分離操作,并最終能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)對(duì)象的基本操作。
數(shù)據(jù)庫(kù)的需求分析:
數(shù)據(jù)庫(kù)需求分析屬于軟件過(guò)程的需求分析階段,數(shù)據(jù)庫(kù)分析的作用是通過(guò)搜集用戶(hù)的需求來(lái)指導(dǎo)數(shù)據(jù)庫(kù)的設(shè)計(jì)。
通過(guò)以上分析,現(xiàn)在可以將數(shù)據(jù)庫(kù)的需求整理出來(lái):
(1)用戶(hù)信息表:包括用戶(hù)名,密碼,電話(huà)號(hào)碼, (2)用戶(hù)角色表:用戶(hù)的id,標(biāo)志位判斷是否是管理員,還是普通用戶(hù),還是超級(jí)管理員。(3)內(nèi)容表,該表存儲(chǔ)了書(shū)籍的信息。包括的字段有:書(shū)名,簡(jiǎn)介,書(shū)籍id,書(shū)籍編號(hào),標(biāo)志位判斷內(nèi)容的分類(lèi)信息。(4)圖片表:存儲(chǔ)圖片的信息。(5)評(píng)論表,該表存儲(chǔ)了對(duì)書(shū)籍的評(píng)論內(nèi)容,包括評(píng)論的內(nèi)容,評(píng)論者,回復(fù)對(duì)象的用戶(hù)名,用戶(hù)id,回復(fù)對(duì)象的id,文章的id.
代碼地址:https://gitee.com/skyspatur/demo
參考文獻(xiàn)
[1]郭炳宇,王田甜等.移動(dòng)互聯(lián)后臺(tái)設(shè)計(jì)與開(kāi)發(fā)[M].北京:高等教育出版社,2017
[2]郭炳宇,王田甜等.移動(dòng)互聯(lián)Web前端開(kāi)發(fā)[M].北京:高等教育出版社,2017
基金項(xiàng)目:江蘇大學(xué)2019年度大學(xué)生實(shí)踐創(chuàng)新訓(xùn)練計(jì)劃項(xiàng)目,項(xiàng)目編號(hào):201910299504X
作者簡(jiǎn)介:
熊宏杰(2000.3--),,男,漢族,甘肅華亭人,江蘇大學(xué)本科在讀,計(jì)算機(jī)方向。
李祥(2000.9--),男,漢族,江蘇宿遷人,江蘇大學(xué)本科在讀,計(jì)算機(jī)方向。
余筱(2000.8--),女,漢族,江蘇南京人,江蘇大學(xué)本科在讀,計(jì)算機(jī)方向。