【正文】
Criteria 接口負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫(kù)查詢(xún)。 FreeMarker被設(shè)計(jì)用來(lái) 生成 HTML Web 頁(yè)面,特別是基于 MVC 模式的應(yīng)用程序。 系統(tǒng)總體結(jié)構(gòu)概述 此次開(kāi)發(fā)的主要目標(biāo) 是 構(gòu)建一個(gè)屬于個(gè)人的知識(shí)管理 工具 —— 個(gè)人數(shù)字圖書(shū)館 ,此 個(gè)人數(shù)字圖書(shū)館 的主要功能是在線(xiàn)注冊(cè)過(guò)的用戶(hù) 都 能夠通過(guò)此平臺(tái)最終達(dá)到個(gè)人知識(shí)的組織和管理并能和 該平臺(tái)上 和 的其他注冊(cè)用戶(hù) 交流和共享資料的 目的。 系統(tǒng)參與者功能描述 參與者 (Actor)是系統(tǒng)外部的一個(gè)實(shí)體,可以是一個(gè)人、各種軟件系統(tǒng)或應(yīng)用,它與某種方式參與用例的執(zhí)行過(guò)程。 現(xiàn)在已經(jīng) 明確了系統(tǒng)參與者的具體功能,下面就可以對(duì)其功能進(jìn)行細(xì)致的分析 和實(shí)現(xiàn)。 個(gè)人數(shù)字圖書(shū)館注冊(cè)用戶(hù)的圖書(shū)管理子用例圖如圖 33 所示。 本章小結(jié) 本章主要對(duì)系統(tǒng)的功能性需求進(jìn)行詳細(xì)的分析和獲取, 到 此, 個(gè)人數(shù)字圖書(shū)館系統(tǒng) 所應(yīng)該有 的功能已清晰地呈現(xiàn)出來(lái) 。這三個(gè)特性都是圍繞面向?qū)ο笤O(shè)計(jì)的目的 —— 實(shí)現(xiàn)支持可維護(hù)性的復(fù)用,同時(shí),可維護(hù)性復(fù)用都是以面向?qū)ο笤O(shè)計(jì)原則為基礎(chǔ)的。 ( 4) 依賴(lài)倒轉(zhuǎn)原則:要針對(duì)抽象層編程,而不要針對(duì)具體類(lèi)編程。 信息功能模塊的功能設(shè)計(jì)如圖 42 所示。 空間 : 每個(gè)注冊(cè)用戶(hù)系統(tǒng)都分配了 1GB 容量的空間。 用戶(hù)實(shí)體與日志實(shí)體的 ER 圖如圖 44 所示。 其中實(shí)現(xiàn)與數(shù)據(jù)庫(kù)交互的文件是 ,其他實(shí)體類(lèi)都要在此類(lèi)中配置相對(duì)應(yīng)的映射路徑,如: mapping resource=/model/ / mapping resource=/model/ / mapping resource=/model/ / 23 信息科學(xué)與技術(shù)學(xué)院學(xué)士學(xué)位論文 圖 46 Hibernate 中實(shí)體類(lèi)的設(shè)計(jì) mapping resource=/model/ / mapping resource=/model/ / mapping resource=/model/ / mapping resource=/model/ / 其中實(shí)體類(lèi)的設(shè)計(jì)都是定義了數(shù)據(jù)類(lèi)型和對(duì)應(yīng)的 get、 set方法,這樣就提高了實(shí)體類(lèi)的可復(fù)用性。前臺(tái)頁(yè)面的請(qǐng)求就是通過(guò)它來(lái)實(shí)現(xiàn)和業(yè)務(wù)功能的間接交互的。 本章小結(jié) 本章 主要講述了面向?qū)ο笤O(shè)計(jì)的原則、系統(tǒng)功能模塊的詳細(xì)設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)、業(yè)務(wù)邏輯層的設(shè)計(jì)和 Web 層的設(shè)計(jì),通過(guò)本章的閱讀相信讀者不但對(duì)面向?qū)ο笤O(shè)計(jì)的原則有所了解,同時(shí),也對(duì)個(gè)人數(shù)字圖書(shū)館系統(tǒng)的功能 、系統(tǒng) 整體框架結(jié)構(gòu) 有了清晰的認(rèn)識(shí)。 在此 以 互相發(fā)送 信息 實(shí)現(xiàn)為例, 其中信息的類(lèi) 在包 model 中,此類(lèi)包含的數(shù)據(jù)屬性如 下: private int messageID。 //信息主題 private String messcont。 } if (()255) { (messcont_big, 信件內(nèi)容太長(zhǎng)了?? )。 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory()。 } public void Inster() { //實(shí)現(xiàn)發(fā)送信息的方法 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory()。 (())。 } } 其他功能模塊的實(shí)現(xiàn)與信息發(fā)送功能的實(shí)現(xiàn)類(lèi)似,在這里就不再作展示了。 功能描述:用戶(hù)登錄系統(tǒng)、退出系統(tǒng) 。 輸入:選擇需要上傳或下載的資料 。 測(cè)試輸出:如圖 66 所示, 67 所示。 ( 2) 測(cè)試用例 2: 功能名稱(chēng): 刪除用戶(hù)。 39 信息科學(xué)與技術(shù)學(xué)院學(xué)士學(xué)位論文 結(jié)束語(yǔ) 在論文開(kāi)始之初,本人查閱了很多與知識(shí)管理、個(gè)人知識(shí)管理、圖書(shū)管理相關(guān)的資料文獻(xiàn),這對(duì)于系統(tǒng)的功能設(shè)計(jì)有很大的幫助。 由于受時(shí)間和本人能力的限制,本論文和系統(tǒng)都有很多不足之處,如已實(shí)現(xiàn)的功能還很脆弱,且在安全性、界面友好性等方面都存在著需要改進(jìn)和提高的地方。 輸入: 管理員已正常登陸,并選中刪除用戶(hù)。 圖 66 發(fā)送信息 頁(yè)面 圖 67 接收信息 頁(yè)面 38 信息科學(xué)與技術(shù)學(xué)院學(xué)士學(xué)位論文 系統(tǒng)后臺(tái)功能測(cè)試 ( 1) 測(cè)試用例 1: 功能名稱(chēng): 刪除用戶(hù)資料。 36 信息科學(xué)與技術(shù)學(xué)院學(xué)士學(xué)位論文 測(cè)試輸出:如圖 64 所示, 65 所示。 正常輸出:登錄成功后輸出個(gè)人主頁(yè),退出成功后輸出感謝頁(yè)面。 所以 要在項(xiàng)目中 添加 Struts2 的應(yīng)用,需在系統(tǒng)中配置相應(yīng)的 文件: !定義 Struts2 的 StrutsPrepareAndExecuteFilter 的 Filter filter filternamestruts2/filtername filterclass. /filterclass /filter ! StrutsPrepareAndExecuteFilter 用來(lái)初始化 Struts2 并且處理所有的 Web 請(qǐng)求 filtermapping filternamestruts2/filtername urlpattern/*/urlpattern /filtermapping 由于項(xiàng)目系統(tǒng)中前臺(tái)頁(yè)面由 Freemarker 實(shí)現(xiàn),所以還應(yīng)在 中添加一個(gè)作為 引導(dǎo)作用的 action,如下: action name=index class= resultname=success type=freemarker/pages//result /action 信息列表在前臺(tái)顯示的主要代碼如下: p共 ${count?if_exists}條消息 p list myList as Message p 發(fā)件人: ${} br/主題: ${} a href=?messageID=${}顯示 /a br/font color=green 時(shí)間: ${}/font 33 信息科學(xué)與技術(shù)學(xué)院學(xué)士學(xué)位論文 a href=?messageID=${}刪除 /a /list p/ 信息詳細(xì)內(nèi)容在前臺(tái)顯示的主要代碼如下: fieldset legend消息內(nèi)容 /legend labelfont color=green發(fā)件人: /font/label${sendname}p/ labelfont color=green主題: /font/label${theme}p/ labelfont color=green內(nèi)容: /font/label${messagecont} /fieldset 由以 上展示的代碼可知使用 Freemarker 技術(shù)使得前臺(tái)頁(yè)面的編碼非常簡(jiǎn)單,大大的降低了開(kāi)發(fā)的難度,其他頁(yè)面的顯示與此類(lèi)似,這里就不再作過(guò)多的展示了。 (messcont)。 Transaction tx = ()。 Transaction tx = ()。 } if (!check(receivename)) { return ERROR。 if ((null)) { (receivename_null, 收件人不能為空! )。 //收信人名稱(chēng) private String sendname。 系統(tǒng)開(kāi)發(fā)環(huán)境與技術(shù) 本 系統(tǒng) 開(kāi)發(fā)模式為 瀏覽器 /服務(wù)器 B/S(Browser/Server)架構(gòu)模式, 采用主流框架SSH 中的 Struts2 和 Hibernate, Tomcat 為服務(wù)器支持, 客戶(hù)端運(yùn)行環(huán)境為Windows/20xx/XP+ 以上版本, 采 用 Freemarker 實(shí)現(xiàn)前臺(tái)頁(yè)面的顯示 , MYSQL做后臺(tái)數(shù)據(jù)庫(kù) , Myeclipse IDE 作為開(kāi)發(fā)工具 。 25 信息科學(xué)與技術(shù)學(xué)院學(xué)士學(xué)位論文 U s e r I D U s e r N a m e S e x P a s s w o r d N i c k N a m e E m a i l D e s c r i p t i o n I f P u b l i cU s e r M e s s a g e I D M e s s a g e C o n t e n t S e n d N a m e T h e m e S e n d T i m e U s e r N a m eM e s s a g e+ e x e c u t e ( ) M e s s a g e I DM e s s a g e D e l+ e x e c u t e ( )+ i n s t e r ( )+ c h e c k ( ) M e s s a g e C o n t e n t R e c e i v e N a m e T h e m eM e s s a g e S e n d+ e x e c u t e ( ) M e s s a g e I D M e s s a g e C o n t e n t S e n d N a m e T h e m eM e s s a g e S h o w1n1nn1n1 圖 49 發(fā)送信息類(lèi)圖 Web 層設(shè)計(jì) Web 層可以形象的描述為一個(gè)傳遞者、中間者的角色, 它在系統(tǒng)中的任務(wù)是簡(jiǎn)單的處理瀏覽器端的請(qǐng)求,如驗(yàn)證輸入數(shù)據(jù)的合法性等;通過(guò)驗(yàn)證后再與服務(wù)器交互,最后將處理的請(qǐng)求結(jié)果返回給瀏覽器端。如完成數(shù)據(jù)添 加、 刪除 和查詢(xún)業(yè)務(wù)等;不允許指定的文本框中輸入空字符串,數(shù)據(jù)格式是否正確及數(shù)據(jù)類(lèi)型驗(yàn)證;用戶(hù) 資料 權(quán)限的判斷等等,通過(guò)以上的諸多判斷以決定是否將操作繼續(xù)向后傳遞,盡量保證程序的正常運(yùn)行。 表 44 日志數(shù)據(jù)表 字段名稱(chēng) 數(shù)據(jù)類(lèi)型 字段大小 允許空 主鍵 diaryID int 10 否 是 username varchar 45 否 否 diaryType varchar 45 否 否 diaryTitle varchar 45 否 否 diaryContent varchar 255 否 否 diaryTime datetime 0 否 否 用戶(hù)實(shí)體與信息實(shí)體的 ER 圖如圖 45 所示。 共享資料 :注冊(cè)用戶(hù) 共享的資料,所有用戶(hù)可見(jiàn) 。 數(shù)據(jù)庫(kù)設(shè)計(jì) 在進(jìn)行數(shù)據(jù)庫(kù)的設(shè)計(jì)之前,先要明確系統(tǒng)的實(shí)體對(duì)象。 16 信息科學(xué)與技術(shù)學(xué)院學(xué)士學(xué)位論文 ( 6) 合成 復(fù)用原則:在系統(tǒng)中應(yīng)該盡量多使用組合和聚合的關(guān)聯(lián)關(guān)系,盡量少使用甚至不使用繼承關(guān)系。 面向?qū)ο笤O(shè)計(jì)的七個(gè)原則: ( 1) 單一職責(zé)原則 : 類(lèi)的職責(zé)要單一,不能將太多的職責(zé)放在一個(gè)類(lèi)中。 軟件產(chǎn)品的非功能性需求是指產(chǎn)品為了滿(mǎn)足用戶(hù)業(yè)務(wù)需求 外還 必須具備可靠性性能 、 響應(yīng)時(shí)間 、 容錯(cuò)性 、 擴(kuò)展性等等。 ( 3)前置條件 : 用戶(hù)已登錄 個(gè)人數(shù)字圖書(shū)館系統(tǒng) 此圖書(shū)管理模塊的活動(dòng)圖如圖 34 所示。用例圖包含 6 個(gè)元素,分別是:參與者 (Actor)、用例 (Use Case)、關(guān)聯(lián)關(guān)系 (Association)、包含關(guān)系 (Include)、擴(kuò)展關(guān)系 (Extend)以及泛化關(guān)系 (Generalization)。參與者由參與用例時(shí)所擔(dān)當(dāng)?shù)慕巧珌?lái)表示,一個(gè)參與者可以參與一個(gè)或多個(gè)用例。 個(gè) 人 數(shù) 字 圖 書(shū) 館 前 臺(tái) 用 戶(hù) 后 臺(tái) 管 理 員 我的資料管理 常用功能 圖書(shū)管理 發(fā)布日志 搜索資料 用戶(hù)管理 備忘錄管理 信息管理 收藏管理 資料管理 圖 31 系統(tǒng)總體結(jié)構(gòu)框圖 由圖 31 可以看出,系統(tǒng)主要由前臺(tái)和后臺(tái)兩部分構(gòu)成,前臺(tái)主要是提供給系統(tǒng)的 注冊(cè) 用戶(hù) 使用 。 本章小結(jié) 本章主要對(duì)系統(tǒng)中使用到的技術(shù)作了簡(jiǎn)單的介紹,首先介紹了 UML 建模語(yǔ)言中不同圖列表示的含義;其次介紹了 MVC 的三層結(jié)構(gòu)模式;然后對(duì) Struts、 Hibernate、Freemarker 簡(jiǎn)單的介紹了它們的來(lái)源、發(fā)展、技術(shù)核心和應(yīng)用。 Freemarker 簡(jiǎn)介 簡(jiǎn)單的說(shuō), Freemarker 就是一種用 Java 編寫(xiě)的模版引擎,它的工作原理是:模版 +數(shù)據(jù) = 輸出,它根據(jù)模板輸出多種規(guī)格的文本如: HTML、 XML、 Java 等。這里用到了工廠模式。這 6 個(gè)核心接口在任何開(kāi)發(fā)中都會(huì)用到。 Struts 2 提供了豐富的標(biāo)簽庫(kù),通過(guò)標(biāo)簽庫(kù)可以減少腳本的使用,自定義的標(biāo)簽庫(kù)可以實(shí)