版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
圖4.4BBS論壇的系統(tǒng)前臺(tái)流程圖2.BBS后臺(tái)流程BBS論壇的系統(tǒng)后臺(tái)流程圖如圖4.5所示。類別管理類別管理版面管理用戶管理錄是否成功進(jìn)入后臺(tái)后臺(tái)首頁用戶登錄管理員圖4.5BBS論壇系統(tǒng)后臺(tái)流程圖4.2時(shí)序分析在BBS論壇系統(tǒng)中,每個(gè)用例都可以建立一個(gè)時(shí)序圖,將用例執(zhí)行那個(gè)的各個(gè)參與的對(duì)象之間的消息傳遞過程表現(xiàn)出來。會(huì)員發(fā)帖回帖的時(shí)序圖會(huì)員發(fā)帖回帖的時(shí)序圖如4.6所示:圖4.6會(huì)員發(fā)帖回帖時(shí)序圖會(huì)員首先使用自己的賬號(hào)和密碼登錄系統(tǒng),登錄模塊將會(huì)把用戶的的ID保存在系統(tǒng)的緩存中,并展現(xiàn)論壇的分類模塊給會(huì)員。會(huì)員此時(shí)可以按照興趣進(jìn)入不同的主題討論區(qū),查看主題文章,并發(fā)表新文章(需要ID檢驗(yàn))和回復(fù)新帖,還可以瀏覽其他類別的主題討論區(qū)。2.論壇管理員管理會(huì)員的時(shí)序圖論壇管理員管理會(huì)員的時(shí)序圖如圖4.7所示:圖4.7論壇管理員管理會(huì)員時(shí)序圖管理員在提交ID給會(huì)員管理模塊后,可以對(duì)會(huì)員進(jìn)行維護(hù)(添加、刪除或修改)。管理員首先輸入自己的賬號(hào)和密碼登錄系統(tǒng),此時(shí)會(huì)將管理員的ID保存在系統(tǒng)緩存中并提交會(huì)員管理模塊。在操作會(huì)員的頁面中,管理員會(huì)根據(jù)需要對(duì)每個(gè)會(huì)員進(jìn)行增刪等操作,并將其信息提交給數(shù)據(jù)庫。數(shù)據(jù)庫會(huì)對(duì)其進(jìn)行相應(yīng)的處理,并更新會(huì)員信息,至此管理員管理會(huì)員操作成功。3.論壇管理員管理論壇分類的時(shí)序圖論壇管理員管理論壇分類的時(shí)序圖如圖4.8所示:圖4.8論壇管理員管理論壇分類時(shí)序圖管理員使用自己的賬號(hào)和密碼登錄后,將管理員的ID保存在系統(tǒng)的緩存中并提交給論壇類別管理模塊。在顯示論壇類別管理的頁面中,將顯示處理類別的相關(guān)信息給管理員,管理員在該頁面中進(jìn)行增刪等操作后,提交操作的ID給數(shù)據(jù)庫模塊處理。數(shù)據(jù)庫模塊執(zhí)行操作后更新結(jié)果,并提示更新成功。最后提示處理成功信息給管理員。4.論壇管理員管理帖子的時(shí)序圖論壇管理員管理帖子的時(shí)序圖如圖4.8所示:圖4.8論壇管理員管理帖子時(shí)序圖管理員在帖子管理模塊可以對(duì)會(huì)員發(fā)表的帖子進(jìn)行維護(hù)(刪除),還可以對(duì)帖子進(jìn)行一些額外的智能操作,比如置頂帖子、設(shè)置精華帖子等。更改完成后,都要經(jīng)過數(shù)據(jù)庫的處理,并更新數(shù)據(jù),才能成功。4.3數(shù)據(jù)庫設(shè)計(jì)4.3.1數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)通過對(duì)系統(tǒng)的需求和功能的分析我將系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)主要分為四個(gè)部分,包括用戶信息,專區(qū)信息,主題信息以及回復(fù)信息。用戶信息包括:用戶id,用戶名,真實(shí)姓名,用戶密碼,密碼確認(rèn),用戶性別,用戶聯(lián)系方式,用戶頭像,E_mail,聯(lián)系地址。tb_bbsAnswer用于存放會(huì)員留言。tb_bbs用于存放會(huì)員發(fā)表的帖子信息。tb_user用于存放論壇用戶信息。tb_news用于存放新聞。tb_class用于存放論壇類別介紹。Tb_board用于存放版面信息。建立數(shù)據(jù)庫結(jié)構(gòu)如表4-1到4-5所示:表4-1tb_user字段描述類型空值長(zhǎng)度id注冊(cè)用戶smalint非2user_name用戶名varchar是20user_password密碼varchar是20user_phone手機(jī)號(hào)varchar是12uwer_email郵箱varchar是100user_sex性別varchar是2user_face頭像varchar是11User_from用戶地區(qū)varchar是200表4-2tb_bbs字段描述類型空值長(zhǎng)度bbs_id帖子編號(hào)int非4bbs_title帖子標(biāo)題varchar是70bbs_content帖子內(nèi)容varchar是2000bbs_sendTime發(fā)帖時(shí)間datetime是8bbs_sender發(fā)帖人varchar是20bbs_face發(fā)帖人頭像varchar是10bbs_opTime置頂時(shí)間varchar是8bbs_toGoodTime成為精華時(shí)間varchar是8表4-3tb_bbsAnswer字段描述類型空值長(zhǎng)度bbsAnswer_id留言編號(hào)int4bbsAnswer_rootid留言者編號(hào)int是4bbsAnswer_title回帖標(biāo)題varchar是70bbsAnswer_content回帖內(nèi)容varchar是2000bbsAnswer_sender回帖者姓名varchar是20bbsAnswer_sentime留言時(shí)間datetime是8bbsAnswer_face留言者頭像varchar是50表4-4tb_class字段描述類型空值長(zhǎng)度calss_id分區(qū)編號(hào)int非2class_name分區(qū)名稱nvarchar是50class_intro分區(qū)信息nvarchar是200表4-5tb_border字段描述類型空值長(zhǎng)度board_id版塊編號(hào)int非4board_classId板塊編號(hào)smalint是2board_name版塊名稱nvarchar是40board_master斑竹datetime是20board_pcard版塊提醒nvarchar是2004.3.2數(shù)據(jù)庫的連接(1)加載數(shù)據(jù)庫程序根據(jù)讀取的數(shù)據(jù)驅(qū)動(dòng)配置字符串drivers,動(dòng)態(tài)加載數(shù)據(jù)庫驅(qū)動(dòng)的程序。首先通過Class.forName()來動(dòng)態(tài)加載,在使用DriverManage數(shù)據(jù)庫驅(qū)動(dòng)管理器來注冊(cè)該驅(qū)動(dòng)類。publicDB(){ className="com.microsoft.jdbc.sqlserver.SQLServerDriver"; url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=db_luntan"; username="sa"; password="sa"; try{ Class.forName(className); }catch(ClassNotFoundExceptione){ System.out.println("加載數(shù)據(jù)庫驅(qū)動(dòng)程序失?。?); e.printStackTrace(); } }(2)取得數(shù)據(jù)庫連接程序用戶編寫程序中,如果需要取得數(shù)據(jù)庫連接,只需要調(diào)用該函數(shù)。publicvoidgetCon(){ try{ con=DriverManager.getConnection(url,username,password); }catch(SQLExceptione){ System.out.println("獲取數(shù)據(jù)庫連接失敗!"); e.printStackTrace(); } }(5)釋放連接用來釋放一個(gè)連接到數(shù)據(jù)庫連接池pools中的。如果使用完了每個(gè)連接,就需要調(diào)用該函數(shù)將連接關(guān)閉。publicvoidclosed(){ try{ if(pstm!=null) pstm.close(); }catch(Exceptione){ System.out.println("關(guān)閉pstm對(duì)象失敗!"); } try{ if(con!=null) con.close(); }catch(Exceptione){ System.out.println("關(guān)閉con對(duì)象失?。?); }}第五章系統(tǒng)技術(shù)支持5.1系統(tǒng)開發(fā)與運(yùn)行環(huán)境鑒于系統(tǒng)的開發(fā)語言和數(shù)據(jù)庫,采用如下的開發(fā)環(huán)境開發(fā)環(huán)境:Windows7TomCat6.0JDK1.6硬件實(shí)現(xiàn):intelcorei52G內(nèi)存320硬盤開發(fā)語言:Java數(shù)據(jù)庫:Sql2005開發(fā)工具:MyEclipse6.0.1預(yù)期成果:一個(gè)基于Strusts1的網(wǎng)上BBS論壇5.2相關(guān)技術(shù)簡(jiǎn)介在開發(fā)本論壇系統(tǒng)是,考慮到系統(tǒng)的開發(fā)時(shí)間、系統(tǒng)的可用性、以后的維護(hù),我們采用了javaBean技術(shù),為了減輕忘了負(fù)載采用jsp動(dòng)態(tài)網(wǎng)頁技術(shù)。5.2.1javaBeans技術(shù)簡(jiǎn)介JavaBeans是Java的可重用組件技術(shù)。ASP通過COM來擴(kuò)充復(fù)雜的功能,如文件上載、發(fā)送Email以及將業(yè)務(wù)處理或復(fù)雜計(jì)算分離出來成為獨(dú)立可重用的模塊。JSP通過JavaBeans實(shí)現(xiàn)了同樣的功能擴(kuò)充。JSP對(duì)于在Web應(yīng)用中集成JavaBeans組件提供了完善的支持。這種支持不僅能縮短開發(fā)時(shí)間(可以直接利用經(jīng)測(cè)試和可信任的已有組件,避免了重復(fù)開發(fā)),也為JSP應(yīng)用帶來了更多的可伸縮性。JavaBeans組件可以用來執(zhí)行復(fù)雜的計(jì)算任務(wù),或負(fù)責(zé)與數(shù)據(jù)庫的交互以及數(shù)據(jù)提取等。在實(shí)際的JSP開發(fā)過程中,和傳統(tǒng)的ASP和PHP頁面相比,頁面將會(huì)是非常簡(jiǎn)潔的,由于JavaBeans開發(fā)起來簡(jiǎn)單,又可以利用Java語言的強(qiáng)大功能,許多動(dòng)態(tài)頁面處理過程實(shí)際被封裝到了JavaBeans中。在本論壇系統(tǒng)中,JavaBean技術(shù)起到了重要的作用,使數(shù)據(jù)庫連接等功能不必要使用重復(fù)代碼,對(duì)系統(tǒng)以后的維護(hù)也簡(jiǎn)便了許多。5.2.2JSP技術(shù)簡(jiǎn)介JSP(JavaServerPages)是由SunMicrosystems公司倡導(dǎo),許多公司參與一起建立的一種動(dòng)態(tài)頁面技術(shù)標(biāo)準(zhǔn),其在動(dòng)態(tài)網(wǎng)也的建設(shè)中由其強(qiáng)大而特別的功能,它主要要用于創(chuàng)建支持跨平臺(tái)Web服務(wù)器的動(dòng)態(tài)網(wǎng)頁。JSP可與微軟的ActiveServerPages(ASP)相媲美,但是JSP使用的是類似與HTML的標(biāo)記和Java代碼片斷而不是用VBScript。當(dāng)人們使用不提供ASP本地支持的Web服務(wù)器(例如Apache或者Netscape服務(wù)器)時(shí),你就可以考慮使用JSP了。JavaServerPages技術(shù)可以讓W(xué)eb開發(fā)人員和設(shè)計(jì)人員非常容易的創(chuàng)建和維護(hù)動(dòng)態(tài)網(wǎng)頁,特別是目前的商業(yè)系統(tǒng)。作為Java技術(shù)的一部分,JSP能夠快速開發(fā)基于Web,獨(dú)立與平臺(tái)的應(yīng)用程序。JSP把用戶界面從系統(tǒng)內(nèi)容中分離開來,使得設(shè)計(jì)人員能夠在不改變底層動(dòng)態(tài)內(nèi)容的前提下改變整個(gè)網(wǎng)頁布局。在JSP網(wǎng)頁中,要把用戶界面和應(yīng)用程序分開可以考慮在網(wǎng)頁設(shè)計(jì)人員和開發(fā)人員之間執(zhí)行一個(gè)非常方便的授權(quán)任務(wù)。它也允許開發(fā)人員去建立靈活的代碼,從而非常容易地進(jìn)行更新和重復(fù)利用。由于JSP網(wǎng)頁能夠根據(jù)需要自動(dòng)進(jìn)行編譯,Web設(shè)計(jì)人員無需重新編譯應(yīng)用程序邏輯就可以改變表述代碼。這也就是JSP與JavaServed相比成為一種可以更靈活生成動(dòng)態(tài)Web內(nèi)容的方法。事實(shí)證明,JavaServed是一種開發(fā)Web應(yīng)用的理想架構(gòu)。JSP以Served技術(shù)為基礎(chǔ),又在許多方面做了改進(jìn)。利用跨平臺(tái)運(yùn)行的JavaBeans組建,JSP為分離處理邏輯與顯示樣式提供了卓越的解決方案。JSP必將成為其他動(dòng)態(tài)網(wǎng)頁技術(shù)的有力競(jìng)爭(zhēng)者。在開發(fā)本論壇系統(tǒng)中,運(yùn)用JSP動(dòng)態(tài)網(wǎng)頁技術(shù),大大減少了網(wǎng)絡(luò)服務(wù)器的負(fù)擔(dān),大大的提高了本論壇系統(tǒng)的性能,也有利于日后其他程序?qū)ο到y(tǒng)的維護(hù)。。圖5.1JSP(JavaServerPages)5.2.3數(shù)據(jù)庫SQLServer2005簡(jiǎn)介SQLServer2005是用于大規(guī)模聯(lián)機(jī)事務(wù)處理(OLTP)、數(shù)據(jù)倉(cāng)庫和電子商務(wù)應(yīng)用的數(shù)據(jù)庫和數(shù)據(jù)分析平臺(tái)。使用集成的商業(yè)智能(BI)工具提供了企業(yè)級(jí)的數(shù)據(jù)管理。SQLServer2005數(shù)據(jù)庫引擎為關(guān)系型數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)提供了更安全可靠的存儲(chǔ)功能,使得構(gòu)建和管理用于業(yè)務(wù)的高可用和高性能的數(shù)據(jù)應(yīng)用程序更為簡(jiǎn)單。SQLServer2005結(jié)合了分析、報(bào)表、集成和通知功能,可以方便的用來管理教務(wù)信息。此外,數(shù)據(jù)庫是本教務(wù)查詢系統(tǒng)解決方案的核心,決定了教務(wù)系統(tǒng)管理和查詢的功能和范疇。本教務(wù)查詢系統(tǒng)由于和現(xiàn)有系統(tǒng)共享同一數(shù)據(jù)業(yè)務(wù),考慮到數(shù)據(jù)一致性和安全性,在本地的WAP服務(wù)器上同時(shí)鏡像了主數(shù)據(jù)庫作為本地?cái)?shù)據(jù)庫。鏡像數(shù)據(jù)庫技術(shù)是SQLServer2005新增添的功能。數(shù)據(jù)庫鏡像是一個(gè)主要用于提高數(shù)據(jù)庫可用率的軟件解決方案。鏡像是基于每個(gè)數(shù)據(jù)庫執(zhí)行的,適用于使用完整恢復(fù)模式的數(shù)據(jù)庫。數(shù)據(jù)庫鏡像是通過維護(hù)一個(gè)熱備用服務(wù)器而發(fā)揮作用的。在一般的鏡像會(huì)話期間,如果生產(chǎn)服務(wù)器出現(xiàn)故障,客戶端應(yīng)用程序可以通過重新連接到備用服務(wù)器來快速進(jìn)行恢復(fù)。數(shù)據(jù)庫鏡像包含一個(gè)數(shù)據(jù)庫的兩個(gè)副本,這兩個(gè)副本通常駐留在不同的計(jì)算機(jī)上。在任何給定的時(shí)間,客戶端當(dāng)前都只能使用一個(gè)數(shù)據(jù)庫副本。此副本稱為“主體數(shù)據(jù)庫”??蛻舳藢?duì)主體數(shù)據(jù)庫進(jìn)行的更新被鏡像到數(shù)據(jù)庫的另一副本,該副本稱為“鏡像數(shù)據(jù)庫”。鏡像是將對(duì)主體數(shù)據(jù)庫執(zhí)行的每個(gè)插入、更新或刪除操作的事務(wù)日志應(yīng)用到鏡像數(shù)據(jù)庫。主體數(shù)據(jù)庫和鏡像數(shù)據(jù)庫必須駐留在獨(dú)立的服務(wù)器實(shí)例(即MicrosoftSQLServerDatabaseEngine實(shí)例)上。兩個(gè)服務(wù)器實(shí)例在“數(shù)據(jù)庫鏡像會(huì)話”中作為“伙伴”進(jìn)行通信和協(xié)作。兩個(gè)伙伴在會(huì)話中扮演互補(bǔ)的角色:“主體角色”和“鏡像角色”。在任何給定的時(shí)間,都是一個(gè)伙伴扮演主體角色,另一個(gè)伙伴扮演鏡像角色。每個(gè)伙伴擁有其當(dāng)前角色。擁有主體角色的伙伴稱為“主體服務(wù)器”,其數(shù)據(jù)庫副本為當(dāng)前的主體數(shù)據(jù)庫。擁有鏡像角色的伙伴稱為“鏡像服務(wù)器”,其數(shù)據(jù)庫副本為當(dāng)前的鏡像數(shù)據(jù)庫。5.2.4MyEclipse簡(jiǎn)介MyEclipse企業(yè)級(jí)工作平臺(tái)(MyEclipseEnterpriseWorkbench,簡(jiǎn)稱MyEclipse)是對(duì)EclipseIDE的擴(kuò)展,利用它我們可以在數(shù)據(jù)庫和JavaEE的開發(fā)、發(fā)布,以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的JavaEE集成開發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測(cè)試和發(fā)布功能,完整支持HTML,Struts,JSF,CSS,Javascript,SQL,Hibernate。在結(jié)構(gòu)上,MyEclipse的特征可以被分為7類:(1)JavaEE模型(2)Web開發(fā)工具(3)EJB開發(fā)工具(4)應(yīng)用程序服務(wù)器的連接器(5)JavaEE項(xiàng)目部署服務(wù)(6)數(shù)據(jù)庫服務(wù)(7)MyEclipse整合幫助對(duì)于以上每一種功能上的類別,在Eclipse中都有相應(yīng)的功能部件,并通過一系列的插件來實(shí)現(xiàn)它們。MyEclipse結(jié)構(gòu)上的這種模塊化,可以讓我們?cè)诓挥绊懫渌K的情況下,對(duì)任一模塊進(jìn)行單獨(dú)的擴(kuò)展和升級(jí)。5.2.5Struts框架相關(guān)技術(shù)Struts是一個(gè)在J2EE平臺(tái)上的輕量級(jí)開源框架。它是建立在MVC這種公認(rèn)的成熟架構(gòu)模式基礎(chǔ)之上的,對(duì)原有的Servlet和JSP技術(shù)進(jìn)行封裝,并綜合了TagLib等技術(shù),允許開發(fā)者以可配置的方式針對(duì)需求進(jìn)行開發(fā),從而大大提供了Web應(yīng)用程序的可維護(hù)性和可重用性?,F(xiàn)今,越來越多的網(wǎng)絡(luò)應(yīng)用程序都采用Struts作為其表示層框架,很多開源技術(shù)也能夠與Struts進(jìn)行無縫的整合。Struts的工作流程如下圖所示。圖5.2Struts的調(diào)用流程圖首先請(qǐng)求到達(dá)應(yīng)用,這里的請(qǐng)求可能是由JSP提交的表單,也可能是從另一個(gè)Action轉(zhuǎn)發(fā)過來。如果是后者,Struts會(huì)根據(jù)配置文件檢查ActionMapping是否存在,如果不存在,則返回error,如果存在則創(chuàng)建ActionMapping類的對(duì)象,并繼續(xù)創(chuàng)建ActionForm對(duì)象,然后根據(jù)請(qǐng)求中所含的參數(shù)將form對(duì)象填充好。接下來是表單的校驗(yàn),如果校驗(yàn)出錯(cuò),則會(huì)返回error,如果定義了input,就會(huì)返回指定的目標(biāo)去;校驗(yàn)通過則會(huì)繼續(xù)向下執(zhí)行。Action類中的execute方法通常要由開發(fā)者根據(jù)具體的業(yè)務(wù)進(jìn)行實(shí)現(xiàn),通常在這里進(jìn)行表單數(shù)據(jù)的獲取和后臺(tái)邏輯的調(diào)用。執(zhí)行完成之后,方法會(huì)返回一個(gè)ActionForward對(duì)象。Struts框架對(duì)返回的ActionForward對(duì)象進(jìn)行處理,如果它執(zhí)行其他的action,則繼續(xù)前面所描述的步驟,如果沒有其他的action,則返回響應(yīng)給客戶端。5.2.6開發(fā)模式介紹目前,在大多數(shù)B/S(Browser/Server)結(jié)構(gòu)的Web應(yīng)用中,瀏覽器直接通過HTML或者JSP的形式與用戶交互,響應(yīng)用戶的請(qǐng)求。雖然很直觀,但是大多數(shù)管理信息系統(tǒng)操作的數(shù)據(jù)量都是驚人的,隨著代碼的增多會(huì)使JSP頁面臃腫不堪,Web服務(wù)器的負(fù)荷過重。因此,在中間層上采用基于模型視圖控制器(MVC,Model-View-Controller)的設(shè)計(jì)模式。MVC之間的關(guān)系如圖1.1所示,Model層用來實(shí)現(xiàn)業(yè)務(wù)邏輯,View層用來顯示用戶界面,Controller層主要負(fù)責(zé)View層和Model層之間的控制關(guān)系。具體實(shí)現(xiàn)時(shí),把Servlet用作應(yīng)用程序的控制器,把JSP文檔作為視圖,JavaBeans被用來表示模型。所有的請(qǐng)求都被發(fā)送給作為控制器的Servlet,它接受請(qǐng)求,并根據(jù)請(qǐng)求信息將它們分發(fā)給適當(dāng)?shù)腏SP來響應(yīng)。同時(shí),Servlet還根據(jù)JSP的需求生成JavaBeans的實(shí)例并輸出給JSP環(huán)境。JSP可以通過直接調(diào)用方法或使用UseBean的自定義標(biāo)簽得到JavaBeans中的數(shù)據(jù)。這種設(shè)計(jì)模式很好地實(shí)現(xiàn)了數(shù)據(jù)層與表示層的分離,使開發(fā)工作更加容易和迅速。圖5.3B/S結(jié)構(gòu)第六章系統(tǒng)實(shí)現(xiàn)6.1系統(tǒng)環(huán)境的搭建6.1.1JAVA虛擬機(jī)的安裝本網(wǎng)站采用的是基于Java的JSP技術(shù),所以Java虛擬環(huán)境即Java虛擬機(jī)是必須要安裝的。JDK是一切Java應(yīng)用程序的基礎(chǔ),可以說所有的Java應(yīng)用程序是構(gòu)建在這個(gè)之上的。目前已經(jīng)正式發(fā)布的最新版本是JDK1.6。Windows下,直接運(yùn)行.exe文件,安裝到一個(gè)目錄,如E:/jdk1.6,安裝完成后就是環(huán)境變量的設(shè)置。桌面上選擇“我的電腦”(右鍵)/高級(jí)/環(huán)境變量,在系統(tǒng)變量下選擇新建,在變量名中輸入:JAVA_HOME,變量值輸入:E:\jdk1.6\lib\dt.jar;E:\jdk1.6\lib\tools.jar;還需要在Path變量值后面添加一個(gè)值:E:\jdk1.6\bin。至此JAVA環(huán)境安裝成功。我們可以在命令行中敲入命令java如果現(xiàn)實(shí)java幫助,則證明環(huán)境設(shè)置成功。6.1.2TOMcat的安裝和配置
tomcat安裝可以到上去下載,這是一個(gè)完全免費(fèi)的優(yōu)秀軟件,安裝之前要保證本機(jī)安裝了JDK。在Tomcat安裝目錄下的bin子目錄中,有一些批處理文件(以.bat作為后綴名的文件),其中的startup.bat就是啟動(dòng)Tomcat的腳本文件,用鼠標(biāo)雙擊這個(gè)文件,將會(huì)看到信息,在瀏覽器地址欄中輸入:8080/如果出現(xiàn)界面如圖1.5則說明安裝成功即可以進(jìn)行配置配置,tomcat首先要修改端口號(hào),在conf目錄下有個(gè)叫server.xml將端口號(hào)修改為了8080,然后建立虛擬目錄配置調(diào)試。如圖6.1示:圖6.1tomcat成功界面6.1.3項(xiàng)目的部署1:安裝jdk(1.6版本以上)2:安裝tomcat(6.0版本以上)3:安裝SQL數(shù)據(jù)庫(xp系統(tǒng)安裝sql2000或者sql2005,win7或者vista只能安裝sql2005,如已安裝可省略4:安裝sql2000的sp3補(bǔ)丁5:安裝myeclipse6:部署:假定存放商品商店系統(tǒng)所有文件的工作目錄是E:\workspace\shop,即包含了商品系統(tǒng)所有文件的目錄放到E盤下的workspace下的BBS目錄中。在Tomcat安裝目錄下的conf\Catalina\localhost目錄下新建一個(gè)bbs.xml配置文件,在其中添加一個(gè)Context元素,代碼如下:<Contextpath="/bbs1"docBase="E:\workspace\bbs"debug="0"reloadable="true" crossContext="true"></Context>6.2功能模塊展示6.2.1主頁面主頁面是論壇的門戶,所以主頁面的設(shè)計(jì)好壞直接影響到整個(gè)論壇的形象。論壇首頁所載的內(nèi)容有:論壇工具欄,包括登錄、注冊(cè)、發(fā)貼排行、幫助、管理員登錄、退出;LOGO圖標(biāo);論壇統(tǒng)計(jì)信息;論壇版面列表;論壇版權(quán)信息。圖6.2首頁6.2.2用戶登錄用戶進(jìn)入主頁面,若想瀏覽具體的帖子必須先登錄。點(diǎn)擊工具欄上“登錄”按鈕則進(jìn)入登錄頁面,效果如圖5.2所示。該模塊在用戶登錄要進(jìn)行用戶名和密碼的有效性檢驗(yàn),查詢用戶表,如果該用戶存在則讓他進(jìn)入主頁面,也就是前面介紹的論壇主頁面,如果不能登錄成功則給予提示,用戶名不存在或者密碼錯(cuò)誤,回到登錄頁面以便用戶再次輸入用戶名及密碼登錄。圖6.3用戶登錄界面6.2.3用戶注冊(cè)如果用戶是首次反問校園論壇,還沒有注冊(cè),可以單擊【注冊(cè)】按鈕進(jìn)入新用戶注冊(cè)界面,先進(jìn)行用戶注冊(cè),這是用戶進(jìn)入論壇的一個(gè)通道,是任何論壇都不可缺少的部分。效果如圖5.3所示:圖6.4用戶注冊(cè)界面6.2.4發(fā)新帖子點(diǎn)擊某一具體論壇分類,進(jìn)入帖子頁面,單擊“發(fā)表新貼”,則進(jìn)入發(fā)新帖子的頁面,如圖5.4所示。這里只允許會(huì)員發(fā)表新帖子,需要填寫的新帖子信息包括:用戶名、密碼、主題、當(dāng)前心情、具體內(nèi)容等,這也是帖子表里應(yīng)該有的最基本信息。其中標(biāo)題不能超過50個(gè)漢字?!皟?nèi)容”是指書寫帖子內(nèi)容時(shí)輸入框支持什么不支持什么等。具體內(nèi)容輸入框上的按鈕可以對(duì)輸入的內(nèi)容進(jìn)行字體等方面的設(shè)置,用過Word的人可以很容易掌握這些小按鈕的用法,其中有加粗、斜體、下劃線等,還可以設(shè)置字體效果等。輸入框下方提供了一些小圖片,用戶單擊表情圖標(biāo)就可以在帖子中加入相應(yīng)的表情。“是否顯示您的簽名”和“有回復(fù)時(shí)使用郵件通知您”看作者而定,可以選擇也可以不選。所有的內(nèi)容都填寫完畢后,單擊【發(fā)表】按鈕則數(shù)據(jù)庫中相應(yīng)的帖子表增加一條記錄,用戶帖子發(fā)表成功。圖6.5發(fā)新帖子界面6.2.5瀏覽帖子單擊某一具體的帖子,可以閱讀帖子的內(nèi)容。如下圖所示是瀏覽某一個(gè)具體帖子的界面,最上方【發(fā)表話題】、【回復(fù)帖子】按鈕,用戶可以單擊按鈕進(jìn)行相應(yīng)的操作。同一行的右邊是一個(gè)對(duì)本帖子閱讀的人數(shù)的統(tǒng)計(jì)。再下來是作者的一些基本信息。同一水平線上與之對(duì)應(yīng)的是帖子的具體信息,包括帖子的內(nèi)容、發(fā)表時(shí)間等。還可以對(duì)帖子做相應(yīng)的一些操作或進(jìn)入相關(guān)鏈接。如果帖子有跟帖,則會(huì)在這個(gè)帖子的下方以同樣的表現(xiàn)形式列出來圖6.6瀏覽帖子6.2.6帖子列表帖子是論壇的主要交流內(nèi)容,是用戶-網(wǎng)頁-用戶之間交流的必要手段。單擊某一論壇分類,則進(jìn)入帖子列表頁面,效果如圖5.6所示:圖6.7帖子列表6.2.7新聞模塊新聞在人們的生活中是必不可少的,是了解世界的必要信息,為了方便用戶因此,我在此系統(tǒng)中加入了新聞模塊,使用用戶在進(jìn)入本系統(tǒng)瀏覽時(shí),也可以方便的讀取當(dāng)天要點(diǎn)新聞,了解時(shí)事,這樣也使得系統(tǒng)功能不再單一,顯得過于死板。在功能列表里點(diǎn)擊【新聞】,系統(tǒng)列出當(dāng)天提供的新聞?lì)}目列表,點(diǎn)擊新聞?lì)}目,查看新聞,效果如圖5.7圖6.8新聞模塊第七章系統(tǒng)測(cè)試7.1測(cè)試概述在開發(fā)大型軟件系統(tǒng)的過程中,需要面對(duì)錯(cuò)綜復(fù)雜的問題,因此,在軟件生存周期的每個(gè)階段都不可避免地會(huì)產(chǎn)生錯(cuò)誤。我們力求在每個(gè)階段結(jié)束之前通過嚴(yán)格的技術(shù)審查,盡可能早的發(fā)現(xiàn)并糾正錯(cuò)誤。測(cè)試的目的就是在軟件投入生產(chǎn)性運(yùn)行之前,盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤。目前軟件測(cè)試仍然是保證軟件質(zhì)量的關(guān)鍵步驟,它是對(duì)軟件規(guī)格說明、設(shè)計(jì)和編碼的最后復(fù)審。盡管面向?qū)ο蠹夹g(shù)的基本思想保證了軟件應(yīng)該有更高的質(zhì)量,但無論采用什么樣的編程技術(shù),編程人員的錯(cuò)誤都是不可避免的,而且由于面向?qū)ο蠹夹g(shù)開發(fā)的軟件代碼重用率高,更需要嚴(yán)格測(cè)試,避免錯(cuò)誤的繁衍。因此,軟件測(cè)試在面向?qū)ο缶幊汤锔哂兴闹匾?。與開發(fā)過程類似,測(cè)試過程也必須分步驟進(jìn)行,每個(gè)步驟在邏輯上是前一個(gè)步驟地繼續(xù)。大型軟件系統(tǒng)通常由若干個(gè)模塊組成,每個(gè)模塊又由許多模塊組成。當(dāng)設(shè)計(jì)工作完成以后,我就開始著手測(cè)試的準(zhǔn)備工作。我對(duì)整個(gè)系統(tǒng)設(shè)計(jì)編寫測(cè)試大綱,明確測(cè)試的內(nèi)容和測(cè)試通過的準(zhǔn)則,設(shè)計(jì)完整合理的測(cè)試用例,以便系統(tǒng)全部實(shí)現(xiàn)后進(jìn)行全面的測(cè)試。7.2軟件測(cè)試的任務(wù)1、尋找Bug;
2、避免軟件開發(fā)過程中的缺陷;
3、衡量軟件的品質(zhì);
4、關(guān)注用戶的需求。5、總的目標(biāo)是:確保軟件的質(zhì)量7.3測(cè)試環(huán)境Apache提供的Web服務(wù)器Tomcat6.0使得用戶可以在Windows2000以上操作系統(tǒng)下發(fā)布自己設(shè)計(jì)的動(dòng)態(tài)網(wǎng)頁。因此對(duì)論壇的調(diào)試工作主要是利用Tomcat6.0的強(qiáng)大功能在本機(jī)下完成的。為了在本機(jī)下瀏覽Web頁面,首先在創(chuàng)建該系統(tǒng)的站點(diǎn)上(該系統(tǒng)使用的是Web的默認(rèn)站點(diǎn))將IP地址設(shè)定為,它的缺省域名值為localhost。然后向IE瀏覽器輸入本地動(dòng)態(tài)網(wǎng)頁的URL,Web服務(wù)器在收到瀏覽器傳送的URL之后找到網(wǎng)頁文件,并在服務(wù)器端執(zhí)行該文件后將此文件以HTML文件的形式返回該瀏覽器。7.4測(cè)試方案的選擇測(cè)試任何產(chǎn)品都有兩種方法:如果已經(jīng)知道了產(chǎn)品應(yīng)該具有的功能,可以通過測(cè)試來檢驗(yàn)是否每個(gè)功能都能正常使用;如果知道產(chǎn)品的內(nèi)部工作過程可以通過測(cè)試來檢驗(yàn)產(chǎn)品內(nèi)部動(dòng)作是否按照規(guī)格說明書的規(guī)定正常進(jìn)行。前一種方法稱為黑盒測(cè)試,后一種方法稱為白盒測(cè)試。此處,選擇黑盒測(cè)試。7.5實(shí)施測(cè)試7.5.1測(cè)試用例及步驟在此次網(wǎng)上商品銷售系統(tǒng)的開發(fā)過程中,每開發(fā)完一個(gè)模塊都會(huì)進(jìn)行模塊功能測(cè)試,在測(cè)試的過程中,主要問題有以下幾個(gè):1)界面顯示問題通過運(yùn)行程序,查看運(yùn)行界面是否和程序設(shè)置界面一致,并且一切顯示正常。2)數(shù)據(jù)庫的連接問題在運(yùn)行程序的過程中,對(duì)需要進(jìn)行修改、添加、刪除等操作的數(shù)據(jù)庫,查看是否操作成功,并查看頁面中所輸入的內(nèi)容與數(shù)據(jù)庫中的內(nèi)容是否一致。3)出錯(cuò)處理程序當(dāng)用戶輸入非法或者不合理數(shù)據(jù)時(shí),查看程序能否給出錯(cuò)誤處理或提示信息。7.5.2登錄、注冊(cè)模塊測(cè)試在登陸模塊我們可以登錄已有賬號(hào)ID,當(dāng)輸入不存在的賬號(hào)時(shí)候系統(tǒng)會(huì)提示錯(cuò)誤,一下是我們用不存在的的賬號(hào)登錄時(shí)的情況如圖7.1所示:圖7.1登錄這里我們進(jìn)行一下從注冊(cè)到發(fā)帖的過程,如圖示:首先我們注冊(cè)一個(gè)abc的用戶,這里的聯(lián)系電話等所有信息都需要安規(guī)則填寫,如圖7.2所示:圖7.2用戶注冊(cè)之后我們嘗試用剛才注冊(cè)的用戶名abc來進(jìn)行登錄驗(yàn)證是否注冊(cè)成功,如圖7.3所示:7.3用戶登錄7.5.3集成測(cè)試集成測(cè)試是測(cè)試和組裝軟件的系統(tǒng)化技術(shù),例如,子系統(tǒng)測(cè)試即使在把模塊按照設(shè)計(jì)要求組裝起來的同時(shí)進(jìn)行測(cè)試,主要目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題。由模塊組裝成程序時(shí)有兩種方法。一種是先分別測(cè)試每個(gè)模塊,再把所有模塊按設(shè)計(jì)要求放在一起結(jié)合成所要的程序,這種方法稱為非漸增式測(cè)試方法;另一種方法是把下一個(gè)要測(cè)試的模塊同已經(jīng)測(cè)試好的那些模塊結(jié)合起來進(jìn)行測(cè)試,測(cè)試完以后再把下一個(gè)應(yīng)該測(cè)試的模塊結(jié)合進(jìn)來測(cè)試。這種每次增加一個(gè)模塊的方法稱為漸增式測(cè)試,這種方法實(shí)際上同時(shí)完成單元測(cè)試和集成測(cè)試。(1)從登錄到發(fā)帖:這里一并進(jìn)行從登錄到論壇發(fā)帖的測(cè)試,之后回到論壇發(fā)帖版面去查看是否成功,測(cè)試結(jié)果如下圖所示:圖7.4發(fā)帖圖7.5發(fā)帖成功(2)后臺(tái)管理測(cè)試:在以管理員身份登陸以后,進(jìn)入后臺(tái)后可以看到:添加論壇類別、查看/刪除用戶等操作,此處進(jìn)行板塊的增加,我們選擇在WEB開發(fā)板塊中添加一個(gè)論壇,并取名“添加”且輸入版面公告之后返回論壇界面之后看到版面添加成功,圖下圖所示:圖7.6板塊的增加圖7.7添加成功7.6測(cè)試分析總結(jié)及說明在測(cè)試過程中,我經(jīng)過模塊測(cè)試和組裝測(cè)試,排除了系統(tǒng)的大部分錯(cuò)誤,所預(yù)期的基本任務(wù)目的都已經(jīng)實(shí)現(xiàn),。當(dāng)然排除所有錯(cuò)誤是不太可能的,我想應(yīng)該還有些不易檢測(cè)到的錯(cuò)誤還沒有被發(fā)現(xiàn),需要在使用的過程中進(jìn)一步的完善。設(shè)計(jì)總結(jié)經(jīng)過幾個(gè)月的努力,已經(jīng)基本完成了BBS系統(tǒng)的開發(fā)和設(shè)計(jì).完成了用戶模塊,帖子模塊和后臺(tái)管理模塊的開發(fā),并基本實(shí)現(xiàn)了前期所制定的功能。BBS系統(tǒng)在不斷的設(shè)計(jì)更改過程中,逐漸的成熟。在編寫的最后階段中,參考了一些設(shè)計(jì)模式,在邏輯代碼和數(shù)據(jù)庫連接DAO中抽象出了若干接口,并對(duì)其進(jìn)行了對(duì)象的依賴注入,大大的減少了模塊之間的耦合,使系統(tǒng)具有很高的靈活性和可維護(hù)性,這是BBS系統(tǒng)最大的優(yōu)點(diǎn)。另外在系統(tǒng)的另一個(gè)優(yōu)點(diǎn)就是HTML同步傳輸和AJAX異步傳輸技術(shù)的結(jié)合使用,既減輕了服務(wù)器的負(fù)擔(dān),也加快了用戶的訪問效率.當(dāng)然BBS系統(tǒng)也存在很多不足的地方,比如用戶的權(quán)限判斷過于簡(jiǎn)單,安全性低,希望在今后的學(xué)習(xí)中,逐步的進(jìn)行改進(jìn).通過這次的設(shè)計(jì),加深了對(duì)Strusts1框架,以及面向?qū)ο笏枷氲囊恍├斫?對(duì)于軟件工程方面的設(shè)計(jì)思想也有了更深一步的理解,只有在不斷的實(shí)踐于學(xué)習(xí)中,才會(huì)得到最豐厚的回報(bào)。參考文獻(xiàn)[1]任泰明.基于B/S結(jié)構(gòu)的軟件開發(fā)技術(shù)[M].西安:西安電子科技大學(xué)出版社,2006.[2]黃明.畢業(yè)設(shè)計(jì)指導(dǎo)及案例案析--VisualBasic管理信息系統(tǒng)[M].北京:機(jī)械工業(yè)出版社,2008.[3]郝杰忠.管理信息系統(tǒng)的開發(fā)與應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2006.[4]鄧曉紅.管理信息系統(tǒng)實(shí)驗(yàn)指導(dǎo)與課程設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2006.[5]鐘雁.管理信息系統(tǒng)開發(fā)案例分析[M].北京:清華大學(xué)出版社,2006.[6]劉瑞新,張二峰,齊暉,等.VisualBasic管理信息系統(tǒng)開發(fā)畢業(yè)設(shè)計(jì)指導(dǎo)及實(shí)例[M].北京:機(jī)械工業(yè)出版社,2005.[7]張海藩.軟件工程導(dǎo)論[M].北京:清華大學(xué)出版社,2008.[8]蔡長(zhǎng)安,王琪.基于B/S模式的學(xué)生信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2006,27(14):2585~2588.[9]魏廣科.基于.NET的企業(yè)人力資源信息管理系統(tǒng)研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(11):2682~2686.[10]張景元,巴連良.基于Web的科研信息管理系統(tǒng)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(19):4755~4757.[11]陳珊,喬孟麗,石峰.基于LAN和Internet的教學(xué)管理信息系統(tǒng)設(shè)計(jì)[J].微計(jì)算機(jī)信息,2007,23(24):255~257.[12]楊富國(guó).VisualBasic.NET網(wǎng)絡(luò)編程案例解析[M].北京:清華大學(xué)出版社,2009.[13]趙彥.數(shù)據(jù)庫原理與應(yīng)用技術(shù)--SQLServer[M].北京:清華大學(xué)出版社,2009.[14]T.UmedaandS.Hagiwara.web-baseddatabaseforEPRcentersinsemiconductors[J].BPhysicaB:CondensedMatter,3(7),249-252,2006.[15]Yih-LingHedley,MuhammadYounas.Sampling,informationextractionandsummarisationofHiddenWebdatabases[J],Data&KnowledgeEngineering,InPress,UncorrectedProof,Availableonline10March2006.英文文獻(xiàn)原文BestpracticesforStrutsdevelopmentPalaniyappanThiagarajan,PagadalaSureshStruts:AbriefintroductionStruts,anopensourceframeworkyoucanusetobuildWebapplications,isbasedonthepopularModel-View-Controller(MVC2)designparadigm.TheframeworkisbuiltuponstandardtechnologieslikeJavaServlets,JavaBeans,ResourceBundles,andXML,anditprovidesflexibleandextensiblecomponents.StrutsimplementstheControllerlayerintheformof
ActionServlet
andrecommendsbuildingtheViewlayerusingJSPtaglibraries.StrutsalsoprovidesawrapperaroundtheModellayerthroughAction
classes.Figure1illustratestheStrutsframeworkbasedontheModel-View-Controllerdesign.
Figure1.StrutsandMVC
OverviewofStrutscomponentsFirst,we'llexplaintheStrutscomponentsinthecontextofbestpracticesandtheroleeachoneplaysinyourWebapplicationdevelopment.ActionEvery
Action
ofyourapplicationextendsStruts'
org.apache.struts.action.Action.These
Action
classesprovideaninterfacetotheapplication'sModellayer,actingasawrapperaroundthebusinesslogic.Each
Action
classmustprovideitscase-specificimplementationtothe
perform()
method.The
perform()
methodalwaysreturnsavalueoftype
ActionForward.ActionFormEvery
ActionForm
ofyourapplicationextendsStruts'
org.apache.struts.action.ActionForm.
ActionFormsaresimpleJavaBeansthatencapsulateandvalidaterequestparameters.Tovalidateyourrequestdata,your
ActionForm's
validate()
methodmustgiveacase-specificimplementation.
ActionFormsserveasacarrierofrequestdatatothe
Action
class.AJSPobjectcombineswitharespective
ActionForm
toformyourapplication'sViewlayer,wherealmosteveryformfieldoftheJSPobjectmapstoanattributeofthecorresponding
ActionForm.JSPcustomtaglibrariesTheJSPcustomtaglibrariesareacollectionofactionspresentedastags.ThisisapowerfulfeatureoftheJSPSpecification1.1;itallowsyoutoseparatepresentationfromotherapplicationtiers.ThelibrariesareeasytouseandyoucanreadtheminXML-likefashion.YoucaneasilymaintaintheJSPcomponentsbyminimizingtheuseofJavascriptletsinthem.TheJSPtagsthatStrutsprovidesincludeHTML,logic,andbeantags.ActionErrorsYouuse
ActionErrorstosupportexceptionhandling.An
ActionError
trapsandpropagatesanapplicationexceptiontotheViewlayer.Eachoneisacollectionof
ActionError
instances.
ActionErrorsencapsulateerrormessages,whilethe
</html:errors>
inthePresentationlayerrendersallerrormessagesinthe
ActionError
collection.BestPractice1.ReusedataacrossmultipleActionFormsNowthatyouarefamiliarwiththeStrutscomponents,wewillcontinuebyshowingyouwaystogetthemostoutoftheframework.First,StrutsrecommendsthatyouassociateeveryJSPobjectwithan
ActionForm,whichencapsulatesdatarepresentedinthescreen.YouaccesstheformdataintheJSPobjectusingaccessorymethodsfoundin
ActionForm.Listing1showstheconventionaluseof
ActionForm
tagintheViewlayer.Listing1.UsingActionForminJSP<html:formaction="/bp1"><html:textproperty="attrib1"/></html:form>The
ActionForm
called"BP1AForm"includestheattribute
attrib1,aswellasitsgetterandsettermethods.Intheconfigurationfilestruts-config.xml,theaction"/bp1"mapsto
bp1AForm
usingthe
name
attribute.ThisfacilitatesdatadisplayintheJSP.Toimplementthisbestpractice,Strutsrecommendsyoudotwothings:CreateaJavaBean(BP1BForm)withattributesthatformanattributesubsetin
BP1AForm,alongwiththeattributes'getterandsettermethods.Replacetheattributesin
BP1AForm
withthebean
BP1BForm
byassociatingthebeanwith
BP1AForm.Nowyoucanaccessthisattributesubsetin
BP1AForm
through
BP1BForm.Listing2showsyouhow.Listing2.AccessingformattributesinJSP<html:formaction="/bp1"><bean:definename="bp1AForm"property="bp1BForm"id="bp1B"type="com.ibm.dw.webarch.struts.BP1BForm"/><html:textname="bp1B"property="subsetAtt1"/></html:form>BestPractice2.UseActionclasstohandlerequestsTypicallywhenusingtheStrutsframework,foreveryactiontheJSPcomponentrequestsyourapplicationtoexecute,theapplicationmustextendStruts'
org.apache.struts.action.Action
tocreatean
Action
class.Thisindividual
Action
classinterfaceswiththeapplication'sModellayerwhileprocessingtherequest.Toimplementthispractice,Strutsrecommendsyoufollowthesesteps:Createan
Action
class,say
BP2Action,byextending
org.apache.struts.action.Action.Createallother
Action
classesinyourWebapplicationbyextending
BP2Action.In
BP2Action,createamethod
performTask(),asinpublicabstract
ActionForwardperformTask(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException.In
BP2Action
addoneormoregenericmethodstotheapplication,forexample
serverSideValidate().Youcandecideonthemethod'saccessmodifierbyconsideringthefollowingfactors:Ifall
Action
classesmustimplementthismethod,makeitabstract.Ifsome
Action
classeswillprovideacase-specificimplementation,declarethemethodprotectedandgiveitadefaultimplementation.In
BP2Action,declaremethod
perform()
asfinal.Invoketheabovegenericmethod,whichmustalwaysbecalledbeforeprocessingtherequest.Nowcallthemethod
performTask()
createdin
step3.Inevery
Action
classextending
BP2Action,addmethod
performTask()
withacase-specificimplementation.AdvantagesThispracticehastwomainadvantages.First,ithelpsyouavoidredundantcodeinevery
Action
classofyourWebapplication.Second,itgivestheapplicationmorecontrolovergenerictasksbycentralizingthebehaviorinone
Action
class.BestPractice3.UseActionFormtoworkonsessiondataInaStruts-basedWebapplication,each
ActionForm
extends
org.apache.struts.action.ActionForm.These
ActionFormsencapsulatepagedataandprovideavalidationframeworktovalidaterequestparameters.MostWebapplicationsmaintaindatainsessiontomakethemavailablethroughouttheapplication.ThisbestpracticeaddressesthisWebapplicationfeature.Itallowsmethods
toSession()
and
fromSession()
tomovesessiondatatoandfromtheformdata.Thus,itaddressessessiondatamaintenanceinaWebapplication.Toadheretothispractice,followthesesteps:Createanabstractclassnamed
BP3Form
byextending
org.apache.struts.action.ActionForm.In
BP3Form,addmethodswithaccessmodifiersasinpublicabstract
voidtoSession(SessionDatasessionData)
and
voidfromSession(SessionDatasessionData).Inevery
ActionForm,extend
BP3Form
andimplementtheabstractmethodsinwhichtheformdataistransportedtoandfromthesession.Thecorresponding
Action
classmaydeterminetheorderinwhichthesemethodsarecalled.Forexample,youcouldinvokemethod
toSession()
onthe
ActionForm
justbefore
actionForward
isdetermined.WhentousethispracticeThispracticeismostusefulwhensessiondataismaintainedasasingleobjectand/oreverypagemanipulatesorusessessiondata.BestPractice4.HandleexceptionseffectivelyConventionally,whenanapplicationexceptionoccursinan
Action
class,theexceptionisfirstlogged.ThentheclasscreatesanActionError
andstoresitintheappropriatescope.This
Action
classthenforwardscontroltotheappropriate
ActionForward.Listing3showshow
Action
classhandlesexceptions.
Listing3.ExceptionhandlinginanActionclasstry{//CodeinActionclass}catch(ApplicationExceptione){//logexceptionActionErrorsactionErrors=newActionErrors();ActionErroractionError=newActionError(e.getErrorCode());actionErrors.add(ActionErrors.GLOBAL_ERROR,actionError);saveErrors(request,actionErrors);}Whileconventionalexceptionhandlingproceduressaveexceptioninformationinevery
Action
class,bestpractice4aimstoavoidredundantcodewhilehandlingexceptions.Tousethispractice,Strutsrecommendsfollowingthesesteps:Createan
Action
class,say
BP4Action,byextending
org.apache.struts.action.Action.Createallother
Action
classesinyourWebapplicationbyextending
BP4Action.In
BP4Action,declarevariable
ActionErrorsactionErrors=newActionErrors();.In
BP4Action,createamethod
performTask()
asinpublicabstract
ActionForwardperformTask(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse,ActionErrorsactionErrors)throwsIOException,ServletException.In
BP4Action,declaremethod
perform()
asfinal.Theninvokegenericmethods,whichmustalwaysbecalledbeforeprocessingtherequest.Nowyoucancallthemethod
performTask()
createdinthepreviousstep.Whileimplementingmethod
performTask()
inevery
Action
class(byextending
BP4Action),handleapplicationexceptionsasshowninListing4.Listing4.UsingActionErrorseffectivelytry {//CodeinActionclass}catch(ApplicationExceptionappException){//Logexception//AdderrortoactionErrorsactionErrors.add(ActionErrors.GLOBAL_ERROR,newActionError(appException.getErrorCode()));}In
BP4Action,afterinvokingthemethod
performTask(),savethe
ActionErrors
using
saveErrors(request,errors).AdvantagesThispractice'smainadvantageisthatitavoidscoderedundancyinevery
Action
classthathandles
ActionErrors.InconclusionBuildinganeasilymaintainableWebapplicationcanbeoneofthemostchallengingtasksforadevelopmentteam.UsingamatureframeworklikeStrutshelpsyouimplementtheinfrastructurecodenormallyassociatedwithbuildinganapplication.TheStrutsframeworkprovidesasetofstandardinterfacesforpluggingbusinesslogicintotheapplication,aconsistentmechanismacrossdevelopmentteamsforperformingtaskssuchasuserdatavalidation,screennavigation,andsoforth,aswellasasetofcustomtaglibrariestosimplifydevelopingscreens.Thesefourbestpracticesareimportantforyoutoextractmorefromtheframework'sfeatures.You,asadeveloper,canbenefitfromtheselessonstoincreaseyourcodemodularityandapplicationreusability,plusminimizecoderedundancy.TheseareallcriticaltobuildinganextensibleWebapplication.英文文獻(xiàn)翻譯Struts開發(fā)的最佳實(shí)踐PalaniyappanThiagarajan,PagadalaSureshStruts:簡(jiǎn)介Struts是一種開源框架,可用來構(gòu)建Web應(yīng)用程序,它基于流行的Model-View-Controller(MVC2)設(shè)計(jì)范型。該框架構(gòu)建在一些標(biāo)準(zhǔn)的技術(shù)之上,比如JavaServlets、JavaBeans、ResourceBundles和XML,并且可提供靈活和可擴(kuò)展的組件。Struts以ActionServlet
的形式實(shí)現(xiàn)了Controller層,并建議使用JSP標(biāo)記庫構(gòu)建View層。Struts通過
Action
類提供了圍繞Model層的包裝器。圖1展示了基于Model-View-Controller設(shè)計(jì)的Struts框架。圖1.Struts和MVC
Struts組件概覽首先,我們?cè)谧罴褜?shí)踐上下文中解釋Struts組件,以及它們?cè)赪eb應(yīng)用程序開發(fā)中所起的作用。Action應(yīng)用程序的每個(gè)
Action
都會(huì)擴(kuò)展Struts的
org.apache.struts.action.Action
類。這些
Action
類為應(yīng)用程序的Model層提供了一個(gè)接口,充當(dāng)圍繞業(yè)務(wù)邏輯的包裝器。每個(gè)
Action
類都必須向
perform()
方法提供其特定于用例的實(shí)現(xiàn)。perform()
方法經(jīng)常返回類型
ActionForward
的一個(gè)值。ActionForm應(yīng)用程序的
ActionForm
擴(kuò)展了Struts的
org.apache.struts.action.ActionForm
類。ActionForm
是一些封裝和驗(yàn)證請(qǐng)求參數(shù)的簡(jiǎn)單JavaBean。要驗(yàn)證請(qǐng)求數(shù)據(jù),ActionForm
的
validate()
方法必須給出一個(gè)特定于該情況的實(shí)現(xiàn)。ActionForm
作為運(yùn)載工具,向Action
類提供請(qǐng)求數(shù)據(jù)。一個(gè)JSP對(duì)象與各自的
ActionForm
對(duì)象相結(jié)合,構(gòu)成應(yīng)用程序的View層。在該層,幾乎JSP對(duì)象的每個(gè)表單字段都映射到相應(yīng)的
ActionForm
的屬性。JSP定制標(biāo)記庫JSP定制標(biāo)記庫是用標(biāo)記表示的一組行為的集合。這是JSPSpecification1.1的一個(gè)強(qiáng)大特性;它將其他應(yīng)用程序?qū)拥谋硎緟^(qū)別了開來。這些庫易于使用,而且可以以一種類似XML的方式來讀取。只要盡量少地在其中使用Javascriptlet,就可以輕松維護(hù)JSP組件。Struts提供的JSP標(biāo)記包括HTML、邏輯和bean標(biāo)記。ActionErrors可以使用
ActionError
來支持異常處理。ActionError
捕捉應(yīng)用程序異常,并將其傳送給View層。每個(gè)異常都是一個(gè)
ActionError實(shí)例的集合。ActionError
可以封裝錯(cuò)誤消息,而Presentation層中的
</html:errors>
可以呈現(xiàn)
ActionError
集合內(nèi)的所有錯(cuò)誤消息。最佳實(shí)踐1.跨多個(gè)ActionForm重用數(shù)據(jù)熟悉了Struts組件之后,就可以繼續(xù)學(xué)習(xí)如何充分利用這一框架。首先,Struts建議將每個(gè)JSP對(duì)象與一個(gè)
ActionForm
相關(guān)聯(lián),后者可以封裝屏幕上顯示的數(shù)據(jù)??梢酝ㄟ^
ActionForm
內(nèi)的附加方法來訪問JSP對(duì)象內(nèi)的表單數(shù)據(jù)。清單1展示了
ActionForm
標(biāo)記在View層中的傳統(tǒng)方法。清單1.使用ActionForm<html:formaction="/bp1"><html:textproperty="attrib1"/></html:form>這個(gè)
ActionForm
被稱為“BP1AForm”,它包括屬性
attrib1
及其getter和setter方法。在配置文件
struts-config.xml
中,行為“/bp1”通過
name
屬性映射到
bp1AForm。這有助于在JSP中顯示數(shù)據(jù)。要實(shí)現(xiàn)這一最佳實(shí)踐,Struts建議您進(jìn)行以下兩個(gè)操作:創(chuàng)建一個(gè)JavaBean(BP1BForm),且其屬性是
BP1AForm
屬性的子集,還要?jiǎng)?chuàng)建這些屬性的getter和setter方法。通過將這個(gè)bean與
BP1AForm
關(guān)聯(lián),用bean
BP1BForm
的屬性替代
BP1AForm
中的屬性。現(xiàn)在就可以通過
BP1BForm
訪問BP1AForm
中的屬性子集了。清單2展示了訪問的方式。清單2.訪問JSP中的表單屬性<html:formaction="/bp1"><bean:definename="bp1AForm"property="bp1BForm"id="bp1B"type="com.ibm.dw.webarch.struts.BP1BForm"/><html:textname="bp1B"property="subsetAtt1"/></html:form>最佳實(shí)踐2.使用Action類處理請(qǐng)求通常,在使用這個(gè)Struts框架時(shí),對(duì)于JSP組件請(qǐng)求應(yīng)用程序執(zhí)行的每個(gè)動(dòng)作,應(yīng)用程序都必須擴(kuò)展Struts的org.apache.struts.action.Action
以創(chuàng)建
Action
類。在處理請(qǐng)求時(shí),單個(gè)的
Action
類與應(yīng)用程序的Model層連接。要實(shí)現(xiàn)這一最佳實(shí)踐,Struts建議您遵循以下步驟:通過擴(kuò)展
org.apache.struts.action.Action
創(chuàng)建一個(gè)
Action
類,比如
BP2Action。通過擴(kuò)展
BP2Action
在Web應(yīng)用程序中創(chuàng)建所有其他
Action
類。在
BP2Action
類中創(chuàng)建一個(gè)方法
performTask(),就像在公共抽象類
ActionForwardperformTask(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException
中一樣。在
BP2Action
類中向應(yīng)用程序添加一個(gè)或多個(gè)泛型方法,比如
serverSideValidate()。考慮以下因素后決定方法的訪問修飾符:如果所有
Action
類都必須實(shí)現(xiàn)此方法,則讓其為抽象。如果某些
Action
類提供一個(gè)特定的實(shí)現(xiàn),則將此方法聲明為受保護(hù),并給它一個(gè)默認(rèn)實(shí)現(xiàn)。在
BP2Action
類中,將方法
perform()
聲明為final。調(diào)用上述的泛型方法(通常在處理請(qǐng)求前調(diào)用該方法)。現(xiàn)在調(diào)用
步驟3
中創(chuàng)建的方法
performTask()。在每
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 截洪溝施工方案
- 2025年口腔診療器械消毒技術(shù)操作規(guī)范試題與答案
- 醫(yī)務(wù)科工作總結(jié)及工作計(jì)劃
- 慢性病防治試題及答案
- 四川硬筆法四級(jí)考試試題及答案
- 2025建筑工程技術(shù)考試試題(含答案)
- 物流師三級(jí)考試試題含答案
- 2025年海選詩詞大賽題庫及答案
- 震動(dòng)打樁機(jī)安全操作規(guī)程
- 建設(shè)工程施工合同糾紛要素式起訴狀模板專業(yè)權(quán)威靠譜
- 意識(shí)障礙的判斷及護(hù)理
- 儲(chǔ)能電站安全管理與操作規(guī)程
- 2025年宿遷市泗陽縣保安員招聘考試題庫附答案解析
- 交通安全企業(yè)培訓(xùn)課件
- 2025年廣東省中考物理試卷及答案
- 皮革項(xiàng)目商業(yè)計(jì)劃書
- 主管護(hù)師護(hù)理學(xué)考試歷年真題試卷及答案
- 華文慕課《刑法學(xué)》總論課后作業(yè)答案
- 公路護(hù)欄波型梁施工方案
- 2025版煤礦安全規(guī)程新增變化條款考試題庫
- 基于SOLO分類理論剖析初中生數(shù)學(xué)開放題解決水平:現(xiàn)狀差異與提升策略
評(píng)論
0/150
提交評(píng)論