BBS論壇開發(fā)經驗總結
BBS論壇開發(fā)經驗總結
1引言
1.1編寫目的
總結完成本項目所獲得的經驗和不足,為我們以后的開發(fā)項目和進一步的學習提供了良好的素材。本文檔的編寫目的是:詳細定義的總體功能,詳細說明系統(tǒng)功能,劃分程序基本結構,各程序名稱和功能,以便于系統(tǒng)詳細設計和編程。
1.2背景
現(xiàn)實生活中的交流存在時間和空間上的局限性,交流人群范圍狹小以及間斷的交流不能保證信息的準確性和可取性。因此,用戶需要通過網(wǎng)上論壇的交流擴大交流面,同時可以從多方面獲得自己所需要的最及時的信息。論壇又叫BBS,全稱是BulletinBoardSystem,中文意思是“電子公告板”,它是Internet上的一種交互性極強的、網(wǎng)友喜聞樂見的電子信息服務系統(tǒng)。它為網(wǎng)民提供一塊公共的電子白板,每個用戶都可以在上面書寫、發(fā)布自己的信息或提不同的意見,以便與其他用戶進行交流和討論。所開發(fā)軟件名稱:BBS管理系統(tǒng)
論壇的名稱:BBS管理系統(tǒng)項目類型:大學論壇
項目開發(fā)時間:201*年3月18號201*年6月15號
1.3定義
游客
所有訪問論壇,尚未登錄的人。會員
申請注冊并提交成功的人。版主
具有發(fā)布版塊公告,管理版內帖子,刪除帖子/跟帖的權利。系統(tǒng)管理員
具有宣布論壇開放/關閉注冊,帖子的批量刪除,版塊管理,用戶管理權利的總版主。用戶
此“用戶”泛指所有的會員和游客。管理人員
此“管理人員”泛指版主和系統(tǒng)管理員。注冊
游客訪問論壇按系統(tǒng)規(guī)則申請注冊。登錄
會員按系統(tǒng)規(guī)則登錄論壇。退出
已登錄用戶退出登錄狀態(tài)。瀏覽主題
游客及登錄的用戶通過此業(yè)務按系統(tǒng)規(guī)則瀏覽論壇上各版塊的主題
用戶(包括所有會員或游客)通過此操作可以瀏覽自身權限許可范圍內的論壇的板塊列表,主題列表,以及每一個主題。發(fā)布主題
會員通過此業(yè)務按系統(tǒng)規(guī)則進行主題的發(fā)布。回復主題
會員/游客通過此業(yè)務按系統(tǒng)規(guī)則進行主題的回復。修改個人資料
會員通過此業(yè)務按系統(tǒng)規(guī)則修改自已在注冊新用戶時所填寫的個人資料或是已經通過此業(yè)務修改過的個人資料。管理版內帖子
版主通過此業(yè)務按系統(tǒng)規(guī)則在自已管理的版塊內對帖子進行鎖定,解鎖,置頂,取消置頂,加為精華,解除精華,刪除帖子等操作。刪除帖子
管理人員通過此業(yè)務按系統(tǒng)規(guī)則在自已權限內對不良帖子進行刪除操作。禁用會員
管理人員通過此業(yè)務按論壇的規(guī)則對于屢次違反規(guī)定且拒不改悔的一般會員進行禁用操作,禁用后該用戶無法正常登錄。查詢主題
會員和管理人員通過此業(yè)務按關鍵字對帖子進行查找。帖子的批量刪除
管理人員通過此業(yè)務按系統(tǒng)規(guī)則對于不符合規(guī)定的帖子進行批量的刪除或者對于發(fā)錯版塊的帖子進行轉移等操作。版塊管理
系統(tǒng)管理員通過此業(yè)務按系統(tǒng)規(guī)則對版塊/版主進行管理(版主審核,更換),如版塊的增加,重新命名,刪除,關閉等操作。
1.4參考資料
《軟件工程導論》
《BBS開發(fā)指南》
《BBS系統(tǒng)概要設計說明書》
2實際開發(fā)結果
2.1產品
最終制成的產品是:BBS網(wǎng)站。
該基于Web開發(fā)的網(wǎng)站供四種用戶使用:網(wǎng)頁瀏覽者(即游客)、會員、版主、管理員。游客可以瀏覽帖子、回復帖子,但無權發(fā)帖,即不能進入add_article.aspx頁。會員登錄后可以瀏覽帖子內容,可以發(fā)帖、回復帖子。版主登錄后,跳轉至版主后臺管理頁面,版主可以刪除帖子和刪除回復。管理員登錄后跳轉至管理員后臺管理界面,管理員有權管理版塊、管理版主、管理公告板、管理用戶和刪除圖片。2.2主要功能和性能
該BBS網(wǎng)站具有了一般BBS所有的功能,如用戶注冊、用戶信息管理、發(fā)帖功能、帖子管理、主題詞查詢。
對照項目概要設計,“問卷調查”和“群組”功能沒有實現(xiàn),未完全達到原定的開發(fā)目標。
2.3基本流程
用圖給出本程序系統(tǒng)的實際的基本的處理流程。網(wǎng)站總體架構圖:
網(wǎng)站面向的用戶:
2.4進度
實際進度與原定計劃進度相比,實際進度延遲了。究其原因,是在項目實現(xiàn)階段卡殼,代碼編寫能力有限,耽誤時間太多。
3開發(fā)工作評價
3.1對技術方法的評價
用DreamWeaver制作靜態(tài)網(wǎng)頁,輔以Photoshop修改圖片。數(shù)據(jù)庫用的是SQLServer201*,對于一個小型網(wǎng)站已經足夠用。開發(fā)環(huán)境是VisualStudio201*,用C#語言。
在制作靜態(tài)網(wǎng)頁時,用的是HTML語言和CSS搭建框架,用CSS的好處是可以將網(wǎng)頁設計中的HTML代碼和CSS代碼分離開,一個CSS文件可以供多個網(wǎng)頁鏈接使用,有效減少代碼量。
在SQLServer201*中連接數(shù)據(jù)庫時用“SQLServer身份驗證”,幫數(shù)據(jù)庫多加了一層保護。
在index.aspx頁顯示整個論壇版塊信息時,用Repeater綁定數(shù)據(jù),為了排版的美觀,在標簽之間添加,這樣既利用了有序列表在橫著排列數(shù)據(jù)時的優(yōu)勢,又結合了表格固定布局的方便,使整個網(wǎng)頁的排版美觀又人性化。3.4出錯原因的分析
1.錯誤提示:
MicrosoftOLEDBProviderforODBCDrivers錯誤"80004005"
[Microsoft][ODBC驅動程序管理器]未發(fā)現(xiàn)數(shù)據(jù)源名稱并且未指定默認驅動程序
/myforum/bbsconn.asp,行4
做檢測昵稱中的check.asp這個文件時,
,用了SSI,IE提示了這個錯誤!
這個錯誤提示是在刷新的三次才出來的,也就是說,如果IE不提示錯誤,注意多刷新幾次,也許提示信息就出來了。2.錯誤提示:
ADODB.Recordset錯誤"800a0cc1"
項目在所需的名稱或序數(shù)中未被發(fā)現(xiàn)。
/myforum/baychoice.asp,行47
這個錯誤的原因是:沒有建立一個rs記錄集.3錯誤提示:
這里面的%和>一定不能分開要寫在一塊,要不會出錯的
4經驗與教訓
這次項目開發(fā)培養(yǎng)了我們在現(xiàn)有技術環(huán)境下的溝通信息、分工協(xié)作、自主創(chuàng)新的能力,經過一個學期的開發(fā)讓我們學到了很多知識和技能是要結合的。而且,這次項目開發(fā)還培養(yǎng)了我們那種的面對問題時團結一致,積極向上的團隊精神。設計的過程環(huán)環(huán)相扣,從分工到協(xié)作,從設計到運行,嚴格的團對項目開發(fā)模式讓我們受益頗多。
在這個過程中教訓也很多。要想更好完成項目設計任務,我們應該做好分工協(xié)作的工作,明確我們每一個項目設計流程中的職責和目標,這樣才能更好的做到從分工到協(xié)作的跨越和融合,從而更好的完成項目開發(fā)的目標。經過這次項目開發(fā),我們也認識到我們的自主設計開發(fā)能力還很欠缺,程序設計的知識很匱乏,代碼編寫能力的不足,這也為我們以后的學習和實踐提供了方向和動力。相信,在這次項目開發(fā)的考驗下,在已有的經驗和教訓的指導下,我們會更有動力去充實和完善自己項目開發(fā)的知識和技能,更有信心做好明天軟件設計的工作。
擴展閱讀:BBS論壇開發(fā)總結
BBS論壇開發(fā)總結
[前言:]
在201*年10月28日,16:24:15我開始開發(fā)BBS論壇。開始時準備把ATM系統(tǒng)用web開發(fā)出來,使用Struct技術。因為前期用了一個星期復習了Struct2。由于很久沒用,很多技術都生疏了。要學好新的技術,還是要實踐?吹轿疫@里一個BBS系統(tǒng)用Struct1開發(fā)的,就想把它改成Struct2。正好復習學的Struct2。由于BBS論壇是在一個已經開發(fā)好的系統(tǒng)上修改的。界面原型都有,不用擔心界面的美觀問題。今天是201*-11-14完成這個作品。記下這個開發(fā)中學到的東西。[正文:]系統(tǒng)分為前臺功能和后臺管理。(第一次用VISO畫系統(tǒng)結構圖,有點不清楚。)
BBS系統(tǒng)前臺功能后臺管理用戶登入用戶注冊發(fā)帖瀏覽帖回帖欄目管理專區(qū)管理回帖管理用戶管理
[代碼分析:]
首頁index.jsp。下圖是首頁的組成圖:
用戶已登入top2.jsp首頁歡迎用戶沒有登入top.jsp首頁Inde.jsp標簽論壇專區(qū)信息底部,論壇開發(fā)商信息footer.jsp
頁面頭上的歡迎信息和頁面底部的開發(fā)商信息在前臺每個網(wǎng)頁上都是一樣的。所以后面不再介紹了。后面基本頁面發(fā)生改都是在中間部分發(fā)生變化。
首頁歡迎,使用JavaScript獲取當前的時間,且每200ms更新一次。JavaScript代碼如下:
functionclockon(bgclock){varnow=newDate();varyear=now.getYear();varmonth=now.getMonth();vardate=now.getDate();varday=now.getDay();varhour=now.getHours();varminu=now.getMinutes();varsec=now.getSeconds();varweek;month=month+1;if(month
順序畫的估計有錯,這種UML的圖很少畫,要練練。用戶登入信息請求通過表單發(fā)送的dologin.action。dologin.action。根據(jù)struts.xml配置文件跳轉頁面。
請求如下:
maxlength="20"/>
publicclassDoLoginextendsActionSupport{@OverridepublicStringexecute(){if(LoginDAO.login(login.getUsername(),ActionContext.getContext().getSession().put("name",login.getUsername());ActionContext.getContext().getSession().put("islogin",returnSUCCESS;ActionContext.getContext().getSession().put("islogin",this.addFieldError("userlogin","你輸入的用戶名或密碼錯誤,privateLoginlogin=newLogin();login.getPassword())){1);}else{0);請重新輸入");returnERROR;}publicvoidsetLogin(Loginlogin){}this.login=login;publicLogingetLogin(){}returnlogin;}}
struts.xml配置如下:
index.jspindex.jsp
這是使用struts2最基本也是最經典的方式。后面的差不多是這種。
在寫Index.jsp頁面的時候還學到2點,1學會了使用標簽。
2學會了如何從Struct棧中取值。怎么取的session中的值:代碼如下:
3:自定義標簽
發(fā)現(xiàn)了自定義標簽的好處,使用自定義表情,可以很多需要在JSP頁面寫的代碼都在標簽文件中寫好,這樣就很好的把代碼和標簽分離。我想這也是struts2定義那么多標簽的原因吧。
自定義標簽的方法如下:DisplayTag.java標簽文件
publicclassDisplayTagextendsTagSupport{out.println("");out.println("");if(i%2==0){}elseout.println("");out.println("");out.println("");out.println("科技公司出版的["+(f.getForumnname())+"]語言類專區(qū)");out.println(""+f.getCreatetime()+"");out.println("");out.println("");out.println("
1.01.2ApplicationTagLibrary-example-1.0ThistaglibrarycontainsfunctionalityfortheAddressbookStrutsSampleApplication.Withsmallmodifications,theycanbeusedasgenerictags.displaycom.bbs.struts.tl.DisplayTagempty論壇版塊
在web.xml文件中配置
:8080/BBSStruct2/app.tld/WEB-INF/app.tld
用戶注冊register.jsp模式和index.jsp類似
不過在這里使用了和標簽
首頁上一頁下一頁尾頁
后面的分頁方式也基本如此。分頁主要是控制了MySQL每次查詢記錄的條數(shù)。使用limt()
回帖:response.jsp
瀏覽帖子的回復和回帖顯示在一個頁面上。使用標簽組合成一個頁面;緦崿F(xiàn)在當前頁回復的顯示,在當前的帖子能顯示。使用了Struct+json+AJAX。
使用AJAX的異步交互,使用JSON顯示返回的數(shù)據(jù)。DoResponse.jsp處理請求的代碼如下:
publicclassDoResponseextendsActionSupport{}returnSUCCESS;privateResponserp=newResponse();privateStringresult;//返回的JSON數(shù)據(jù)publicStringexecute(){Stringname=(String)"name");ActionContext.getContext().getSession().get(rp.setAuthor(name);ResponseDAO.InsertResponseRecord(rp);Loginuser=null;try{}Mapmap=newHashMap();map.put("content",rp.getContent());map.put("xq",rp.getXq());map.put("author",rp.getAuthor());map.put("submittime",Time.getCurrentTime());if(name==null){}JSONObjectjo=JSONObject.fromObject(map);//構成JSON格式result=jo.toString();map.put("email","");map.put("tx","0.gif");map.put("qq","");map.put("email",user.getEmail());map.put("tx",user.getTx());map.put("qq",user.getOicq());user=LoginDAO.getRecordForUser(name);}catch(SQLExceptione){}else{AJAX的JavaScript函數(shù)如下:
functionsubm(){//提交請求vartitle=$("#title").val();varxq=getRadioBoxValue("xq");//獲取單選按鈕的值varcontent=$("#text").val();vartopicname=$("#topicname").val();vartopicid=$("#topicid").val();$.post("doResponse.action",{"rp.title":title,"rp.xq":xq,"rp.confunction(data){tent":content,"rp.topicname":topicname,"rp.topicid":topicid},varrs=eval(data);//包數(shù)據(jù)解析為json格式varrp2=rs.result;varrp=eval("("+rp2+")")//把數(shù)據(jù)解析為JSON格式$("#02").append(""+""+rp.email+""+valign="baseline">"+rp.qq+""+valign="baseline">"+rp.submittime+""+""+""+rp.content+""+"作者:"+rp.author+""+""+}functiongetRadioBoxValue(radioName){varobj=document.getElementsByName(radioName);//這個是以標簽的name來取控件for(i=0;i struct.xml中的配置如下: 后臺管理adminindex.jsp 使用HTML的frameset。組成管理頁面。這是一種比較常用的方式。左邊框架顯示功能,右邊框架顯示主要內容。但是存在一個很大的問題。Struct2的struct.xml不支持HTMl的框架。頁面請求的信息如果直接跳轉Frameset的框架頁面里面的子頁面接收不到參數(shù), 如果直接跳轉到子頁面頁面就沒有那個效果,如何解決這個問題呢?看了網(wǎng)上不少解決方法,發(fā)現(xiàn)只有一種解決方法,就是把需要傳送的變量存在Session里面。 個人覺得存在把值存在session中是一種非常浪費服務器資源的。特別如果要顯示的數(shù)據(jù)是批量的數(shù)據(jù),是ArrayList,更是非常浪費資源。而且ArrayList也不能存在cookie里面。 所以在這時我放棄了Struct2很多遍歷。 欄目管理:main.jsp 因為main.jsp的版塊少。所以這里我沒有做分頁處理。 但是這樣也有一個亮點點擊彈出對話框;緦崿F(xiàn)原理是,在頁面載入的是時候將某層影藏,在點擊某按鈕或超鏈接觸發(fā)事件的時候顯示。主要通過CSS+div+JavaScriptdiv源碼如下:初始時隱藏狀態(tài)。 論壇名稱:版主:保存 JavaScript代碼如下: 撤銷varObj=""document.onmouseup=MUpdocument.onmousemove=MMovefunctionMDown(Object){Obj=Object.id;document.all(Obj).setCapture();pX=event.x-document.all(Obj).style.pixelLeft;pY=event.y-document.all(Obj).style.pixelTop;}functionMMove(){if(Obj!=""){document.all(Obj).style.left=event.x-pX;document.all(Obj).style.top=event.y-pY;}}functionMUp(){if(Obj!=""){ 修改和提交的形式使用的是Struct經典模式,不再介紹。 document.all(Obj).releaseCapture();Obj="";}}//顯示窗口的方法functionshowwin(){varwinNode=$("#massage_box");winNode.css("visibility","visible");}//隱藏窗口的方法functionhide(){varwinNode=$("#massage_box");winNode.css("visibility","hidden");} 專區(qū)管理:topicmanager.jsp Struct2的struct.xml不支持HTMl的框架。我放棄了Struct2的優(yōu)越性,在遍歷顯示版塊主題的時候。我沒有使用標簽。而是自己開發(fā)了標簽。開發(fā)方式已介紹。不再重復。 連分頁操作都是在JSP頁面直接寫Java代碼。有些違背MVC的意思,但是為了實習功能只能出此下策。代碼如下: 首頁上一頁下一頁尾頁在后面的后臺管理中分頁基本是按照這種顯示實現(xiàn)的。 回帖管理:responsetopic.jsp和topicList.jsp基本類似,不再介紹。用戶管理:userManager.jsp有個特別之處,查找用戶。 顯示查找出來的會員不需要分頁,更好的處理邏輯關系。查找用戶還另外寫了一個頁面searchuser.jsp處理。 需注意的是:使用Strcut的方式提交在本頁面顯示。URL地址是XXX.action如果則會鏈接到XXX.action#中。調用不了本地JSP頁面的JavaScript函數(shù)。(最后一天為了這個小問題糾結了很久。) 解決方法是:超鏈接直接提交。不通過AJAX異步提交了。代碼如下: 刪除 最后介紹下攔截其知識。在后臺管理模塊中。管理員所有的操作都比現(xiàn)在已經登入的條件下。所有配置攔截器很必要。 附上一個講好的攔截器控制登入的struct.xml的配置 //配置攔截器//配置攔截器棧//保護默認攔截器//將配置的攔截器設置為默認攔截器//設置全局的結果。/index.jsp [結束]: 以上是BBS論壇開發(fā)的全過程和主要學到和用到的知識點。主要是使用Struct+AJAX+JSON+CSS 通過這次的開發(fā),開始明白了MVC模式的意義了。以后的代碼會更多的注意MVC模式。更多的注意低耦合高內聚。依賴抽象。 BBS論壇比較簡單。開發(fā)過程也比較簡單。以后要養(yǎng)成這種總結的習慣。下一步Spring3.0+Struct2.0+Hribetate3.5+AJAX(Jquery)。 友情提示:本文中關于《BBS論壇開發(fā)經驗總結》給出的范例僅供您參考拓展思維使用,BBS論壇開發(fā)經驗總結:該篇文章建議您自主創(chuàng)作。 來源:網(wǎng)絡整理 免責聲明:本文僅限學習分享,如產生版權問題,請聯(lián)系我們及時刪除。
《BBS論壇開發(fā)經驗總結》由互聯(lián)網(wǎng)用戶整理提供,轉載分享請保留原作者信息,謝謝!
鏈接地址:http://www.seogis.com/gongwen/673093.html