基于WEB的新聞發(fā)布系統(tǒng)的設計與實現(xiàn)_第1頁
基于WEB的新聞發(fā)布系統(tǒng)的設計與實現(xiàn)_第2頁
基于WEB的新聞發(fā)布系統(tǒng)的設計與實現(xiàn)_第3頁
基于WEB的新聞發(fā)布系統(tǒng)的設計與實現(xiàn)_第4頁
基于WEB的新聞發(fā)布系統(tǒng)的設計與實現(xiàn)_第5頁
已閱讀5頁,還剩61頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

66/66 目錄 TOC\o"1-4"\h\u6760第1章前言 11411第2章系統(tǒng)概述 1280712.1設計模式 1116592.1.1MVC模式差不多原理 2263372.2.2MVCModel1 3271502.2.3MVCModel2 3175172.3小結 430028第3章系統(tǒng)設計 481113.1系統(tǒng)總體設計 4129813.1.1系統(tǒng)構架 4101183.1.2系統(tǒng)類設計 5210113.2視圖層設計 6162173.2.1前臺設計 6227713.2.2后臺設計 6121163.3模型層設計 7113483.3.1前臺顯示和用戶登錄 7142973.3.2新聞治理 7176473.3.3欄目治理 8105443.4操縱層設計 8190873.4.1用戶登錄 8271313.4.2新聞治理 8305453.4.3欄目治理 8271243.5數(shù)據(jù)庫設計 8270793.5.1數(shù)據(jù)庫概念設計 8112703.5.2數(shù)據(jù)庫表設計 913643.6數(shù)據(jù)庫連接設計 10106853.6.1傳統(tǒng)的數(shù)據(jù)庫連接 10149023.7小結 139118第4章系統(tǒng)實現(xiàn) 1369404.1視圖層實現(xiàn) 13196954.1.1公共頁面 1351834.1.2前臺實現(xiàn) 15304414.1.3后臺實現(xiàn) 16307954.2模型層實現(xiàn) 18159934.2.1新聞顯示 18311404.2.2新聞治理 1963854.2.3欄目治理 1968634.3操縱層實現(xiàn) 19162184.3.1用戶登錄 20140734.3.2新聞治理 20136414.3.3欄目治理 2130694.4小結 2120324第5章系統(tǒng)運行測試 21146815.1系統(tǒng)測試環(huán)境 21325005.1.1系統(tǒng)測試硬件環(huán)境 219965.1.2系統(tǒng)測試軟件環(huán)境 2149275.2系統(tǒng)測試 2227735總結 2326242參考文獻 2422235致謝 2523474附錄 26伴隨著網(wǎng)絡的出現(xiàn),網(wǎng)頁逐漸融入人們的生活??焖偌皶r的新聞掃瞄,五彩繽紛的網(wǎng)上信息,使網(wǎng)絡與人們的生活息息相關,因此世界上出現(xiàn)了第三媒體——Internet。它打破了地域限制,真正使信息得以共享,改變了人們的工作和生活方式。人們對信息的需求有了更新,更高的要求,而網(wǎng)頁由于本身所具有的信息量大,傳遞快速,沒有時空限制等特點恰好滿足這種要求。也正是由于網(wǎng)絡實現(xiàn)網(wǎng)站的數(shù)據(jù)信息能夠進行實時交互,保證網(wǎng)站數(shù)據(jù)的實時性。隨著Internet信息技術的高速進展,越來越多的企業(yè)想將自己企業(yè)的信息通過網(wǎng)絡與全世界分享并最終實現(xiàn)電子商務,因此它們差不多建立或打算建立自己的網(wǎng)站。然而,假如為了建立和維護自己的網(wǎng)站而聘請專職的網(wǎng)絡技術人員,其成本關于一個中小型企業(yè)來講實在是太高了。關于上面這類企業(yè)來講,他們最需要的確實是一個現(xiàn)成的能夠自動公布信息的新聞公布系統(tǒng),如此只要會打字,會上網(wǎng)就能利用新聞公布系統(tǒng)快速簡潔地公布企業(yè)信息。然而傳統(tǒng)的信息公布方式差不多不適應那個快速變化的信息時代,需要一個更高效,更簡潔的方式進行信息公布。內(nèi)容治理系統(tǒng)正是基于如此一個目的而誕生的,它是企業(yè)信息化建設和電子政務的新寵。它的差不多思想是分離信息內(nèi)容和表現(xiàn)形式,內(nèi)容存儲在數(shù)據(jù)庫或獨立的文件中,而表現(xiàn)形式存儲在模版里。當用戶請求頁面時,各部分聯(lián)合生成一個標準的HTML頁面;當信息修改時,用戶只需在一個可視化的界面對信息內(nèi)容進行修改。大大縮短了信息的更新時刻,提高了效率,同時簡化了操作。本設計便是基于內(nèi)容治理思想的一個新聞公布系統(tǒng),以下各章從系統(tǒng)概述、需求分析、系統(tǒng)設計、系統(tǒng)實現(xiàn)、系統(tǒng)運行測試和系統(tǒng)評價與改進依次展現(xiàn)系統(tǒng)開發(fā)過程。本章要緊介紹在系統(tǒng)開發(fā)過程中所采納系統(tǒng)設計模式。2.1設計模式隨著Web技術的進展,Web內(nèi)容從一些靜態(tài)頁面進展到內(nèi)容豐富的動態(tài)頁面。目前,用于生成動態(tài)網(wǎng)頁較為流行的技術有Microsoft的ASP、Tex的PHP和Sun的JSP。ASP只能工作在微軟的IIS(InternetInformationServer)和PWS(PersonalWebServer)上及PHP模式,一些天生缺陷使得它們的使用受到了一定的制約。而JSP是一種完全與平臺無關的開發(fā)新技術,它集極高的運行效率,較短的開發(fā)周期,超強的擴展能力,完全開放的技術標準,自由的開發(fā)方式等眾多完美特性于一身。JSP+JavaBean+Servlet+JDBC是一套能夠?qū)崿F(xiàn)動態(tài)網(wǎng)站的開發(fā)和維護的技術。JDBC用于連接數(shù)據(jù)庫并對數(shù)據(jù)庫進行存儲,Servlet用于處理過程操縱,JavaBean用于封裝業(yè)務邏輯,JSP用于頁面顯示部分。而MVC正是這種設計模式代表。2.1.1MVC模式差不多原理MVC(Model-View-Controller),即把一個應用的輸入、處理、輸出流程按照Model,View,Controller的方式進行分離,如此一個應用被分成三個層——模型層、視圖層、操縱層,其三層之間的關系和功能如圖2-1“MVC組件類型關系和功能圖”。圖2-1 MVC組件類型關系和功能圖MVC設計模式的典型流程[4]為:首先Controller接收用戶的請求,并決定應該調(diào)用哪個Model來進行處理,然后Model用業(yè)務邏輯來處理用戶的請求并返回數(shù)據(jù),最后Controller用相應的View格式化Model返回的數(shù)據(jù),并通過表示層呈現(xiàn)給用戶。操縱層(Controller)能夠理解為從用戶接收請求,將模型與視圖匹配在一起,共同完成用戶的請求。劃分操縱層的作用也專門明顯,它清晰地告訴我們,它確實是一個分發(fā)器,選擇什么樣的模型,選擇什么樣的視圖,能夠完成什么樣的用戶請求。操縱層并不做任何的數(shù)據(jù)處理。例如,用戶點擊一個鏈接,操縱層同意請求后,并不處理業(yè)務信息,它只把用戶的信息傳遞給模型,告訴模型做什么,選擇符合要求的視圖返回給用戶。因此,一個模型可能對應多個視圖,一個視圖可能對應多個模型。模型層(Model)確實是業(yè)務流程/狀態(tài)的處理以及業(yè)務規(guī)則的制定。業(yè)務流程的處理過程對其它層來講是黑箱操作,模型同意視圖請求的數(shù)據(jù),并返回最終的處理結果。業(yè)務模型的設計能夠講是MVC最要緊的核心,必須能夠滿足大多數(shù)客戶的需求,包括保證應用程序各組件的事務整合、維護并快速獵取應用數(shù)據(jù),支持事務工作流的協(xié)調(diào)以及在已有應用程序中集成新的應用組件等。MVC并沒有提供模型的設計方法,而只告訴我們應該組織治理這些模型,以便于模型的重構和提高重用性。視圖層(View)代表用戶交互界面,關于Web應用來講,能夠概括為HTML界面,但有可能為XHTML,XML和Applet。隨著應用的復雜性和規(guī)模性,界面的處理也變得具有挑戰(zhàn)性。一個應用可能有專門多不同的視圖,MVC設計模式關于視圖的處理僅限于視圖上數(shù)據(jù)的采集和處理,以及用戶的請求,而不包括在視圖上的業(yè)務流程的處理。業(yè)務流程的處理交予模型(Model)處理。2.2.2MVCModel1在MVC模式的Model1體系中,JSP頁面獨立響應請求并將出理結果返回客戶,所有的數(shù)據(jù)存取差不多上由JavaBean來完成。Model1體系十分適合簡單應用需要,卻不能滿足復雜的大型應用程序的實現(xiàn)。MVCModel1的體系結構如圖2-2所示。圖2-2 MVCModel1體系結構圖2.2.3MVCModel2MVC模式的Model2體系結構是一種把JSP與Servlet聯(lián)合起來實現(xiàn)動態(tài)內(nèi)容服務的方法。它吸取了兩種技術的優(yōu)點,用JSP生成表達層的內(nèi)容,讓Servlet完成深層次的處理任務。這是一種有代表性的方法,它清晰地分離了表達和內(nèi)容,明確了角色的定義及開發(fā)者與網(wǎng)頁設計者的分工。本系統(tǒng)的設計模式選擇的便是Model2。MVCModel2的體系結構如圖2-3所示。圖2-3 MVCModel2體系結構圖2.3小結本章對MVC設計模式差不多原理進行了詳細闡述,并介紹了MVC的兩種不同的模式Model1和Model2,并確定本系統(tǒng)的設計模式便是MVCModel2。依照上一章的需求用例分析,本章從先總體構架的角度對系統(tǒng)進行總體設計,然后依照MVC三層模式對系統(tǒng)進行詳細設計,最后對系統(tǒng)數(shù)據(jù)庫和數(shù)據(jù)庫連接池進行了設計。3.1系統(tǒng)總體設計3.1.1系統(tǒng)構架系統(tǒng)基于MVCModel2設計模式,設計出本系統(tǒng)自己的設計模式,在MVCModel2基礎上加入數(shù)據(jù)庫連接池模塊層對數(shù)據(jù)庫操作進行封裝。具體模式圖如圖3-1。圖3-1 系統(tǒng)設計模式圖關于MVC設計模式,在本系統(tǒng)中具體實現(xiàn)方式是:Model由JavaBean完成,View由JSP完成,Controller由Servlet完成,再加上數(shù)據(jù)庫連接池專門負責數(shù)據(jù)庫連接和治理。本系統(tǒng)具體構架如圖3-2。圖3-2 系統(tǒng)構架圖3.1.2系統(tǒng)類設計在本系統(tǒng)中,依照對系統(tǒng)需求的分析,能夠總結出如下的需求集:(1)系統(tǒng)應該分為前臺和后臺;(2)系統(tǒng)前臺應該能夠顯示新聞欄目和新聞以及用于治理員登錄系統(tǒng)后臺的登錄界面;(3)一般用戶應該能夠在前臺自由掃瞄新聞,包括選擇性地掃瞄新聞即先選擇新聞欄目再掃瞄新聞欄目下的新聞條目;(4)注冊用戶能夠發(fā)表相關新聞的評論;(4)系統(tǒng)治理員應該能夠登錄到系統(tǒng)后臺;(5)系統(tǒng)治理員應該能夠?qū)π侣剻谀亢托侣勥M行查看、修改、刪除和添加操作,也能夠?qū)ψ杂脩糁卫恚瑫r還能夠?qū)ο嚓P新聞的評論進行治理。由以上需求集進一步分析可知:(1)“新聞欄目”和“新聞”為系統(tǒng)的兩個要緊內(nèi)容,因此應該分不作為一個類,而新聞欄目和新聞的顯示需要治理類進行治理,系統(tǒng)治理員要對欄目和新聞進行查看、添加、修改和刪除,也需要相應的治理類進行治理,因此,系統(tǒng)關于新聞欄目和新聞分不需要“欄目治理類”和“新聞治理類”;(2)系統(tǒng)中應該要有超級治理員、治理員、注冊用戶等角色,超級治理員是最高權限的,治理員是超級治理員發(fā)放的,注冊用戶是前臺注冊產(chǎn)生的。(3)系統(tǒng)要保存信息,必須用到數(shù)據(jù)庫,因此需要一個數(shù)據(jù)庫連接的類;(4)要將系統(tǒng)的各個功能執(zhí)行成功,少不了相應的操縱類。因此,識不出系統(tǒng)要緊的類:新聞治理類(NewsJdbc),欄目治理類(NewclaJdbc),用戶治理類(RoleJdbc),評論治理類(Pingl)數(shù)據(jù)庫連接的連接對象類(JdbcConn)以及各個Servlet類。3.2視圖層設計3.2.1前臺設計當一個用戶掃瞄新聞系統(tǒng)時,首先進入系統(tǒng)前臺界面。假如把一個系統(tǒng)比作一個人,那么前臺界面則是那個人的臉,因此系統(tǒng)的前臺界面的設計是比較重要的,同時,前臺界面應該被設計得比較簡潔,方便。首先,在本系統(tǒng)的前臺界面的頂部用戶能夠看到一個專為注冊用戶提供的登錄入口,為用戶提供了方便。而關于一般用戶來講,他們也可不能感受這有何不妥,因為此登錄界面比較簡潔,并可不能阻礙用戶正常地閱讀新聞。其次,在登錄界面的下方是新聞欄目的顯示,顯示系統(tǒng)新聞欄目數(shù)據(jù)庫中已有的新聞欄目,一目了然,用戶能夠方便地找到自己喜愛和關懷的新聞所在的欄目。再次,在新聞欄目的下方則是新聞條目的顯示,默認的新聞條目的顯示方式是以表格的形式將系統(tǒng)新聞數(shù)據(jù)表中的新聞按公布時刻進行列表(公布較早的新聞被放在列表的后面,而公布較遲的新聞被放在列表的前面,體現(xiàn)了新聞的“新”,即“時效性”)。新聞列表中僅顯示新聞的標題,公布時刻和新聞作者,假如想掃瞄整篇新聞,用戶能夠點擊新聞標題(超鏈接)。然后,用戶能夠?qū)ψ约罕容^關懷和感興趣的新聞進行有選擇性地掃瞄,這時新聞欄目便起作用了。當用戶點擊新聞所在的欄目時,系統(tǒng)在新聞列表中只顯示本欄目的新聞條目。用戶能夠在此掃瞄自己關懷和感興趣的新聞。3.2.2后臺設計后臺主頁面設計當用戶登錄到系統(tǒng)后臺時,他便成為系統(tǒng)治理員,能夠執(zhí)行對新聞和欄目的查看、修改、刪除和添加。此界面要緊是面向治理員的,界面要設計得簡潔方便,使得系統(tǒng)治理員在治理系統(tǒng)時容易操作。當治理員用戶登錄到系統(tǒng)后臺時,呈現(xiàn)到他眼前的是系統(tǒng)后臺治理的主頁面:首先,系統(tǒng)后臺主頁面左上角是歡迎詞(歡迎+用戶級不+治理員名),關于治理員,他能夠感受到系統(tǒng)的人性化;關于系統(tǒng)本身,系統(tǒng)能夠識不現(xiàn)在登錄的是哪個治理員,能夠分配治理員的權限。其次,歡迎詞下方是系統(tǒng)治理的功能選擇,一目了然,治理員能夠在此選擇要操作的模塊進入,然后執(zhí)行相應的操作。再次,再往下確實是系統(tǒng)新聞列表,與前臺新聞顯示類似,只是多了對新聞的操作(修改和刪除)。治理員能夠在此對系統(tǒng)已有的新聞進行修改和刪除操作。添加新聞設計假如系統(tǒng)治理員在系統(tǒng)后臺主頁面中選擇“添加新聞”,治理員會進入下圖如此一個頁面進行新聞的添加,添加完新聞標題和新聞正文內(nèi)容后,還必須選擇所添加新聞所屬的新聞欄目。確認所有內(nèi)容均已填好,點擊“發(fā)表”按鈕,新聞公布工作完成,假如點擊“清除”按鈕,則系統(tǒng)清除治理員剛才的所有輸入,讓治理員重新填寫新聞的各項內(nèi)容。治理員能夠在系統(tǒng)后臺主頁面中看到剛剛發(fā)表的新聞,能夠?qū)ζ溥M行相關操作。欄目治理設計假如系統(tǒng)治理員在系統(tǒng)后臺主頁面中選擇“欄目治理”,系統(tǒng)將鏈接到新聞欄目治理頁面。欄目治理頁面上有一些鏈接按鈕,能夠讓治理員鏈接到其他頁面。鏈接按鈕下面是系統(tǒng)已有新聞欄目的列表,在此,治理員能夠?qū)π侣劰枷到y(tǒng)的欄目進行操作(編輯和刪除欄目)。假如治理員想要添加新聞欄目,只需點擊“添加欄目”,就能夠被鏈接到添加新聞欄目頁面,添加欄目完成后,治理員能夠在欄目治理主頁面的欄目列表中找到新添加的欄目,并對其進行相關操作。3.3模型層設計本系統(tǒng)模型層由JavaBean完成,模型層設計要緊設計出完成各個功能模塊中模型層的JavaBean類。模型層的類要緊新聞治理類NewsJdbc以及欄目治理類NewclaJdbc。3.3.1前臺顯示和用戶登錄在前臺顯示和用戶登錄模塊中,充當模型層的是News和Newcla依照系統(tǒng)分析中的系統(tǒng)前臺需求用例分析和上述的前臺界面功能描述,對系統(tǒng)的前臺的每一個流程、每一個模塊進行詳細功能設計。3.3.2新聞治理治理員在系統(tǒng)后臺主界面中能夠?qū)σ延行侣勥M行治理(修改、刪除和添加),新聞治理模塊中充當模型層的仍然是News和Newcla。3.3.3欄目治理欄目治理中能夠?qū)σ延袡谀康木庉?、刪除以及添加新欄目。3.4操縱層設計3.4.1用戶登錄當用戶通過系統(tǒng)前臺提供的登錄入口登錄后臺系統(tǒng)時,系統(tǒng)將用戶的登錄信息提交給登錄操縱層處理。因此登錄操縱器必須對用戶登錄信息進行識不,推斷其是否有權限登錄到后臺系統(tǒng)。用戶登錄操縱器由LoginServlet完成。3.4.2新聞治理新聞治理中要緊涉及到新聞信息的添加、刪除和修改,因此其操縱層由NewsServlet完成。3.4.3欄目治理欄目治理模塊要緊對新聞欄目進行修改、刪除和添加,此功能模塊操縱層由NewclaServlet完成。3.5數(shù)據(jù)庫設計3.5.1數(shù)據(jù)庫概念設計依照上面的數(shù)據(jù)庫需求分析,就能夠構造出各種實體,以及并依照它們的關系繪制出實體間的E-R圖,為以后的邏輯設計打下基礎。如圖3-1為本新聞公布系統(tǒng)實體間的E-R圖。圖3-3 實體之間關系的E-R圖3.5.2數(shù)據(jù)庫表設計數(shù)據(jù)庫邏輯設計完畢后,現(xiàn)在能夠?qū)⑸厦娴臄?shù)據(jù)庫概念結構轉(zhuǎn)化為某種數(shù)據(jù)庫系統(tǒng)所支持的實際數(shù)據(jù)庫模型。本系統(tǒng)使用Mysql數(shù)據(jù)庫。新聞公布系統(tǒng)的數(shù)據(jù)庫中各表的設計結果如下面幾個表所示。圖3-4 新聞欄目表圖3-5 新聞表圖3-6 用戶表圖3-7 評論表3.6數(shù)據(jù)庫連接設計3.6.1傳統(tǒng)的數(shù)據(jù)庫連接傳統(tǒng)的數(shù)據(jù)庫連接模式差不多上是按以下步驟進行:①在主程序(如Servlet、Beans)中建立數(shù)據(jù)庫連接;②進行SQL操作,取出數(shù)據(jù);③斷開數(shù)據(jù)庫連接。本系統(tǒng)也是才用此鏈接方式,連接類JbdcConn.Java代碼如下:packagecom.newsinfo.db;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;publicclassJdbcConn{ privateJdbcConn(){ } static{ try{ //1.加載數(shù)據(jù)庫連接驅(qū)動 Class.forName("com.mysql.jdbc.Driver"); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } } publicstaticConnectiongetConn(){ //2.創(chuàng)建數(shù)據(jù)庫的連接 Connectionconn=null; try{ conn=DriverManager.getConnection("jdbc:mysql://:3306/data","root","123"); System.out.println("連接數(shù)據(jù)庫成功!"); }catch(SQLExceptione){ e.printStackTrace(); } returnconn; } //釋放資源 publicstaticvoidfree(Statementst,ResultSetrs,Connectionconn){ try{ if(rs!=null){ rs.close(); rs=null; } }catch(SQLExceptione){ e.printStackTrace(); }finally{ try{ if(st!=null){ st.close(); st=null; } }catch(SQLExceptione){ e.printStackTrace(); }finally{ try{ if(conn!=null){ conn.close(); conn=null; } }catch(SQLExceptione){ e.printStackTrace(); } } } }}3.7小結本章首先進行了系統(tǒng)總體設計,接著按照MVC設計模式的三層結構依照系統(tǒng)需求用例對新聞公布系統(tǒng)功能進行設計,最后設計出系統(tǒng)的數(shù)據(jù)庫并對數(shù)據(jù)庫連接進行了相應的設計。通過本章,系統(tǒng)設計出了用來完成系統(tǒng)用例的業(yè)務功能模型以及完成各個用例的類。依照上一章的設計思路設計用來完成系統(tǒng)用例的業(yè)務功能,整個系統(tǒng)按照MVC模式的三個部分以及數(shù)據(jù)庫連接池進行編碼實現(xiàn),分為視圖層、操縱層、模型層和數(shù)據(jù)庫連接池。由于系統(tǒng)實現(xiàn)的代碼量較大限于篇幅,文中僅顯示部分代碼。4.1視圖層實現(xiàn)在系統(tǒng)其它視圖層部分實現(xiàn)之前,先對那些常用的公共頁面模塊部分實現(xiàn)。4.1.1公共頁面top.jsp中包含了其它頁面常用到的頁面頭部的設計。具體代碼如下:<%@pageimport="com.newsinfo.mag.NewclaJdbc"%><%@pageimport="java.util.List"%><%@pageimport="com.newsinfo.vo.Newcla"%><linkrel="stylesheet"href="css/css.css"type="text/css"></link><%@pagelanguage="java"pageEncoding="UTF-8"%><divalign="center">歡迎進入長江師范學院新聞網(wǎng)    <scriptlanguage="JavaScript"type="text/javascript"src="/2009/Js/today.js"></script><aonClick="this.style.behavior='url(#default#homepage)';this.setHomePage('http:///');"href="javascript:void(0);">設為主頁</a>  <ahref="javascript:window.external.AddFavorite('http://','XXX')">加入收藏</a><br></div><tablewidth="850"border="0"align="center"cellpadding="0"cellspacing="0"><tr><tdwidth="850"height="141"align="center"valign="middle"background="img/top.jpg"><embedsrc="img/1.swf"quality="high"wmode="transparent"pluginspage="/go/getflashplayer"type="application/x-shockwave-flash"width="850"height="120"></embed><ahref="index.jsp">首頁</a>|<%NewclaJdbcnj=newNewclaJdbc();List<Newcla>cla=nj.selcetFenlei();for(Newclaone:cla){%><ahref="news.jsp?cla=<%=one.getNewcla_id()%>"><%=one.getNewcla()%></a>|<%}%><ahref="register.jsp">會員注冊</a></td></tr></table>footer.jsp中包含了其它頁面常用到的頁面尾部的設計。具體代碼如下:<linkrel="stylesheet"href="css/css.css"type="text/css"></link><%@pagelanguage="java"pageEncoding="UTF-8"%><tablewidth="850"height="81"border="0"align="center"cellpadding="0"cellspacing="0"class="bk"><tr><tdheight="37"align="center">copyright@zkmy2010  版權所有:曾曉龍  <ahref="admin/login.jsp">治理入口</a></td></tr><tr><tdheight="40"align="center"valign="top">聯(lián)系地址:長江師范學院郵編:408100QQ:359257073</td></tr></table>本系統(tǒng)的CSS設計了兩個CSS樣式表(css.css、sc.css)它要緊設置頁面中顯示的Body結構的樣式、超鏈接A的樣式、頁面中表格Table樣式等的設置。CSS樣式表能夠使系統(tǒng)整體風格一致。4.1.2前臺實現(xiàn)系統(tǒng)前臺視圖層由index.jsp實現(xiàn)。index.jsp僅負責顯示新聞欄目和系統(tǒng)已有新聞以及為治理員用戶提供一個登錄入口。index.jsp頁面顯示截圖如圖4-1。圖4-1 index.jsp頁面實現(xiàn)截圖4.1.3后臺實現(xiàn)系統(tǒng)后臺視圖層要緊由admin_news.jsp、admin_newsinsert.jsp、admin_newcla.jsp、admin_newclainsert.jsp、admin_role.jsp和admin_roleinsert.jsp組成。admin_news.jsp是系統(tǒng)后臺主頁面。事實上現(xiàn)顯示截圖如圖4-2。圖4-2 admin_news.jsp實現(xiàn)截圖admin_newsinsert.jsp實現(xiàn)新聞的添加。當用戶在后臺主頁面中選擇添加新聞按鈕時,治理員便進入此頁面。事實上現(xiàn)截圖如圖4-3。圖4-3 admin_newsinsert.jsp實現(xiàn)截圖admin_newcla.jsp實現(xiàn)新聞欄目的治理,治理員能夠在此對進行新聞欄目的相關操作。事實上現(xiàn)截圖如圖4-4。圖4-4 admin_newcla.jsp實現(xiàn)截圖admin_newclainsert.jsp它實現(xiàn)欄目的添加功能。事實上現(xiàn)截圖如圖4-5。圖4-5 admin_newclainsert.jsp實現(xiàn)截圖admin_role.jsp實現(xiàn)的是對本系統(tǒng)用戶的治理,事實上現(xiàn)截圖如圖4-6。圖4-6 admin_role.jsp實現(xiàn)截圖admin_roleinsert.jsp它實現(xiàn)治理員的添加功能,事實上現(xiàn)截圖如圖4-7。圖4-7 admin_roleinsert.jsp實現(xiàn)截圖4.2模型層實現(xiàn)模型層實現(xiàn)中要緊給出了實現(xiàn)功能模塊中的各類的功能函數(shù),具體代碼見附件。4.2.1新聞顯示在前臺頁面中顯示系統(tǒng)已有新聞,需要新聞類NewsJdbc和新聞治理類NewclaJdbc。在此模塊中要緊實現(xiàn)將新聞數(shù)據(jù)庫中的新聞顯示到前臺頁面中。實現(xiàn)新聞顯示的功能函數(shù)如下: publicList<Newsinfo>selectByNewcla(intnewcla)//2.依照新聞類不顯示新聞信息 publicList<Newsinfo>selectone(intid)//5.依照ID查詢單個新聞。 publicList<Newsinfo>selectAll()//6.查詢所有新聞 publicList<Newsinfo>selectBySS(intnewcla,ints)//7.依照條件查詢某一類不、查詢多少條新聞 publicList<Newsinfo>selecthits(ints)//8.依照點擊量查詢新聞 publicList<Newsinfo>selectNew(ints)//9.查詢最新公布的新聞 publicvoidaddHits(intid,inthit)//10.點擊自動加一 publicList<Newsinfo>selectByLike(Strings)//11.模糊查詢4.2.2新聞治理新聞治理模塊是在系統(tǒng)后臺對已有新聞進行編輯和刪除以及添加新聞。在新聞治理類中如此實現(xiàn)新聞治理: publicbooleancreateNews(Newsinfone)//1.添加新聞publicbooleanupdateNew(Newsinfone)//3.依照給出的條件,更新新聞信息publicintdeleteNew(intid)//4.給出條件,刪除新聞4.2.3欄目治理欄目治理模塊中,要緊實現(xiàn)新聞欄目的添加、編輯和刪除。欄目治理類NewclaJdbc如下實現(xiàn)欄目治理功能: publicList<Newcla>selcetFenlei()//查詢所有新聞分類 publicintdeletecla(intid)//依照ID刪除新聞分類 publicbooleaninsertcla(Newclacla)//添加新聞分類 publicList<Newcla>selcetById(intid)//依照ID查詢新聞分類 publicbooleanupdateUserById(Newclacla)//更新新聞分類4.3操縱層實現(xiàn)本系統(tǒng)的操縱層由Servlet實現(xiàn)。這些作為操縱層的Servlet接收用戶的請求,并調(diào)用作為Model的JavaBean來進行處理,然后Model用業(yè)務邏輯來處理用戶請求并返回數(shù)據(jù),最后Servlet用相應的View來格式化Model返回的數(shù)據(jù),通過表示層呈現(xiàn)給用戶。在實現(xiàn)Servlet之前,首先要在Tomcat中配置好Servlet運行的環(huán)境,并配置本應用程序的web.xml配置文件,其Servlet在web.xml配置的差不多格式如下:<!--Defineservlets--><servlet><servlet-name>XXServlet</servlet-name><servlet-class>ClassPath.XXServlet</servlet-class></servlet><!--Defineservletsmapping--><servlet-mapping><servlet-name>XXServlet</servlet-name><url-pattern>/XXServlet</url-pattern></servlet-mapping>在使用Servlet之前都必須在web.xml中定義好Servlet才能夠正常使用。下面具體實現(xiàn)每個Servlet。4.3.1用戶登錄在此用戶登錄功能中,最重要的確實是LoginServlet的實現(xiàn)。它不僅調(diào)用數(shù)據(jù)庫數(shù)據(jù),還操縱頁面流向。當用戶在前臺中提供的登錄入口輸入用戶名和密碼時,index.jsp通過Form將信息提交給LoginServlet,LoginServlet獲得此信息,調(diào)用數(shù)據(jù)庫連接池組件查找數(shù)據(jù)庫對比看是否有與LoginServlet收集到的信息匹配記錄,假如有則成功登錄到系統(tǒng)后臺(admin_index.jsp),假如沒有與之匹配的記錄則將頁面定位到登錄錯誤頁面(error.jsp)重新登錄。同樣也會用到LoginServlet對登錄信息進行推斷。(LoginServlet代碼見附件)4.3.2新聞治理新聞治理功能模塊中要緊實現(xiàn)新聞的添加、修改和刪除,在操縱層中是由NewsSevlet實現(xiàn)。添加新聞、刪除新聞和修改新聞操縱層是由NewsServlet中的insertservlet、delservlet和upservlet方法實現(xiàn)。治理員在處理新聞頁面需要填寫的內(nèi)容點擊“確定”按鈕時,將內(nèi)容通過Post方法提交給NewsServlet,NewsServlet調(diào)用對應的方法,方法調(diào)用JavaBean——NewsJdbc對新聞信息進行處理,然后將新聞信息保存到新聞數(shù)據(jù)表。4.3.3欄目治理新聞欄目治理和新聞治理大同小異,只是頁面和調(diào)用的方法不同,整個處理的流程和新聞治理是一樣的,那個地點不做詳細講明。4.4小結本章從MVC三層模式入手,通過代碼的編寫,差不多實現(xiàn)了系統(tǒng)設計中所設計的業(yè)務功能,從而完成了系統(tǒng)用例所要求的功能。5.1系統(tǒng)測試環(huán)境系統(tǒng)測試需要相應的環(huán)境,因此在系統(tǒng)測試之前,進行系統(tǒng)硬件和軟件環(huán)境的配置。5.1.1系統(tǒng)測試硬件環(huán)境因為本系統(tǒng)僅在本機上運行,因此需要一臺PC機即可。為了系統(tǒng)能夠正常運行,PC機配置最低配置:CPU1.5GHz,內(nèi)存256M,硬盤40G。5.1.2系統(tǒng)測試軟件環(huán)境PC機操作系統(tǒng)為WindowsXP或WindowsServer2003均可。PC機上必須安裝并配置java運行環(huán)境——JDK,本人用的JDK是jdk1.6.0_07。PC機上必須安裝并能夠運行JSP應用程序web服務器。本人用的web服務器是apache-tomcat-6.0.18。5.2系統(tǒng)測試因為系統(tǒng)比較簡單,因此本人采納黑盒測試法對系統(tǒng)各個功能模塊需求進行測試。在IE掃瞄器中輸入:8080/zxlinfo。具體測試見表5.1。測試用例ID輸入預期結果實際結果測試結論OA-1進入系統(tǒng)前臺主頁掃瞄新聞若成功,則顯示新聞列表顯示新聞列表,并能夠閱讀新聞成功OA-2選擇新聞欄目應該列出該新聞欄目的所有新聞,若沒有則提示選擇有新聞的欄目,能夠看到新聞列表,沒有新聞的欄目,顯示“該欄目沒有任何新聞”成功OA-3在注冊用戶登錄入口輸入用戶名和密碼若輸入正確的用戶名和密碼,則登錄成功,否則進入登錄錯誤頁面輸入“000,000”進入系統(tǒng),輸入其它,進入登錄錯誤頁面,提示重新登錄成功OA-4點擊“個人信息查看”能夠進入個人信息面板實現(xiàn)預期結果成功OA-5點擊個人信息面板中的“修改”能夠?qū)€人信息進行修改實現(xiàn)預期結果成功OA-6進入某個新聞頁面,在發(fā)表評論的文本框中輸入任意字符并提交能夠發(fā)表評論實現(xiàn)預期結果成功OA-7在后臺登錄入口輸入用戶名和密碼若輸入正確的用戶名和密碼,則進入后臺系統(tǒng),否則進入登錄錯誤頁面輸入“admin,admin”進入后臺系統(tǒng),輸入其它,進入登錄錯誤頁面,提示重新登錄成功OA-8進入后臺掃瞄新聞若成功,在掃瞄期間能夠修改和刪除新聞,返回更新后的新聞信息實現(xiàn)預期結果成功OA-9點擊“添加新聞”能夠進行新聞信息的錄入,完成后在新聞列表能夠看到新添加的新聞實現(xiàn)預期結果成功OA-10點擊“欄目治理”能夠添加、修改和刪除欄目實現(xiàn)預期結果成功OA-11點擊“用戶治理”能夠修改和刪除用戶實現(xiàn)預期結果成功OA-12點擊“添加治理員”能夠添加治理員實現(xiàn)預期結果成功表5-1 測試用例表本文通過采納MVC三層設計模式,設計并實現(xiàn)了一個新聞公布系統(tǒng)。本新聞公布系統(tǒng)要緊實現(xiàn)了新聞的后臺治理,例如新聞的添加、修改和刪除等功能;同時也實現(xiàn)了新聞欄目的治理,例如欄目的添加、修改和刪除等功能。通過系統(tǒng)測試用例分析,達到了既定的系統(tǒng)設計目標。但由于時刻關系和個人各方面因素,系統(tǒng)仍存在一定缺陷,同時有一些Java開發(fā)的新技術和思想沒有加入到本系統(tǒng)開發(fā)中,希望在今后的學習和工作中,提高系統(tǒng)開發(fā)能力,做出更好的系統(tǒng)。[1]孫衛(wèi)琴,李洪成.《Tomcat與JSPWeb開發(fā)技術詳解》[M].電子工業(yè)出版社,2003.[2]計磊,李里,周偉.J2EE整合應用案例[M].北京:人民郵電出版社,2007.[3]耿祥義,張躍平.JAVA2有用教程(第二版)[M].北京:清華大學出版社,2004.[4]王夕寧,王曉平.JSP通用模塊及典型系統(tǒng)開發(fā)實例導航[M].北京:人民郵電出版社,2006.[5]孫衛(wèi)琴.精通Struts:基于MVC的JavaWeb設計與開發(fā)[M].北京:電子工業(yè)出版社,2004.[6]畢建信.基于MVC設計模式的Web應用研究與實現(xiàn)[M].武漢:武漢理工大學,2006.[7]耿祥義,張躍平.Java2有用教程(3版)[M].北京:清華大學出版社,2006.

[8]鄭人杰,殷人昆,陶永雷.有用軟件工程[M].清華大學出版社,2005.[9]王珊,薩師煊.數(shù)據(jù)庫系統(tǒng)概論(4版)[M].北京.高等教育出版社,2006.[10]宣小平.JSP數(shù)據(jù)庫系統(tǒng)開發(fā)導航[M].人民郵電出版社,2003.

[11]張海藩.軟件工程導論(第5版)[M].北京.清華大學出版社,2008.2[12](美)格羅夫著,章小莉等譯.SQL完全手冊(第二版)[M].北京:電子工業(yè)出版社,2006.本文是我在洪剛老師的悉心指導下完成的,從論文的選題、系統(tǒng)的開發(fā)到論文的撰寫都得到了洪老師極大的關心。他所具有的精湛的學術造詣、勤懇的工作作風和對學生認真負責的態(tài)度使我深受感動,終生難忘。在此向洪老師表示深深的敬意和衷心的感謝。同時,特不感謝學校、學院各位老師和領導對我各方面的關懷與支持。感謝我的室友們對我的關心和指點,感謝他們與我交流經(jīng)驗,解決一道道心理上和技術上的難關。感謝我親人和朋友對我的理解、支持和關心。盡管與他們?yōu)槲腋冻龅囊磺邢啾?,所有的語言都顯得蒼白無力,我仍要真誠地講一聲:感謝!

NewsinfoJdbc.java:packagecom.newsinfo.mag;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.ArrayList;importjava.util.List;importcom.newsinfo.db.JdbcConn;importcom.newsinfo.vo.Newsinfo;publicclassNewsJdbc{ ResultSetrs=null; //1.添加新聞 publicbooleancreateNews(Newsinfone){ Connectionconn=JdbcConn.getConn(); booleanflag=false; Stringsql="insertintonewsinfo(newcla,title,author,content,intime)values('"+ne.getNewcla()+"','"+ne.getTitle()+"','"+ne.getAuthor()+"','"+ne.getContent()+"','"+ne.getIntime()+"')"; System.out.println(sql); try{ Statementst=conn.createStatement(); inti=st.executeUpdate(sql); JdbcConn.free(st,rs,conn); if(i>0) flag=true; }catch(SQLExceptione){ e.printStackTrace(); } returnflag; } //2.依照新聞類不顯示新聞信息 publicList<Newsinfo>selectByNewcla(intnewcla){ Newsinfone=null; List<Newsinfo>list=newArrayList<Newsinfo>(); Stringsql="select*fromnewsinfowherenewcla="+newcla+"orderbyiddesc"; System.out.println(sql); Connectionconn=JdbcConn.getConn(); try{ Statementst=conn.createStatement(); ResultSetrs=st.executeQuery(sql); while(rs.next()){ ne=newNewsinfo(); ne.setId(rs.getInt("id")); ne.setNewcla(rs.getInt("newcla")); ne.setTitle(rs.getString("title")); ne.setAuthor(rs.getString("author")); ne.setContent(rs.getString("content")); ne.setHits(rs.getInt("hits")); ne.setIntime(rs.getTimestamp("intime")); list.add(ne); } JdbcConn.free(st,rs,conn); }catch(SQLExceptione){ e.printStackTrace(); } returnlist; } //3.依照給出的條件,更新新聞信息 publicbooleanupdateNew(Newsinfone){ booleanflag=false; Stringsql="updatenewsinfosetnewcla=?,title=?,author=?,content=?,intime=?whereid=?"; Connectionconn=JdbcConn.getConn(); try{ PreparedStatementpst=conn.prepareStatement(sql); pst.setInt(1,ne.getNewcla()); pst.setString(2,ne.getTitle()); pst.setString(3,ne.getAuthor()); pst.setString(4,ne.getContent()); pst.setTimestamp(5,ne.getIntime()); pst.setInt(6,ne.getId()); intid=pst.executeUpdate(); JdbcConn.free(pst,rs,conn); if(id>0){ flag=true; } }catch(SQLExceptione){ e.printStackTrace(); } returnflag; } //4.給出條件,刪除新聞 publicintdeleteNew(intid){ inti=0; Stringsql="deletefromnewsinfowhereid=?"; Connectionconn=JdbcConn.getConn(); try{ PreparedStatementst=conn.prepareStatement(sql); st.setInt(1,id); i=st.executeUpdate(); JdbcConn.free(st,rs,conn); }catch(SQLExceptione){ e.printStackTrace(); } returni; } //5.依照ID查詢單個新聞。 publicList<Newsinfo>selectone(intid){ Newsinfone=null; List<Newsinfo>list=newArrayList<Newsinfo>(); Stringsql="select*fromnewsinfowhereid="+id; Connectionconn=JdbcConn.getConn(); try{ Statementst=conn.createStatement(); ResultSetrs=st.executeQuery(sql); while(rs.next()){ ne=newNewsinfo(); ne.setId(rs.getInt("id")); ne.setNewcla(rs.getInt("newcla")); ne.setTitle(rs.getString("title")); ne.setAuthor(rs.getString("author")); ne.setContent(rs.getString("content")); ne.setHits(rs.getInt("hits")); ne.setIntime(rs.getTimestamp("intime")); list.add(ne); } JdbcConn.free(st,rs,conn); }catch(SQLExceptione){ e.printStackTrace(); } returnlist; } //6.查詢所有新聞 publicList<Newsinfo>selectAll(){ Newsinfone=null; List<Newsinfo>list=newArrayList<Newsinfo>(); Stringsql="select*fromnewsinfoorderbyintimedesc"; Connectionconn=JdbcConn.getConn(); Statementst; try{ st=conn.createStatement(); ResultSetrs=st.executeQuery(sql); while(rs.next()){ ne=newNewsinfo(); ne.setId(rs.getInt("id")); ne.setNewcla(rs.getInt("newcla")); ne.setTitle(rs.getString("title")); ne.setAuthor(rs.getString("author")); ne.setContent(rs.getString("content")); ne.setHits(rs.getInt("hits")); ne.setIntime(rs.getTimestamp("intime")); list.add(ne); } }catch(SQLExceptione){ e.printStackTrace(); } returnlist; } //7.依照條件查詢某一類不、查詢多少條新聞 publicList<Newsinfo>selectBySS(intnewcla,ints){ Newsinfone=null; List<Newsinfo>list=newArrayList<Newsinfo>(); Stringsql="select*fromnewsinfowherenewcla="+newcla+"orderbyintimeasclimit0,"+s; System.out.println(sql); Connectionconn=JdbcConn.getConn(); try{ Statementst=conn.createStatement(); ResultSetrs=st.executeQuery(sql); while(rs.next()){ ne=newNewsinfo(); ne.setId(rs.getInt("id")); ne.setNewcla(rs.getInt("newcla")); ne.setTitle(rs.getString("title")); ne.setAuthor(rs.getString("author")); ne.setContent(rs.getString("content")); ne.setHits(rs.getInt("hits")); ne.setIntime(rs.getTimestamp("intime")); list.add(ne); } JdbcConn.free(st,rs,conn); }catch(SQLExceptione){ e.printStackTrace(); } returnlist; } //8.依照點擊量查詢新聞 publicList<Newsinfo>selecthits(ints){ Newsinfone=null; List<Newsinfo>list=newArrayList<Newsinfo>(); Stringsql="select*fromnewsinfoorderbyhitsdesclimit0,"+s; System.out.println(sql); Connectionconn=JdbcConn.getConn(); try{ Statementst=conn.createStatement(); ResultSetrs=st.executeQuery(sql); while(rs.next()){ ne=newNewsinfo(); ne.setId(rs.getInt("id")); ne.setNewcla(rs.getInt("newcla")); ne.setTitle(rs.getString("title")); ne.setAuthor(rs.getString("author")); ne.setContent(rs.getString("content")); ne.setHits(rs.getInt("hits")); ne.setIntime(rs.getTimestamp("intime")); list.add(ne); } JdbcConn.free(st,rs,conn); }catch(SQLExceptione){ e.printStackTrace(); } returnlist; } //9.查詢最新公布的新聞 publicList<Newsinfo>selectNew(ints){ Newsinfone=null; List<Newsinfo>list=newArrayList<Newsinfo>(); Stringsql="select*fromnewsinfoorderbyintimedesclimit0,"+s; Connectionconn=JdbcConn.getConn(); Statementst; try{ st=conn.createStatement(); ResultSetrs=st.executeQuery(sql); while(rs.next()){ ne=newNewsinfo(); ne.setId(rs.getInt("id")); ne.setNewcla(rs.getInt("newcla")); ne.setTitle(rs.getString("title")); ne.setAuthor(rs.getString("author")); ne.setContent(rs.getString("content")); ne.setHits(rs.getInt("hits")); ne.setIntime(rs.getTimestamp("intime")); list.add(ne); } }catch(SQLExceptione){ e.printStackTrace(); } returnlist; } //10.點擊自動加一 publicvoidaddHits(intid,inthit){ Stringsql="updatenewsinfosethits="+hit+"whereid="+id; Connectionconn=JdbcConn.getConn(); try{ Statementst=conn.createStatement(); st.executeUpdate(sql); JdbcConn.free(st,rs,conn); }catch(SQLExceptione){ e.printStackTrace(); } } //11.模糊查詢 publicList<Newsinfo>selectByLike(Strings){ Newsinfone=null; List<Newsinfo>list=newArrayList<Newsinfo>(); Stringsql="select*fromnewsinfowheretitlelike'%"+s+"%'"; Connectionconn=JdbcConn.getConn(); Statementst; try{ st=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSetrs=st.executeQuery(sql); while(rs.next()){ ne=newNewsinfo(); ne.setId(rs.getInt("id")); ne.setNewcla(rs.getInt("newcla")); ne.setTitle(rs.getString("title")); ne.setAuthor(rs.getString("author")); ne.setContent(rs.getString("content")); ne.setHits(rs.getInt("hits")); ne.setIntime(rs.getTimestamp("intime")); list.add(ne); } }catch(SQLExceptione){

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論