【正文】
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/ h a n d l e N e w s . d o ? m e t h o d = d e l e t e N e w s查 找 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返 回 請 求 的 H a n d l e N e w s A c t i o ne x c u t e呼 叫c r e a t e N e w s D A Or e t u r ns a v e ( )r 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) 到 不 同 的 頁 面/ h a n d l e N e w s . d o ? m e t h o d = u p d a t e N e w s/ h a n d l e N e w s . d o ? m e t h o d = a d d N e w sd e l e t e ( )u p d a t e ( ) 圖 新聞管理時序圖 在這了我只說明 添加 新聞的流程 : 由于管理員在操作界面上提出添加新聞的申請要求,系統(tǒng)跳轉(zhuǎn)到 頁面,系統(tǒng)要求管理員輸入新聞類型,新聞標(biāo)題,新聞內(nèi) 27 容點擊提交按鈕提交 action 屬性的 。 (0)。 ().createUserDAO().save(user)。 String userName = ()。時序圖設(shè)計到 6 個對象: UI, ActionServlet,ActionMapping, Action, DAOFactory, DAO。 23 ().setAttribute(userFlag,())。 登錄功能模塊核心代碼如下 : ? 登錄的表單代碼: 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。 ? filters 用于存放過濾器 。 20 在分析玩系統(tǒng)架構(gòu)以后,對包 (package)進行 了相應(yīng)的設(shè)計 Src 目錄下共有 10 個包: ? 用于存放工具類 。 映射文件:它的作用是指定數(shù)據(jù)庫表和映射類之間的關(guān)系,包括映射類和數(shù)據(jù)庫表的對應(yīng)關(guān)系、表字段和類屬性類型的對應(yīng)關(guān)系以及表字段和類屬性名稱的對應(yīng)關(guān)系等。對于 J2EE 應(yīng)用而言,數(shù)據(jù)庫是相對穩(wěn)定的部分,其 DAO 組件依賴于數(shù)據(jù)庫系統(tǒng),提供數(shù)據(jù)庫訪問的接口,只要數(shù)據(jù)庫沒有重構(gòu),則 DAO 層通常無須改寫 ? RequestProcessor 組件:充當(dāng)每個子應(yīng)用模塊的請求處理器。在本系統(tǒng)中,視圖層和控制層使用 Struts 框架實現(xiàn),持久化層和數(shù)據(jù)層使用 Hiberante 實現(xiàn) 。 日志管理 Log4J: Log4j 是一個開源的日志記錄組件,其產(chǎn)品已經(jīng)相當(dāng)?shù)某墒欤沂褂梅浅5膹V泛。與其他的大型數(shù)據(jù)庫例如 Oracle、DB SQL Server 等相比, MySQL 自有它的不足之處,如規(guī)模小、功能有限( MySQL 不支持視圖(已經(jīng)被列入 版的開發(fā)計劃)、事件等)等,但是這絲毫也沒有減少它受歡迎的程度。在輕型體系中,應(yīng)用程序提供 JDBC 連接,并且自行管理事務(wù),這種方式使用了 Hibernate 的一個最小子集;在全面解決體系中,對于應(yīng)用程序來說,所有底層的 JDBC/JTA API 都被抽象了, Hibernate 會替你照管所有的細(xì)節(jié)。它創(chuàng)建并設(shè)置模型。有時它包含的唯一功能就是狀態(tài)。 除了上面的用戶實體外,新聞管理還需要對新聞進行管理,新聞欄目管理和新聞評論管理還要對新聞欄目和新聞評論進行管理 10 ? 新聞實例:用于記錄新聞的基本信息。只是標(biāo)明了該用戶權(quán)限所特有的功能(除了比該用戶權(quán)限低的功能 )。對不同的請求進 行判斷來調(diào)用資源訪問層提供的方法,處理復(fù)雜的算法,并將結(jié)果返回給控 制層 7 ? 資源訪問層 ? 功能:對數(shù)據(jù)庫進行操作,主要提供對數(shù)據(jù)的查詢,刪除,修改功 能的接口。 4 已 已 已 已已 已 已 已 已 已已 已 已 已 已 已已 已 已 已 u s e s u s e s u s e s 已 已 u s e s 圖 已登錄的用戶用例圖 游客 游客是任何能夠登錄到新聞發(fā)布 系統(tǒng)的主頁的人,但是還沒有經(jīng)過驗證登錄的。其圖形化的表示是一個小人。核心功能如下: 新聞的管理:添加新聞,刪除新聞,查看新聞等等 新聞的分類管理:對新聞等信息進行分類管理,其功能可以添加和刪除分類 用戶的管理:添加、編輯和修改用戶 2 第二 章 需求分析 系統(tǒng)需求分析 本課題設(shè)計的目的是 將不同類型的新聞發(fā)布到網(wǎng)絡(luò)上。從而,找到合適的資源 ,成為企業(yè)提高競爭力的重要方法。前臺新聞顯示模塊 主要分為娛樂新聞、教育新聞、體育新聞、軍事新聞以及按分類顯示新聞 。 該系統(tǒng) 涉及到前臺新聞的瀏覽和后臺新聞的管理。在當(dāng)前的市場環(huán)境中,隨著社會的進步和技術(shù)的發(fā)展,信息經(jīng)濟也在迅猛發(fā)展,市場的競爭在很大程度上體現(xiàn)為信息的競爭。 本課題的 研究內(nèi)容 JSP 技術(shù)的應(yīng)用研究、 J2EE 技術(shù)實現(xiàn)多層架構(gòu),使用 STRUTS 和 HIBERNATE技術(shù)及 MYSQL 數(shù)據(jù)庫來設(shè)計和實現(xiàn) B/S 結(jié)構(gòu)的新聞發(fā)布 系統(tǒng)。執(zhí)行者是指用戶在系統(tǒng)中扮演的角色。已登錄的用戶用例圖如圖 所示。 ? 實現(xiàn):本系統(tǒng)采用工廠模式來實現(xiàn)業(yè)務(wù)層的功能。本系統(tǒng)中他們的權(quán)限依次遞增,已登錄用戶具有游客所有的權(quán)限,管理員具有已登錄用戶所有的權(quán)限,所以在圖中就沒有標(biāo)明每類用戶所有的功能。游客在本系統(tǒng)中不需要進行數(shù)據(jù)記錄,所以 對于新聞發(fā)布系統(tǒng)來說真正意義上只有兩種用戶,所以需要 1 個數(shù)據(jù)實體 ? 用戶實體:包括用用戶名,密碼,郵箱,用戶類型標(biāo)志,其中用戶名,密碼,郵箱格式是登錄和注冊時驗證所必需的,這些信息都有管理員來維護 。模型封裝了應(yīng)用程序的狀態(tài)。 控制器組件:負(fù)責(zé)控制用戶輸入的流和狀態(tài); 控制器對用戶的輸入作出反應(yīng)。 Hibernate 具有很大的靈活性,但同時它的體系結(jié)構(gòu)比較復(fù)雜,提供了好幾種不同的運行方式。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一 特點,許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了 MySQL 作為網(wǎng)站數(shù)據(jù)庫。 版本控制 CVS: CVS 是 Concurrent Version System(并行版本系統(tǒng))的縮寫, 是一個版本控制系統(tǒng) ,使用它管理源代碼在多個開發(fā)人員之間的修改。同時層次之間的交互應(yīng)該減少對實現(xiàn)的依賴,通過接口進行交互。 Struts 控制器組建主要包括: ? ActionServlet 組件:充當(dāng) Struts 框架的中心控制器。 ? 根據(jù)當(dāng)前狀態(tài)以及業(yè)務(wù)邏輯執(zhí)行結(jié)果,選擇合適的視圖組件返回給用戶。 19 這種數(shù)據(jù)持久化解決方案的實現(xiàn)方法的示意圖圖下:業(yè)務(wù)層--- DAO--- ORM--- 數(shù)據(jù)庫 DAO 是 J2EE 應(yīng)用的重要組件,她隱藏了底層的數(shù)據(jù)庫訪問細(xì)節(jié),該層向上提供通用的數(shù)據(jù)訪問接口,通過 DAO 組件,可實現(xiàn)業(yè)務(wù)邏輯和數(shù)據(jù)庫訪問的分離,避免業(yè)務(wù)邏輯與具體的數(shù)據(jù)庫訪問實現(xiàn)耦合。 WebRoot 目錄是發(fā)布是網(wǎng)站的根目錄,用于放置 Jsp 頁面, WEBINF 目錄用于存放系統(tǒng)的配置文件,如 等。 ? 用于存放 Struts 的 actionForm 類 。如果不存在,也通過ActionForward 找到對應(yīng)的新聞發(fā)布系統(tǒng)主頁。 ().setAttribute(userPwd,())。 圖 注冊模塊時序圖 注冊頁面 調(diào)用 / 這個 action 完成注 冊功能 注冊 功能的時序圖如圖 所示。 User user = new User()。 (0)。 (userEmail)。時序圖設(shè)計到 6 個對象: UI, ActionServlet,ActionMapping, Action, DAOFactory, DAO。 for (int i = 0。 try { (news, newsForm)。 String time = (d)。 return new ActionForward(/manager/)。 (/HTML)。 }return new ActionForward(/manager/)。 if (() == 0) { (nst)。 ( HEADTITLEA Servlet/TITLE/HEAD)。 List nsts = ().createNewstypeDAO().findByExample(tempNST)。 Date d = new Date()。 (gbk)。實例化 NewsDAO,再調(diào)用NewsDAO 的 findByExample()方法查詢數(shù)據(jù)庫中是否有同樣的新聞 ,如果存在通過說明這個新聞已經(jīng)發(fā)布了,通過 ActionForward 找到對應(yīng)的錯誤信息頁面顯示給管理員。 }else{ ().setAttribute(errorInfo, has bean registered)。 } User mUser=null 。 ListUser list = ().createUserDAO().findByUserName(userName)。實例化 UserDAO,再調(diào)用UserDAO 的 findByUserName()方法查詢數(shù)據(jù)庫中是否有這樣一個用戶名,如果存在通過說明這個用戶名已經(jīng)注冊了,通過 ActionForward 找到對應(yīng)的錯誤信息頁面顯示給用戶。 } return forward。 ListUser list = ().createUserDAO() .findByUserName(())。時序圖設(shè)計到 6 個對象: UI, ActionServlet,ActionMapping, Action, DAOFactory, DAO。 ? 用于存放數(shù)據(jù)源訪問的實現(xiàn)類,處于持久化層 。 在這三種主要的文件中,映射類為普通 Java 源文件、映射文件為 XML 格式、數(shù)據(jù)庫配置文件為 Properties 格式或者是 XML 格式。 簡單的說, ORM 是通過使用描述 對象 和數(shù)據(jù)庫之間映射的 元數(shù)據(jù) ,將 java 程序 中的對象自動持久化到關(guān)系數(shù)據(jù)庫中 。在軟件的分層體系結(jié)構(gòu)中,持久化層是與數(shù)據(jù)庫打交道的邏輯層。 其次,由于所有的請求都經(jīng)過控制器過濾,因此可以降低視圖組件之間,以及視圖組件和模型組件之間的相互依靠關(guān)系,提高每個組件的相對獨立性。 雖然 視圖層和控制層在 MVC 的概念上是分離的,但其實它們之間還是需要有很大的聯(lián)系的,因為控制層需要從視圖層獲取用戶提交的數(shù)據(jù),然后把數(shù)據(jù)進行轉(zhuǎn)換,并傳遞給 業(yè)務(wù) 層;等 業(yè)務(wù) 層處理完數(shù)據(jù)后,控制層還需要把數(shù)據(jù)返回到視圖層,以供用戶查看 通過使用外部的配置文 16 件,可以在運行時配置它。利用PowerDesigner 可以制作數(shù)據(jù)流程圖、概念數(shù)據(jù)模型、物理數(shù)據(jù)模型,可以生成多種客戶端開發(fā)工具的應(yīng)用程序,還可為數(shù)據(jù)倉庫制作結(jié)構(gòu)模型,也能對團隊設(shè)計模型進行控制。 定義一個用戶創(chuàng)建對象的接口,讓子類決定實例化哪一個類。相對于使用 JDBC 和 SQL 來手工操作數(shù)據(jù)庫, Hibernate 可以大 大減少操作數(shù)據(jù)庫的工作量。它是應(yīng)用程序的 外觀。包括用 戶信息,新聞,評論內(nèi)容,發(fā)表的評論時間 基于上面的設(shè)計,開始設(shè)計表,表與表相互關(guān)聯(lián),共同存儲著系統(tǒng)所需要的數(shù)據(jù),在設(shè)計數(shù)據(jù)庫表的過程中,一般要