都市供求信息網(wǎng)_第1頁(yè)
都市供求信息網(wǎng)_第2頁(yè)
都市供求信息網(wǎng)_第3頁(yè)
都市供求信息網(wǎng)_第4頁(yè)
都市供求信息網(wǎng)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

PAGE10都市供求信息網(wǎng)摘要在全球知識(shí)經(jīng)濟(jì)和信息化高速發(fā)展的今天,無(wú)論是在生活、工作還是在學(xué)習(xí)方面,信息都是決定成敗的關(guān)鍵。小到生活中的需求,大到企業(yè)的發(fā)展,特別是對(duì)企業(yè)實(shí)現(xiàn)跨地區(qū)、跨行業(yè)、跨國(guó)經(jīng)營(yíng),信息都起著至關(guān)重要的作用。而信息時(shí)代的代表便是網(wǎng)絡(luò)技術(shù)的日漸成熟,現(xiàn)在網(wǎng)絡(luò)已經(jīng)和我們緊密的聯(lián)系起來(lái)了,我們不敢想象沒(méi)有網(wǎng)絡(luò),我們的生活會(huì)變成什么樣,也許就像食物中沒(méi)有調(diào)料一樣,我們的生活離開(kāi)了網(wǎng)絡(luò)會(huì)變得索然無(wú)味。通過(guò)網(wǎng)絡(luò)我們可以足不出戶的做許多事情。休閑,娛樂(lè),學(xué)習(xí),購(gòu)物,求職等等許多我們數(shù)之不盡的事情。隨著信息化的不斷進(jìn)步,在各都市供求業(yè)務(wù)來(lái)往頻繁的今天,一種新的供求信息模式已然出現(xiàn),那就是都市供求信息網(wǎng)。都市供求信息網(wǎng)的好處:節(jié)省了傳統(tǒng)供求形式的成本,就算是庫(kù)房也可以在比較便宜的位置,不用像傳統(tǒng)供求形式那樣繁瑣;現(xiàn)在很多培訓(xùn)、房屋租賃機(jī)構(gòu)、招聘單位也比較重視網(wǎng)上渠道;政府的招商引資和個(gè)人的交友、尋人尋物也普遍利用了網(wǎng)絡(luò)的深遠(yuǎn)影響力。因此都市供求信息網(wǎng)無(wú)論從社會(huì)角度,還是從民生角度而言都具有很大的好處。鑒于以上情況,本設(shè)計(jì)一改常規(guī)商業(yè)網(wǎng)站平臺(tái)信息呆滯、互動(dòng)性差、缺乏靈活性、內(nèi)容生硬等一系列弊端,充分發(fā)揮了其商品高流通性、都市強(qiáng)互動(dòng)性、內(nèi)容版塊豐富、信息涵蓋面廣的優(yōu)點(diǎn)。加上站內(nèi)兩種搜索模式,使得它在未來(lái)IT市場(chǎng)上必然會(huì)有一席之地。在寫作過(guò)程中,通過(guò)考察北京市具體情況進(jìn)行論述,體現(xiàn)理論聯(lián)系實(shí)際,理論應(yīng)用于實(shí)踐的科學(xué)性。關(guān)鍵詞:供求信息;互動(dòng)性;信息涵蓋面廣。石家莊職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)論文目錄石家莊職業(yè)技術(shù)學(xué)院設(shè)計(jì)論文目錄1目錄第一章概述 11.1網(wǎng)站功能概述 11.2系統(tǒng)的運(yùn)行環(huán)境 11.3開(kāi)發(fā)工具 1第二章系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì) 22.1數(shù)據(jù)庫(kù)E-R圖 22.1.1供求信息實(shí)體E-R圖 22.1.2信息類別實(shí)體E-R圖 22.1.3管理員實(shí)體E-R圖 3第三章前臺(tái)頁(yè)面設(shè)計(jì) 43.1前臺(tái)頁(yè)面概述 43.1.1信息顯示概述 43.1.2信息顯示技術(shù)分析 63.2前臺(tái)頁(yè)面設(shè)計(jì) 73.2.1列表顯示信息的實(shí)現(xiàn)過(guò)程 73.2.2顯示信息詳細(xì)內(nèi)容的實(shí)現(xiàn)過(guò)程 8第四章后臺(tái)設(shè)計(jì) 114.1后臺(tái)登錄功能概述 114.2后臺(tái)頁(yè)面設(shè)計(jì) 124.3后臺(tái)登錄的實(shí)現(xiàn)過(guò)程 134.3.1信息管理技術(shù)分析 144.3.2信息顯示的實(shí)現(xiàn)過(guò)程 154.3.3信息審核的實(shí)現(xiàn)過(guò)程 174.3.4信息付費(fèi)設(shè)置的實(shí)現(xiàn)過(guò)程 18第五章開(kāi)發(fā)技巧與難點(diǎn) 20第六章結(jié)論 21參考文獻(xiàn) 22致謝 23石家莊職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)論文第一章概述PAGE5天津大學(xué)碩士學(xué)位論文第一章緒論第一章概述1.1網(wǎng)站功能概述本網(wǎng)站要求具有以下功能:本網(wǎng)站操作流程簡(jiǎn)單,頁(yè)面干凈、整潔。本網(wǎng)站導(dǎo)航信息分類多,覆蓋信息范圍廣。支持多人同時(shí)訪問(wèn)本網(wǎng)站,只有管理員身份才能進(jìn)入后臺(tái)進(jìn)行信息審核。支持多條件的快捷查詢和模糊查詢功能。支持用戶發(fā)布所選擇種類的信息。支持管理員刪除相應(yīng)的信息。支持管理員把查找到的信息設(shè)為已付費(fèi)狀態(tài)。1.2系統(tǒng)的運(yùn)行環(huán)境本項(xiàng)目所用的運(yùn)行環(huán)境如表1-1所示表1-1運(yùn)行環(huán)境表類別配置軟件Sqlserver2005、jdk1.6操作系統(tǒng)Windowsxp以上版本內(nèi)存和硬盤大小256M以上、1G以上其它USB2.0 1.3開(kāi)發(fā)工具本項(xiàng)目所用的開(kāi)發(fā)工具如表1-2所示。表1-2開(kāi)發(fā)工具表開(kāi)發(fā)語(yǔ)言JAVA開(kāi)發(fā)環(huán)境Windows7/xp+MyEclipse+sqlserver+tomcat+jdk1.6開(kāi)發(fā)工具M(jìn)yEclipse+tomcat石家莊職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)論文第二章系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)第二章系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)的設(shè)計(jì)在程序開(kāi)發(fā)中起著至關(guān)重要的作用,它往往決定了在后面的開(kāi)發(fā)中如何進(jìn)行程序編碼。一個(gè)合理、有效的數(shù)據(jù)庫(kù)設(shè)計(jì)可降低程序的復(fù)雜性,使程序開(kāi)發(fā)的過(guò)程更為容易。2.1數(shù)據(jù)庫(kù)E-R圖2.1.1供求信息實(shí)體E-R圖供求信息實(shí)體包括信息編號(hào)、所屬類型、信息內(nèi)容、信息標(biāo)題、聯(lián)系人、聯(lián)系電話、發(fā)布時(shí)間、E-mail、付費(fèi)狀態(tài)和審核狀態(tài)10個(gè)屬性。其中審核和付費(fèi)狀態(tài)屬性分別用來(lái)標(biāo)識(shí)信息是否審核與是否付費(fèi),用1表示“是”,用0表示“否”。供求信息實(shí)體的E-R圖如圖2-1所示。圖2-1供求信息實(shí)體E-R圖2.1.2信息類別實(shí)體E-R圖信息類別實(shí)體包括類別編號(hào)、類別名稱、類別標(biāo)識(shí)和類別介紹4個(gè)屬性。信息類別實(shí)體的E-R圖如圖2-2所示。圖2-2信息類別實(shí)體E-R圖2.1.3管理員實(shí)體E-R圖管理員實(shí)體包括編號(hào)、密碼和用戶名3個(gè)屬性。管理員實(shí)體的E-R圖如圖2-3所示。圖2-3管理員實(shí)體E-R圖第三章前臺(tái)頁(yè)面設(shè)計(jì)第三章前臺(tái)頁(yè)面設(shè)計(jì)3.1前臺(tái)頁(yè)面概述頁(yè)面是用戶與程序進(jìn)行交互的接口,用戶可從頁(yè)面中查看程序顯示給用戶的信息,程序可從頁(yè)面中獲取用戶輸入的數(shù)據(jù),所以在進(jìn)行頁(yè)面的設(shè)計(jì)時(shí),不僅要從程序開(kāi)發(fā)的角度分析,還要考慮到頁(yè)面的美觀及布局。本系統(tǒng)的前臺(tái)頁(yè)面就充分考慮到了這些內(nèi)容,因此,本系統(tǒng)中所有的前臺(tái)頁(yè)面都采用一種頁(yè)面框架。該頁(yè)面框架采用二分欄結(jié)構(gòu),分為4個(gè)區(qū)域,即頁(yè)頭、側(cè)欄、頁(yè)尾和內(nèi)容顯示區(qū)。都市供求信息網(wǎng)的前臺(tái)首頁(yè)運(yùn)行效果如圖3-1所示。圖3-1前臺(tái)首頁(yè)運(yùn)行效果3.1.1信息顯示概述信息顯示是本系統(tǒng)要實(shí)現(xiàn)的主要功能之一,根據(jù)需求分析與系統(tǒng)設(shè)計(jì),在前臺(tái)要實(shí)現(xiàn)3種顯示方式——首頁(yè)面的信息列表顯示、某類別中所有信息的列表顯示和某信息詳細(xì)內(nèi)容的顯示。下面分別對(duì)這3種方式進(jìn)行介紹。(1)首頁(yè)信息的列表顯示該顯示實(shí)現(xiàn)的效果是:以超鏈接方式顯示信息的標(biāo)題,單擊這些超鏈接可查看該信息的詳細(xì)內(nèi)容。該顯示方式將付費(fèi)信息與免費(fèi)信息進(jìn)行分類顯示。對(duì)于所有類別的付費(fèi)信息按照信息的發(fā)布時(shí)間降序排列顯示,如圖3-2所示;對(duì)于免費(fèi)信息,進(jìn)行歸類顯示,并且每一類中按照信息的發(fā)布時(shí)間降序排列顯示前5條記錄,如圖3-3所示。圖3-2首頁(yè)中列表顯示付費(fèi)信息圖3-3某類別中所有信息的列表顯示效果(2)某類別中所有信息的列表顯示該顯示實(shí)現(xiàn)的效果是:顯示出該類別中所有信息的詳細(xì)內(nèi)容。該顯示方式同樣將付費(fèi)信息與免費(fèi)信息進(jìn)行分類顯示,并且對(duì)所有已通過(guò)審核的付費(fèi)信息與所有已通過(guò)審核的免費(fèi)信息都按照信息的發(fā)布時(shí)間降序排列顯示。當(dāng)用戶單擊導(dǎo)航欄中的超鏈接后,就會(huì)通過(guò)該方式顯示信息。(3)某信息詳細(xì)內(nèi)容的顯示該顯示方式實(shí)現(xiàn)的效果是:顯示選擇的某信息的詳細(xì)內(nèi)容。當(dāng)用戶單擊信息標(biāo)題超鏈接后,就會(huì)顯示該信息的詳細(xì)內(nèi)容,如圖3-4所示。圖3-4某信息詳細(xì)內(nèi)容的顯示效果3.1.2信息顯示技術(shù)分析首頁(yè)的信息顯示又分為付費(fèi)信息的顯示與免費(fèi)信息的顯示,下面分別介紹。實(shí)現(xiàn)付費(fèi)信息顯示的技術(shù)分析:[14]該技術(shù)要實(shí)現(xiàn)的是以超鏈接形式顯示數(shù)據(jù)庫(kù)中所有已付費(fèi)信息的標(biāo)題。要實(shí)現(xiàn)這樣一個(gè)目的,可先按照用戶訪問(wèn)、程序處理、頁(yè)面顯示這樣的程序流程進(jìn)行反向分析(1)先來(lái)考慮如何在JSP頁(yè)面中輸出信息??稍O(shè)想將要顯示的已付費(fèi)信息都存在一個(gè)List集合對(duì)象中,則在頁(yè)面中可通過(guò)Struts2.0的iterator標(biāo)簽遍歷這個(gè)集合,然后再使用property標(biāo)簽輸出信息,實(shí)現(xiàn)信息的列表顯示。(2)接下來(lái)考慮如何在程序中生成這樣的List集合對(duì)象。因?yàn)樾畔⒍家杂涗浶问奖4嬖跀?shù)據(jù)庫(kù)中,要在頁(yè)面中顯示信息,就必須先查詢數(shù)據(jù)庫(kù)獲取符合已付費(fèi)條件的記錄,然后依次將每條記錄封裝到對(duì)應(yīng)的JavaBean中,最后創(chuàng)建一個(gè)List集合對(duì)象存儲(chǔ)這些JavaBean。這個(gè)過(guò)程實(shí)際上就是將信息從以記錄存儲(chǔ)的形式轉(zhuǎn)換為通過(guò)JavaBean進(jìn)行封裝的過(guò)程,如圖3-5所示。圖3-5轉(zhuǎn)換信息存儲(chǔ)方式所以整個(gè)SQL語(yǔ)句表示:在tb_table表中,以id字段的內(nèi)容大于一個(gè)指定值的記錄為起點(diǎn),查詢出前m條記錄,該指定值為前n-1頁(yè)中id字段內(nèi)容中的最大值。注意:查詢第一頁(yè)中的記錄,應(yīng)使用selecttopm*fromtb_table語(yǔ)句。本系統(tǒng)是按照信息的發(fā)布時(shí)間來(lái)顯示信息的,最新發(fā)布的信息顯示在最頂部,所以對(duì)查詢出的記錄要按照發(fā)布時(shí)間進(jìn)行降序排列。此時(shí)分頁(yè)查詢的SQL語(yǔ)句應(yīng)使用信息的發(fā)布時(shí)間來(lái)作為分頁(yè)的條件,而不能再使用設(shè)為自動(dòng)編號(hào)的字段了。3.2前臺(tái)頁(yè)面設(shè)計(jì)3.2.1列表顯示信息的實(shí)現(xiàn)過(guò)程列表顯示信息用到的數(shù)據(jù)表:tb_info和tb_type。本節(jié)將分別介紹首頁(yè)信息的列表顯示的實(shí)現(xiàn)過(guò)程和列表顯示某類別中所有信息的實(shí)現(xiàn)過(guò)程。首頁(yè)信息的列表顯示實(shí)現(xiàn)過(guò)程首頁(yè)信息的列表顯示,分為付費(fèi)信息和免費(fèi)信息的列表顯示,下面先來(lái)介紹列表顯示付費(fèi)信息的實(shí)現(xiàn)過(guò)程。列表顯示付費(fèi)信息的實(shí)現(xiàn)過(guò)程:創(chuàng)建JavaBean:InfoSingle。根據(jù)前面的技術(shù)分析,需要將從信息表中查詢出的已通過(guò)審核的付費(fèi)信息封裝到JavaBean中,然后保存到List集合對(duì)象中。所以先來(lái)創(chuàng)建這個(gè)JavaBean,該JavaBean中的每個(gè)屬性要對(duì)應(yīng)表中的字段[14]。代碼如下:packagecom.yxq.model;publicclassInfoSingle{privateintid; //信息IDprivateintinfoType; //信息類型privateStringinfoTitle; //信息標(biāo)題privateStringinfoContent; //信息內(nèi)容privateStringinfoLinkman; //聯(lián)系人privateStringinfoPhone; //聯(lián)系電話privateStringinfoEmail; //E-mail地址privateStringinfoDate; //信息發(fā)布時(shí)間privateStringinfoState; //信息審核狀態(tài)privateStringinfoPayfor; //信息付費(fèi)狀態(tài)……//省略了屬性的getXXX()與setXXX()方法publicStringgetSubInfoTitle(intlen){ //截取信息標(biāo)題if(len<=0||len>Title.length())len=Title.length();returnTitle.substring(0,len);}}3.2.2顯示信息詳細(xì)內(nèi)容的實(shí)現(xiàn)過(guò)程顯示信息詳細(xì)內(nèi)容用到的數(shù)據(jù)表:tb_info。當(dāng)用戶在前臺(tái)單擊以超鏈接形式顯示的某信息標(biāo)題時(shí),就觸發(fā)了查看信息詳細(xì)內(nèi)容的請(qǐng)求,該請(qǐng)求的處理是在InfoAction類中的SingleShow()方法中實(shí)現(xiàn)的,請(qǐng)求處理結(jié)束后,返回JSP頁(yè)面進(jìn)行顯示。(1)創(chuàng)建處理請(qǐng)求的SingleShow()方法在SingleShow()方法中,首先從請(qǐng)求中獲取要查看詳細(xì)內(nèi)容的信息的ID值,并定義查詢SQL語(yǔ)句,然后將這兩個(gè)值作為參數(shù)來(lái)調(diào)用業(yè)務(wù)處理對(duì)象myOp的OpSingleShow()方法,在該方法中將查詢到的記錄封裝到InfoSingle類對(duì)象中,然后返回該InfoSingle類對(duì)象,具體代碼可查看3.publicStringSingleShow(){request.setAttribute("mainPage","/pages/show/singleshow.jsp");Stringid=request.getParameter("id"); //獲取請(qǐng)求中傳遞信息的IDStringsql="SELECT*FROMtb_infoWHERE(id=?)"; Object[]params={id};OpDBmyOp=newOpDB(); //創(chuàng)建一個(gè)業(yè)務(wù)處理對(duì)象infoSingle=myOp.OpSingleShow(sql,params); //獲取要查看的信息//若為null,表示要查看的信息不存在if(infoSingle==null){ request.setAttribute("mainPage","/pages/error.jsp");addFieldError("SingleShowNoExist",getText("city.singleshow.no.exist"));}returnSUCCESS;}代碼中將OpSingleShow()方法返回的InfoSingle類對(duì)象賦值給了infoSingle,infoSingle是在InfoAction類的父類InfoSuperAction中定義的屬性。InfoSuperAction類的代碼如下:packagecom.yxq.actionSuper;importcom.yxq.model.InfoSingle;importcom.yxq.model.SearchInfo;publicclassInfoSuperActionextendsMySuperAction{//用來(lái)封裝從數(shù)據(jù)表中查詢出的記錄和發(fā)布信息時(shí)的表單數(shù)據(jù)protectedInfoSingleinfoSingle; protectedSearchInfosearchInfo; //用來(lái)封裝搜索時(shí)的表單數(shù)據(jù)……//省略了屬性的getXXX()與setXXX()方法}配置cityinfo.xml文件對(duì)查看信息詳細(xì)內(nèi)容請(qǐng)求的配置,與列表顯示某類別中所有信息請(qǐng)求的配置是同一個(gè)配置。(2)創(chuàng)建顯示詳細(xì)信息的singleshow.jsp頁(yè)面singleshow.jsp頁(yè)面內(nèi)容將顯示在框架頁(yè)面中的內(nèi)容顯示區(qū)中,在該頁(yè)面中編碼實(shí)現(xiàn)要查看信息的詳細(xì)內(nèi)容。代碼如下:<table><s2:iftest="infoSingle==null"> <tr><tdcolspan="2">★★★查看信息詳細(xì)內(nèi)容出錯(cuò)!★★★</td></tr></s2:if><s2:else><tr><td>信息類別:</td><td><s2:propertyvalue="#session.typeMap[infoSType]"/></td></tr><tr><td>發(fā)布時(shí)間:</td><td><s2:propertyvalue="infoSDate"/></td></tr>……//省略了顯示其他信息的代碼</s2:else></table><s2:iftest="infoSingle==null">中test屬性所指定的表達(dá)式中沒(méi)有使用“#”符號(hào),這是因?yàn)檎?qǐng)求從InfoAction類處理結(jié)束,轉(zhuǎn)發(fā)到singleshow.jsp頁(yè)面后,當(dāng)前堆棧頂部存儲(chǔ)的是InfoAction類對(duì)象的引用。因此,此時(shí)在singleshow.jsp頁(yè)面中使用Struts2.0標(biāo)簽時(shí),都是以InfoAction類對(duì)象為基準(zhǔn),所以<s2:iftest="infoSingle==null">中test屬性指定的表達(dá)式,就相當(dāng)于判斷InfoAction類對(duì)象的getInfoSingle()方法返回的值是否為null。同理,在后面的property標(biāo)簽中,如<s2:propertyvalue="infoSDate"/>輸出的值,就相當(dāng)于先調(diào)用InfoAction類對(duì)象的getInfoSingle()方法返回InfoSingle類對(duì)象,再調(diào)用InfoSingle對(duì)象的getInfoDate()方法,所以<s2:propertyvalue="infoS-Date"/>等價(jià)于<s2:propertyvalue="getInfoSingle().getInfoDate()"/>。第四章后臺(tái)頁(yè)面設(shè)計(jì)第四章后臺(tái)設(shè)計(jì)4.1后臺(tái)登錄功能概述用戶通過(guò)單擊前臺(tái)頁(yè)面頂部的“進(jìn)入后臺(tái)”超鏈接,進(jìn)入后臺(tái)登錄頁(yè)面,如圖4-1所示。為了防止任意用戶進(jìn)入后臺(tái),進(jìn)行非法操作,所以設(shè)置登錄功能。當(dāng)用戶沒(méi)有輸入用戶名和密碼,或輸入了錯(cuò)誤的用戶名和密碼進(jìn)行登錄時(shí),會(huì)返回登錄頁(yè)面顯示相應(yīng)的提示信息。圖4-1用戶登錄頁(yè)面后臺(tái)登錄模塊的操作流程如圖4-2所示。圖4-2后臺(tái)登錄模塊流程在實(shí)現(xiàn)登錄功能時(shí),對(duì)于已經(jīng)登錄的用戶,當(dāng)再次單擊前臺(tái)頁(yè)面頂部的“進(jìn)入后臺(tái)”超鏈接時(shí),應(yīng)直接進(jìn)入后臺(tái)主頁(yè),而不是再次顯示如圖4.1所示的登錄頁(yè)面要求用戶登錄,該功能的具體實(shí)現(xiàn)過(guò)程,將在4-2節(jié)中進(jìn)行介紹。在后臺(tái)登錄模塊中,對(duì)于已登錄的用戶要跳過(guò)登錄頁(yè)面,直接進(jìn)入后臺(tái)主頁(yè)。實(shí)現(xiàn)該功能的主要技術(shù)就是:在當(dāng)前用戶登錄成功后,向session中注冊(cè)一個(gè)屬性,并為該屬性賦值,當(dāng)用戶再次單擊“進(jìn)入后臺(tái)”超鏈接時(shí),在程序中先獲取存儲(chǔ)在session中該屬性的值,然后通過(guò)判斷其值來(lái)得知當(dāng)前用戶是否已經(jīng)登錄,從而決定將請(qǐng)求轉(zhuǎn)發(fā)到登錄頁(yè)面還是后臺(tái)首頁(yè)。4.2后臺(tái)頁(yè)面設(shè)計(jì)(1)后臺(tái)登錄技術(shù)分析在后臺(tái)登錄模塊中,對(duì)于已登錄的用戶要跳過(guò)登錄頁(yè)面,直接進(jìn)入后臺(tái)主頁(yè)。實(shí)現(xiàn)該功能的主要技術(shù)就是:在當(dāng)前用戶登錄成功后,向session中注冊(cè)一個(gè)屬性,并為該屬性賦值,當(dāng)用戶再次單擊“進(jìn)入后臺(tái)”超鏈接時(shí),在程序中先獲取存儲(chǔ)在session中該屬性的值,然后通過(guò)判斷其值來(lái)得知當(dāng)前用戶是否已經(jīng)登錄,從而決定將請(qǐng)求轉(zhuǎn)發(fā)到登錄頁(yè)面還是后臺(tái)首頁(yè)。(2)后臺(tái)登錄的實(shí)現(xiàn)過(guò)程根據(jù)技術(shù)分析,用戶單擊頁(yè)面頂部的“進(jìn)入后臺(tái)”超鏈接請(qǐng)求登錄時(shí),會(huì)先判斷用戶是否已經(jīng)登錄。若沒(méi)有登錄,則進(jìn)入登錄頁(yè)面,在該頁(yè)面中填寫用戶名和密碼后,提交表單,在Action處理類中獲取表單數(shù)據(jù)進(jìn)行驗(yàn)證,驗(yàn)證成功后查詢數(shù)據(jù)表,查詢是否存在用戶輸入的用戶名和密碼;若存在,則登錄成功,進(jìn)入網(wǎng)站后臺(tái)。如果用戶已經(jīng)登錄,則直接進(jìn)入后臺(tái)。下面按照這個(gè)流程,介紹后臺(tái)登錄的實(shí)現(xiàn)過(guò)程[1]。①實(shí)現(xiàn)“進(jìn)入后臺(tái)”超鏈接在view目錄下的top.jsp文件中實(shí)現(xiàn)進(jìn)入后臺(tái)的超鏈接。代碼如下:<ahref="log_isLogin.action">[進(jìn)入后臺(tái)]</a>上述代碼實(shí)現(xiàn)的超鏈接所請(qǐng)求的路徑為log_isLogin.action,觸發(fā)該超鏈接產(chǎn)生的請(qǐng)求將由LogInOutAction類中的isLogin()方法處理,isLogin()方法用來(lái)判斷用戶是否已經(jīng)登錄。②設(shè)計(jì)登錄頁(yè)面Login.jsp在登錄頁(yè)面中,應(yīng)包含一個(gè)表單,并提供“用戶名”和“密碼”兩個(gè)表單字段以便用戶輸入數(shù)據(jù)。Login.jsp頁(yè)面的關(guān)鍵代碼如下:<%@taglibprefix="s2"uri="/struts-tags"%><s2:formaction="log_Login.action"theme="simple"><tr><tdcolspan="2"><s2:fielderror/></td></tr><!--輸出提示信息--><tr><td>用戶名:  </td><td><s2:textfieldname="user.userName"size="30"/></td></tr> <tr><td>密  碼:  </td><td><s2:passwordname="user.userPassword"size="30"/></td></tr></s2:form>4.3后臺(tái)登錄的實(shí)現(xiàn)過(guò)程(1)后臺(tái)頁(yè)面概述本系統(tǒng)中所有的后臺(tái)頁(yè)面都采用了同一個(gè)頁(yè)面框架,該頁(yè)面框架采用二分欄結(jié)構(gòu),分為4個(gè)區(qū)域,即頁(yè)頭、側(cè)欄、頁(yè)尾和內(nèi)容顯示區(qū),該頁(yè)面框架的總體結(jié)構(gòu)與前臺(tái)頁(yè)面框架的結(jié)構(gòu)相同。網(wǎng)站后臺(tái)首頁(yè)的運(yùn)行效果如圖4-3所示。圖4-3后臺(tái)首頁(yè)的運(yùn)行效果 圖4-4AdminTemp.jsp頁(yè)面布局(2)后臺(tái)頁(yè)面的技術(shù)分析本系統(tǒng)中,實(shí)現(xiàn)后臺(tái)頁(yè)面框架的JSP文件為AdminTemp.jsp,該頁(yè)面的布局如上圖4-4所示。本系統(tǒng)中,對(duì)后臺(tái)管理員所有請(qǐng)求的響應(yīng)都通過(guò)該框架頁(yè)面進(jìn)行顯示。在AdminTemp.jsp文件中主要采用include動(dòng)作和include指令來(lái)包含各區(qū)域所對(duì)應(yīng)的JSP文件。4.3.1信息管理技術(shù)分析(1)信息顯示技術(shù)分析對(duì)于后臺(tái)信息顯示中的列表顯示,主要用來(lái)顯示符合指定條件的信息,該條件包括信息類別、付費(fèi)狀態(tài)和審核狀態(tài)。在數(shù)據(jù)表tb_info的設(shè)計(jì)中,設(shè)置了info_payfor和info_state兩個(gè)字段,分別用來(lái)表示“付費(fèi)狀態(tài)”與“審核狀態(tài)”。當(dāng)info_payfor字段內(nèi)容為1時(shí),表示該信息已付費(fèi),為0時(shí)表示未付;同樣,info_state字段內(nèi)容為1時(shí),表示已通過(guò)審核,為0時(shí)表示未通過(guò)審核。所以,若要顯示招聘信息類別下的“未審核”和“已付費(fèi)”的信息,應(yīng)執(zhí)行如下的SQL語(yǔ)句:SELECT*FROMtb_infoWHERE(info_type=1) AND(info_state='0')AND(info_payfor='1')若要顯示培訓(xùn)信息類別下的“未審核”和“未付費(fèi)”的信息,應(yīng)執(zhí)行如下的SQL語(yǔ)句。SELECT*FROMtb_infoWHERE(info_type=1) AND(info_state='0')AND(info_payfor='0')因此,要獲取符合條件的信息,只需要設(shè)置字段info_type、info_state和info_payfor的值即可。本系統(tǒng)提供了兩組單選按鈕組成了“付費(fèi)狀態(tài)”和“審核狀態(tài)”選項(xiàng)。對(duì)于“付費(fèi)狀態(tài)”選項(xiàng)組,選擇“未付費(fèi)”,則傳遞的值為“0”;選擇“已付費(fèi)”,則傳遞的值為“1”;若選擇“全部”,則傳遞all?!皩徍藸顟B(tài)”選項(xiàng)組的設(shè)置與此相同。另外,實(shí)現(xiàn)了一個(gè)下拉列表框,供用戶選擇信息類別。將這些單選按鈕與下拉列表框都在一個(gè)表單中實(shí)現(xiàn),這樣,當(dāng)單擊“顯示”按鈕提交表單后,選擇的狀態(tài)會(huì)通過(guò)表單進(jìn)行傳遞??蓜?chuàng)建一個(gè)JavaBean來(lái)封裝表單數(shù)據(jù),即保存選擇的狀態(tài)。Action處理類接收表單請(qǐng)求后,獲取表單數(shù)據(jù):intinfoType=showType.getInfoType();StringstateType=showType.getStateType();StringpayforType=showType.getPayforType();然后生成SQL語(yǔ)句:SELECT*FROMtb_infoWHERE(info_type=?)AND(info_state=?)AND(info_payfor=?)語(yǔ)句中的“?”最終依次被設(shè)置為變量infoType、stateType和payforType的值。對(duì)于后臺(tái)信息顯示中的詳細(xì)內(nèi)容顯示,只需要獲取要查看信息的ID值,然后通過(guò)如下的SQL語(yǔ)句查詢數(shù)據(jù)表來(lái)實(shí)現(xiàn)。SELECT*FROMtb_infoWHERE(id=?)(2)信息審核技術(shù)分析對(duì)于信息審核,實(shí)現(xiàn)該功能的主要技術(shù)就是執(zhí)行SQL語(yǔ)句更新數(shù)據(jù)表。首先需要獲取信息的ID值,然后生成如下SQL語(yǔ)句。UPDATEtb_infoSETinfo_state=1WHERE(id=?)其中id字段的值將通過(guò)表單中的隱藏域字段進(jìn)行傳遞,在Action處理類中可通過(guò)如下代碼獲取。StringcheckID=request.getParameter("checkID")最后執(zhí)行該SQL語(yǔ)句更新數(shù)據(jù)表,完成信息審核操作。(3)信息刪除技術(shù)分析與信息審核技術(shù)的實(shí)現(xiàn)相同,首先獲取信息的ID值,然后通過(guò)執(zhí)行SQL語(yǔ)句來(lái)實(shí)現(xiàn)。該SQL語(yǔ)句如下:DELETEtb_infoWHERE(id=?)其中id字段的值將通過(guò)表單中的隱藏域字段進(jìn)行傳遞,在Action處理類中可通過(guò)如下代碼獲取。StringdeleteID=request.getParameter("deleteID")最后執(zhí)行該SQL語(yǔ)句更新數(shù)據(jù)表,完成信息刪除操作。4.3.2信息顯示的實(shí)現(xiàn)過(guò)程(1)在側(cè)欄對(duì)應(yīng)的right.jsp頁(yè)面中編寫實(shí)現(xiàn)顯示方式的代碼根據(jù)信息顯示功能的介紹及信息顯示的技術(shù)分析,在right.jsp頁(yè)面中編寫如下代碼:<%@pageimport="java.util.Map,java.util.TreeMap"%><%@taglibprefix="s2"uri="/struts-tags"%><%MapcheckState=newTreeMap(); //用來(lái)存儲(chǔ)“審核狀態(tài)”中的選項(xiàng)checkState.put("1","已審核"); //Map對(duì)象的key值存儲(chǔ)選項(xiàng)的值checkState.put("0","未審核");checkState.put("all","全部");MappayforState=newTreeMap(); //用來(lái)存儲(chǔ)“付費(fèi)狀態(tài)”中的選項(xiàng)payforState.put("1","已付費(fèi)"); //Map對(duì)象的key值存儲(chǔ)選項(xiàng)的值,//value存儲(chǔ)選項(xiàng)的標(biāo)簽payforState.put("0","未付費(fèi)");payforState.put("all","全部");//將Map對(duì)象保存在request范圍內(nèi),以便radio標(biāo)簽遍歷該Map對(duì)象生成一組//單選按鈕request.setAttribute("checkState",checkState);request.setAttribute("payforState",payforState); //同上%><s2:formaction="admin_ListShow.action?"theme="simple"><table><tr><tdcolspan="2"><fieldset><legend>★付費(fèi)狀態(tài)</legend><s2:radiolist="#request.payforState"name="showType.payforType"value="%{showType.payforType}"/></fieldset><fieldset><legend>★審核狀態(tài)</legend><s2:radiolist="#request.checkState"name="showType.stateType"value="%{showType.stateType}"/></fieldset></td></tr><tr><td>信息類別:<s2:selectemptyOption="true"list="#session.typeMap"name="showTType"/><s2:submitvalue="顯示"/></td></tr> </table></s2:form>……//省略了顯示付費(fèi)設(shè)置界面的代碼(2)創(chuàng)建JavaBean:AdminShowType根據(jù)信息顯示的技術(shù)分析,需要?jiǎng)?chuàng)建一個(gè)JavaBean來(lái)保存顯示方式中的選擇狀態(tài),實(shí)際上就是用來(lái)封裝表單數(shù)據(jù)。關(guān)鍵代碼如下:packagecom.yxq.model;publicclassAdminShowType{privateStringstateType; //保存審核狀態(tài)privateStringpayforType; //保存付費(fèi)狀態(tài)privateintinfoType; //保存信息類別……//省略了屬性的setXXX()與getXXX()方法}4.3.3信息審核的實(shí)現(xiàn)過(guò)程根據(jù)信息審核功能介紹,進(jìn)行信息審核操作,需要先進(jìn)入信息審核頁(yè)面,顯示被審核信息的詳細(xì)內(nèi)容,然后管理員通過(guò)單擊“通過(guò)審核”按鈕,完成信息審核操作。下面按照這個(gè)流程來(lái)介紹信息審核的實(shí)現(xiàn)過(guò)程。(1)在信息列表顯示頁(yè)面中實(shí)現(xiàn)進(jìn)入審核頁(yè)面的超鏈接在信息列表顯示頁(yè)面中提供了信息標(biāo)題和“審核”超鏈接,單擊超鏈接后即可進(jìn)入信息審核頁(yè)面。實(shí)現(xiàn)代碼如下:<td><ahref="admin_CheckShow.action?checkID=<s2:propertyvalue='id'/>"><s2:propertyvalue="getSubInfoTitle(17)"/></a></td>……<td><ahref="admin_CheckShow.action?checkID=<s2:propertyvalue='id'/>">√審核</a></td>根據(jù)在cityinfo.xml文件中對(duì)admin_*.action的配置,上述代碼實(shí)現(xiàn)的超鏈接被觸發(fā)后,將由AdminAction類中的CheckShow()方法進(jìn)行處理。(2)在AdminAction類中創(chuàng)建CheckShow()方法該方法用來(lái)顯示被審核信息的詳細(xì)內(nèi)容。在該方法中,首先需要獲取請(qǐng)求中傳遞的信息ID值,然后生成查詢SQL語(yǔ)句,最后調(diào)用業(yè)務(wù)處理對(duì)象的OpSingleShow()方法返回封裝信息的InfoSingle類對(duì)象。實(shí)現(xiàn)代碼如下:/**功能:管理員操作-顯示要審核的信息*/publicStringCheckShow(){request.setAttribute("mainPage","../info/checkshow.jsp");comebackState();//恢復(fù)在“顯示方式”中選擇的狀態(tài)的方法Stringsql="SELECT*FROMtb_infoWHERE(id=?)";StringcheckID=request.getParameter("checkID");//獲取傳遞的信息ID值if(checkID==null||checkID.equals(""))checkID="-1";Object[]params={checkID};OpDBmyOp=newOpDB();infoSingle=myOp.OpSingleShow(sql,params);//返回InfoSingle類對(duì)象if(infoSingle==null){ //信息不存在request.setAttribute("mainPage","/pages/error.jsp");addFieldError("AdminShowNoExist",getText("city.singleshow.no.exist"));}returnSUCCESS;}4.3.4信息付費(fèi)設(shè)置的實(shí)現(xiàn)過(guò)程根據(jù)信息付費(fèi)設(shè)置功能介紹,進(jìn)行信息付費(fèi)設(shè)置操作,需要先查詢出要進(jìn)行付費(fèi)設(shè)置的信息,在頁(yè)面中顯示要進(jìn)行付費(fèi)設(shè)置信息的詳細(xì)內(nèi)容,然后管理員通過(guò)單擊“設(shè)為付費(fèi)”按鈕,完成信息付費(fèi)設(shè)置操作。實(shí)際上,信息付費(fèi)設(shè)置的實(shí)現(xiàn)與信息審核的實(shí)現(xiàn)是相同的,只不過(guò)在查詢被操作的信息時(shí),信息審核操作的實(shí)現(xiàn),是將要查詢信息的ID值在超鏈接中傳遞,而信息付費(fèi)設(shè)置需要管理員向表單中輸入信息ID值,然后提交表單進(jìn)行傳遞。下面介紹信息付費(fèi)設(shè)置的實(shí)現(xiàn)過(guò)程。(1)在側(cè)欄對(duì)應(yīng)的right.jsp頁(yè)面中編寫實(shí)現(xiàn)付費(fèi)設(shè)置頁(yè)面的代碼該編碼要實(shí)現(xiàn)一個(gè)表單,在表單中提供一個(gè)文本輸入框和一個(gè)提交按鈕,文本框用來(lái)接收管理員輸入的信息ID值[16]。實(shí)現(xiàn)代碼如下:<!--設(shè)置已付費(fèi)信息--><formaction="admin_SetMoneyShow.action"><tr><td><table><tr><td>請(qǐng)輸入要設(shè)為已付費(fèi)狀態(tài)的信息ID:</td></tr><tr><td><inputtype="text"name="moneyID"value="${param['moneyID']}"size="24"/><inputtype="submit"value="查詢"/></td></tr></table></td></tr></form>代碼中${param['moneyID']}為JSP的EL表達(dá)式,它表示獲取請(qǐng)求中名為moneyID的參數(shù)的值,也可以寫成${param.moneyID}形式。根據(jù)在cityinfo.xml文件中對(duì)admin_*.action的配置,上述代碼實(shí)現(xiàn)的表單被提交后,將由AdminAction類中的SetMoneyShow()方法進(jìn)行處理。(2)在AdminAction類中創(chuàng)建SetMoneyShow()方法該方法用來(lái)顯示要進(jìn)行付費(fèi)設(shè)置的信息的詳細(xì)內(nèi)容。在該方法中,首先需要獲取通過(guò)表單傳遞的信息ID值,然后生成查詢SQL語(yǔ)句,最后調(diào)用業(yè)務(wù)處理對(duì)象的OpSingleShow()方法返回封裝信息的InfoSingle類對(duì)象。在此之前,需要驗(yàn)證是否輸入了信息的ID值和ID值是否為數(shù)字格式,該驗(yàn)證可在validateSetMoneyShow()方法中實(shí)現(xiàn),具體代碼可查看本書(shū)附帶光盤。SetMoneyShow()方法的關(guān)鍵代碼如下:StringmoneyID=request.getParameter("moneyID"); //獲取信息ID值Stringsql="SELECT*FROMtb_infoWHERE(id=?)"; //生成SQL語(yǔ)句Object[]params={moneyID};OpDBmyOp=newOpDB(); //創(chuàng)建業(yè)務(wù)對(duì)象infoSingle=myOp.OpSingleShow(sql,params); 第五章開(kāi)發(fā)技巧與難點(diǎn)第五章開(kāi)發(fā)技巧與難點(diǎn)(1)實(shí)現(xiàn)頁(yè)面中的超鏈接雖然在應(yīng)用Struts框架開(kāi)發(fā)Web應(yīng)用時(shí),推薦使用Struts中提供的標(biāo)簽,但有些時(shí)候不妨靈活地使用原始的HTML語(yǔ)言中的一些標(biāo)識(shí)。例如,在頁(yè)面中實(shí)現(xiàn)一個(gè)超鏈接,鏈接請(qǐng)求的資源為welcome.jsp頁(yè)面,若使用Struts2.0的a標(biāo)簽實(shí)現(xiàn):<s2:ahref="<s2:urlvalue='/welcome.jsp'/>">轉(zhuǎn)發(fā)</s2:a>則上述代碼將生成如下HTML代碼:<ahref="<s2:urlvalue='/welcome.jsp'/>">轉(zhuǎn)發(fā)</a>所以該超鏈接請(qǐng)求的資源為<s2:urlvalue='/welcome.jsp'/>,很顯然不是預(yù)期的效果??梢詫憺槿缦滦问剑?lt;s2:ahref="welcome.jsp">轉(zhuǎn)發(fā)</s2:a>但是,如果超鏈接請(qǐng)求的資源是動(dòng)態(tài)改變的,或者傳遞的參數(shù)也是動(dòng)態(tài)改變的,這時(shí)可以使用HTML語(yǔ)言中的標(biāo)識(shí)來(lái)實(shí)現(xiàn):<ahref="<s2:urlvalue="/welcome.jsp"/>">轉(zhuǎn)發(fā)</a><ahref="welcome.jsp?name=<s2:urlvalue='yxq'/>">傳參</a>則上述代碼將生成如下HTML代碼:<ahref="welcome.jsp">轉(zhuǎn)發(fā)</a><ahref="welcome.jsp?name=yxq">傳參</a>(2)Struts2.0中的中文亂碼問(wèn)題在Struts2.0中解決中文亂碼的問(wèn)題,可在perties文件中進(jìn)行如下配置。struts.i18n.encoding=gb2312struts.i18n.encoding用來(lái)設(shè)置Web應(yīng)用默認(rèn)的編碼,gb231

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論