【正文】
游客可以登錄,登錄成功后可以獲得更多的權(quán)限 ? 游客可以注冊,注冊后在進(jìn)行登錄可以獲得更多的權(quán)限 ? 已登錄用戶具有游客所有的權(quán)限 ? 已登錄 用戶 還 可以對(duì)新聞進(jìn)行評(píng)論 ? 已登錄 用戶還可以注銷登陸 ? 管理員具有用戶所有的權(quán)限 ? 管理員 還可以 對(duì)新聞進(jìn)行管理 ? 管理員 還可以 對(duì)新聞欄目進(jìn)行管理 ? 管理員 還可以 對(duì)用戶進(jìn)行管理 ? 管理員 還可以 對(duì)評(píng)論進(jìn)行管理 業(yè)務(wù)用例 用例圖是用來確定需求的范圍,這些需求是設(shè)計(jì)開發(fā)的依據(jù)。其圖形化的表示是一個(gè)小人。系統(tǒng)管理員角色用例圖 如圖 所示。 4 已 已 已 已已 已 已 已 已 已已 已 已 已 已 已已 已 已 已 u s e s u s e s u s e s 已 已 u s e s 圖 已登錄的用戶用例圖 游客 游客是任何能夠登錄到新聞發(fā)布 系統(tǒng)的主頁的人,但是還沒有經(jīng)過驗(yàn)證登錄的。本系統(tǒng)的第一層數(shù)據(jù)流圖如 所示,描述系統(tǒng)由那幾部分組成,各部分之間有什么聯(lián)系。對(duì)不同的請求進(jìn) 行判斷來調(diào)用資源訪問層提供的方法,處理復(fù)雜的算法,并將結(jié)果返回給控 制層 7 ? 資源訪問層 ? 功能:對(duì)數(shù)據(jù)庫進(jìn)行操作,主要提供對(duì)數(shù)據(jù)的查詢,刪除,修改功 能的接口。用戶管理包括對(duì)用戶的添加,刪除功 能;新聞管理包括對(duì)新聞的添加,刪除和修改功能;新聞欄目管理包括對(duì)新聞欄目的添加,刪除,修改功能;評(píng)論管理包括對(duì)評(píng)論的查找和刪除功能; 該 模塊的功能結(jié)構(gòu)圖如圖 所示。只是標(biāo)明了該用戶權(quán)限所特有的功能(除了比該用戶權(quán)限低的功能 )。 打 開 主 頁是 否 登 錄是 否 已 注 冊否注 冊瀏 覽 新 聞 , 發(fā) 表 評(píng) 論結(jié) 束是 否 是 管 理員否新 聞 , 新 聞 欄 目 ,用 戶 和 評(píng) 論 管 理是登 錄 否注 冊 失 敗注 冊 成 功是登 錄 成 功登 錄 成 功瀏 覽 新 聞注 銷 圖 系統(tǒng)業(yè)務(wù)流程圖 系統(tǒng)數(shù)據(jù)庫設(shè)計(jì) 數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì) 根據(jù)功能模塊劃分的結(jié)果。 除了上面的用戶實(shí)體外,新聞管理還需要對(duì)新聞進(jìn)行管理,新聞欄目管理和新聞評(píng)論管理還要對(duì)新聞欄目和新聞評(píng)論進(jìn)行管理 10 ? 新聞實(shí)例:用于記錄新聞的基本信息。數(shù)據(jù)庫表關(guān)系圖如圖 所示 發(fā)表留言新聞新聞留言n e w st yp en e w sT yp e I dn e w sT yp e N a m eT e xtT e xtu se ru se r I du se r N a m eu se r P w du se r E m a i lu se r F l a gT e xtT e xtT e xtT e xtT e xtr e p l a yr e p l a yI dr e p l a yC o n t e n tr e p l a yT i m eT e xtT e xtT e xtn e w sn e w sI dn e w sT i t l en e w sC o n t e n tn e w sT i m eT e xtT e xtT e xtT e xt 圖 數(shù)據(jù)庫表關(guān)系圖 ER 圖 ER 圖如圖 所示 11 圖 ER 圖 數(shù)據(jù)庫表總覽 數(shù)據(jù)庫表總覽 表名 功能說明 newstype 表 存儲(chǔ)新聞欄目信息 news 表 存儲(chǔ)新聞信息 user 表 存儲(chǔ)用戶信息 replay 表 存儲(chǔ)評(píng)論信息 數(shù)據(jù)庫表設(shè)計(jì) 由數(shù)據(jù)模型利用 MySql 進(jìn)行數(shù)據(jù)庫的詳細(xì)設(shè)計(jì),其基本表的設(shè)計(jì)如下: (1) 新聞欄目 (newstype) 中文字段名 英文字段名 字段類型 長度 主鍵 /外 鍵 字段值約束 新聞欄目編號(hào) newsTypeId varchar 32 P NOT NULL 欄目名稱 newsTypeName varchar 32 (2) 新聞 (news) 中文字段名 英文字段名 字段類型 長度 主鍵 /外鍵 字段值約束 新聞編號(hào) newsId varchar 32 P NOT NULL 新聞標(biāo)題 newsTitle varchar 32 新聞內(nèi)容 newsContent varchar 2020 新聞發(fā)布時(shí)間 newsTime varchar 32 12 (3) 用戶 信息 (user) 中文字段名 英文字段名 字段類型 長度 主鍵 /外鍵 字段值約束 用戶編號(hào) userId varchar 32 P NOT NULL 用戶名 userName varchar 32 密碼 userPwd varchar 32 用戶類型 userFlag varchar 32 (4) 評(píng)論 (replay) 中文字段名 英文字段名 字段類型 長度 主鍵 /外鍵 字段值約束 評(píng)論編號(hào) replayId varchar 32 P NOT NULL 評(píng)論內(nèi)容 userName varchar 32 評(píng)論時(shí)間 userPwd varchar 32 13 第四 章 系統(tǒng)的開發(fā)工具 開發(fā)技術(shù) 本 系統(tǒng) 是采用 Struts+Hibernate 技術(shù) 和 Mysql 數(shù)據(jù)庫 來開發(fā)的 。有時(shí)它包含的唯一功能就是狀態(tài)。視圖可以訪問模型的讀方法,但不能訪問寫方法。它創(chuàng)建并設(shè)置模型。 另外 Hibernate 可以利用代理模式來簡化載入類的過程,這將大大減少利用 Hibernate QL 從數(shù)據(jù)庫提取數(shù)據(jù)的代碼的 14 編寫量,從而節(jié)約開發(fā)時(shí)間和開發(fā)成本 Hibernate 可以和多種 Web 服務(wù)器或者應(yīng)用服務(wù)器良好集成,如今已經(jīng)支持幾乎所有的流行的數(shù)據(jù)庫服務(wù)器。在輕型體系中,應(yīng)用程序提供 JDBC 連接,并且自行管理事務(wù),這種方式使用了 Hibernate 的一個(gè)最小子集;在全面解決體系中,對(duì)于應(yīng)用程序來說,所有底層的 JDBC/JTA API 都被抽象了, Hibernate 會(huì)替你照管所有的細(xì)節(jié)。 DAOFactory使一個(gè)類的實(shí)例化延遲到其子類。與其他的大型數(shù)據(jù)庫例如 Oracle、DB SQL Server 等相比, MySQL 自有它的不足之處,如規(guī)模小、功能有限( MySQL 不支持視圖(已經(jīng)被列入 版的開發(fā)計(jì)劃)、事件等)等,但是這絲毫也沒有減少它受歡迎的程度。它可與許多流行的數(shù)據(jù)庫設(shè)計(jì)軟件,例如: PowerBuilder,Delphi, VB 等相配合使用來縮短開發(fā)時(shí)間和使系統(tǒng)設(shè)計(jì)更優(yōu)化 。 日志管理 Log4J: Log4j 是一個(gè)開源的日志記錄組件,其產(chǎn)品已經(jīng)相當(dāng)?shù)某墒?,且使用非常的廣泛。在本系統(tǒng)中,我們利用 log4j 來記錄網(wǎng)站運(yùn)行時(shí)所產(chǎn)生的日志,以幫助技術(shù)人員維護(hù)網(wǎng)站。在本系統(tǒng)中,視圖層和控制層使用 Struts 框架實(shí)現(xiàn),持久化層和數(shù)據(jù)層使用 Hiberante 實(shí)現(xiàn) 。 控制層 控制層使用 Struts 框架實(shí)現(xiàn) Struts 控制器 組件 負(fù)責(zé)接處理視圖層和業(yè)務(wù)層之間的數(shù)據(jù)交互,視圖層之 間狀態(tài)流程的控制,同時(shí)負(fù)責(zé)簡單的數(shù)據(jù)驗(yàn)證和格式化等功能。 ? RequestProcessor 組件:充當(dāng)每個(gè)子應(yīng)用模塊的請求處理器。由控制器組件來決定把合適的視圖組件返回給用用戶,這可以減少視圖組件之間直接的,錯(cuò)綜復(fù)雜的連接關(guān)系,使應(yīng)用更加靈活,便于維護(hù)。 在數(shù)據(jù)庫中對(duì)數(shù)據(jù)的增加、刪除、查找和修改操作由持久化層來處理。對(duì)于 J2EE 應(yīng)用而言,數(shù)據(jù)庫是相對(duì)穩(wěn)定的部分,其 DAO 組件依賴于數(shù)據(jù)庫系統(tǒng),提供數(shù)據(jù)庫訪問的接口,只要數(shù)據(jù)庫沒有重構(gòu),則 DAO 層通常無須改寫 使用它實(shí)現(xiàn) ORM 功能的時(shí)候,主要的文件有:映射類( *.java)、映射文件( *.)以及數(shù)據(jù)庫配置文件( *.properties 或 *.),它們各自 的作用如下。 映射文件:它的作用是指定數(shù)據(jù)庫表和映射類之間的關(guān)系,包括映射類和數(shù)據(jù)庫表的對(duì)應(yīng)關(guān)系、表字段和類屬性類型的對(duì)應(yīng)關(guān)系以及表字段和類屬性名稱的對(duì)應(yīng)關(guān)系等。想理解 “映射 ”首先我們需要知道如何解析這三種文件,即解析 XML 格式文件、解析 Properties 格式文件和解析 Java 類文件。 20 在分析玩系統(tǒng)架構(gòu)以后,對(duì)包 (package)進(jìn)行 了相應(yīng)的設(shè)計(jì) Src 目錄下共有 10 個(gè)包: ? 用于存放工具類 。 ? 用于存放 hibernate 輔助類 。 ? filters 用于存放過濾器 。 U I A c t i o n S e r v l e t A c t i o nD A O F a c t o r y D A O用 戶 請 求 發(fā) 送 l o g i n . d o查 找 A c t i o n M a p p i n gA c t i o n M a p p i n g返 回 請 求 的 L o g i n A c t i o ne x c u t e呼 叫c r e a t e U s e r D A Or e t u r nf i n d B y U s e r N a m er e t r u nr e t u r n A c t i o n F o r w a r d根 據(jù) 不 同 的 A c t i o n F o r w a r d 跳 轉(zhuǎn) 到 不 同 的 頁 面 圖 登錄模塊時(shí)序圖 22 用戶輸入用戶名,密碼提交表單,提交 action 屬性的 ActionServlet讀取 文件查找 action_mappings 中的 action下的 path屬性為 ,通過, name 屬性找到 frombeans 中的 formbean 的 name 屬性得到 ActionForm 的包名類名,先實(shí)例化 form,把表單的值填充給 form,調(diào)用 form 的validate 方法驗(yàn)證, ActionMessages 返回 null 表示驗(yàn)證通過,否則是不返回 input指定的頁面,驗(yàn)證通過將實(shí)例化 action,執(zhí)行 action 的 excute 方法。 登錄功能模塊核心代碼如下 : ? 登錄的表單代碼: html:form action=/ method=post TD align=left background=picture/ html:text property=userName size=13 / FONT color=redhtml:errors property=userNameLogin / /FONT html:password property=userPwd size=13 / FONT color=redhtml:errors property=userPwdLogin / /FONT/TD TD class=daxiao bgColor=ffffff INPUT type=image src=picture/ value=提交 name=Submit /TD /html:form ? Struts 中的 loginAction 代碼為: public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws IOException LoginForm loginForm = (LoginForm) form。 if (list != null) { if (() 0) { user = (0)。 23 ().setAttribute(userFlag,())。 }}} () .setAttribute(errorInfo, This user is not exit!)。時(shí)序圖設(shè)計(jì)到 6 個(gè)對(duì)象: UI, ActionServlet,ActionMapping, Action, DAOFactory, DAO。如果不存在,通過 UserDAO 的 save()方法將信息保存到數(shù)據(jù)庫,再通過 ActionForward 找到登錄頁面。 String userName = ()。 if(list == null){ (userName)。 ().createUserDAO().save(user)。 if(()0){ mUser = (0)。 (0)。 forward = (registerError)。 U I A c t i o n S e r v l e t A c t i o nD A O F a c t o r y D A O/