電子商務系統(tǒng)畢業(yè)設計_第1頁
已閱讀1頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘 要</b></p><p>  電子商務網(wǎng)站能夠為企業(yè)和用戶提供綜合信息服務,滿足人們在生活、工作和學習方面的需求,同時對企業(yè)實現(xiàn)跨地區(qū)、跨行業(yè)、跨國經(jīng)營發(fā)揮了重要的作用。</p><p>  課題的主要工作是通過應用Struts 2.0+SQL Server 2000開發(fā)一個流行的電子商務網(wǎng)站——都市供求信息網(wǎng),實現(xiàn)

2、為用戶提供信息服務,并盡可能多地提供各類信息,例如求職、招聘、培訓、招商、房屋、車輛、出售、求購等信息。課題主要設計并實現(xiàn)了信息顯示、信息查詢、信息發(fā)布、信息刪除、信息審核以及付費設置等模塊,課題發(fā)布后,可以為用戶生活、工作和學習提供便利,同時提高企業(yè)知名度,為企業(yè)產(chǎn)品宣傳節(jié)約大量成本。</p><p>  論文首先分析了用戶需求,對完整系統(tǒng)功能進行規(guī)劃。其次,采用SQL Server 2000數(shù)據(jù)庫實現(xiàn)信息實體

3、、信息類別實體以及管理員實體的存取。利用Struts2.0框架和Tomcat服務器完成了各個模塊的設計。</p><p>  論文所實現(xiàn)的系統(tǒng)功能滿足了對城市供求信息網(wǎng)對信息顯示、查詢、發(fā)布以及后臺進行信息審核、信息刪除的相關功能的需求,軟件界面美觀,操作方便,具有易維護性和易操作性。</p><p>  關鍵詞:商務網(wǎng)站;供求信息;Struts2.0;Tomcat服務器;信息發(fā)布 <

4、;/p><p><b>  Abstract</b></p><p>  Electronic Commerce website can supply the information service to the customer and enterprise, at the same time, it can provide the life, work, learni

5、ng to people, at the same time, it influence the stride over area to, cross-frontier, enterprise realization.</p><p>  The main problem part works is that 2000 develops a popular Electronic Commerce website-

6、city supply and demand information net by applying Struts 2.0 + SQL Server, come true for the consumer provides information service, information such as, building, vehicle providing information of all kinds, for example

7、job wanted, recruiting, traininging, invite doing business, selling, the demand buying as far as possible many together field, information having designed and realizing Visualization inquire a</p><p>  First

8、 of all, the thesis has analyzed the usefull of made use of the consumer requirement, has carried out a plan on entire system function. Secondly, adopt the SQL Server 2000 data bases realization information entity, infor

9、mation category entity and administrative person entity access. Make use of the Struts2.0 frame and the Tomcat server to have accomplished each modules design.</p><p>  System function realized by thesis has

10、 been satisfied with city supply and demand information net to Visualization, has inquired about, announced as well as the information being in progress examines and verifies, the functional need of relevance, software i

11、nterface that information deletes beautiful, handle on the backstage to defend nature convenient, easy to have gentle operatability.</p><p>  Keywords: Business website; upply information; Struts2.0; Tomcat

12、server; Information Release</p><p><b>  目 錄</b></p><p><b>  摘 要I</b></p><p>  AbstractII</p><p>  第 1 章 引 言1</p><p>  1

13、.1 課題的研究目的和意義1</p><p>  1.2 國內(nèi)外發(fā)展狀況1</p><p>  1.3 研究內(nèi)容及目標2</p><p>  第 2 章 開發(fā)方法及關鍵技術簡介4</p><p>  2.1 開發(fā)工具與運行環(huán)境4</p><p>  2.2 關鍵技術簡介5</p><p&

14、gt;  2.2.1 Struts技術5</p><p>  2.2.2 數(shù)據(jù)庫技術5</p><p>  2.3 主要問題及解決手段5</p><p>  第 3 章 總體設計7</p><p>  3.1 總體設計7</p><p>  3.2 功能設計8</p><p>  3

15、.3 數(shù)據(jù)庫設計9</p><p>  第 4 章 詳細設計11</p><p>  4.1 公共類設計11</p><p>  4.1.1 數(shù)據(jù)庫連接及操作類11</p><p>  4.1.2 業(yè)務處理類12</p><p>  4.1.3 分頁類14</p><p>  4.2

16、 前臺頁面設計15</p><p>  4.2.1 前臺頁面概述15</p><p>  4.2.2 前臺頁面的實現(xiàn)過程16</p><p>  4.3 前臺信息顯示設計16</p><p>  4.3.1 首頁信息的列表顯示16</p><p>  4.3.2 某類別中所有信息的列表顯示18</p&

17、gt;<p>  4.3.3 某信息詳細內(nèi)容的顯示19</p><p>  4.3.4 信息列表顯示中的分頁技術20</p><p>  4.4 信息發(fā)布模塊設計20</p><p>  4.4.1 信息發(fā)布模塊概述20</p><p>  4.4.2 信息發(fā)布模塊的表單驗證21</p><p>

18、;  4.4.3 信息發(fā)布模塊的實現(xiàn)過程22</p><p>  4.5 后臺登陸模塊設計24</p><p>  4.5.1 后臺登陸模塊功能概述24</p><p>  4.5.2 后臺登陸模塊程序?qū)崿F(xiàn)25</p><p>  4.6 后臺頁面設計27</p><p>  4.6.1 后臺頁面概述27&

19、lt;/p><p>  4.6.2 后臺信息管理功能概述28</p><p>  4.6.3 信息顯示模塊30</p><p>  4.6.4 信息審核模塊31</p><p>  4.6.5 信息刪除模塊32</p><p>  4.6.6 信息付費設置模塊32</p><p>  第

20、5 章 結 論34</p><p><b>  參考文獻35</b></p><p><b>  致 謝37</b></p><p><b>  引 言</b></p><p>  課題的研究目的和意義</p><p>  電子商

21、務網(wǎng)站能夠為企業(yè)和用戶提供綜合信息服務,滿足人們在生活、工作和學習方面的需求,同時對企業(yè)實現(xiàn)跨地區(qū)、跨行業(yè)、跨國經(jīng)營發(fā)揮了重要的作用。本課題的實現(xiàn)需要對電子商務網(wǎng)站概念、作用、功能和特點進行了較詳細的了解,并且對B2C及C2C兩種商務網(wǎng)站建設的交易模式進行較全面的研究。</p><p>  目前,面臨全球經(jīng)濟衰退,全球化的經(jīng)濟危機令很多企業(yè)遭遇困境,大量的國內(nèi)外企業(yè)倒閉或裁員,因此如何獲得信息成為人們和企業(yè)都急需

22、解決的一大問題。面臨困境的企業(yè)和失業(yè)的人們都紛紛涌至網(wǎng)上尋求契機,企業(yè)需要人才,人們需要工作,對于開發(fā)一個能夠為企業(yè)和用戶提供綜合信息服務的電子商務網(wǎng)站無疑是一個發(fā)展良機。</p><p>  面對目前的經(jīng)濟形式,為了滿足現(xiàn)代城市企業(yè)和城市居民的生活,工作以及學習的需求,有必要開發(fā)一個都市供求信息網(wǎng)絡平臺,一方面都市供求信息網(wǎng)能夠為企業(yè)節(jié)省大量人力資源,企業(yè)不再需要大量的業(yè)務人員去跑市場,從而間接為企業(yè)節(jié)約了成本

23、;另一方面,都市供求信息網(wǎng)能夠收集大量供求信息,將會有大量用戶訪問網(wǎng)站,有助于提高企業(yè)知名度,同時緩解城市就業(yè)壓力,因此具有十分重要的意義。</p><p><b>  國內(nèi)外發(fā)展狀況</b></p><p><b>  (1) 國內(nèi)方面</b></p><p>  我國在計算機擁有量、互聯(lián)網(wǎng)用戶、網(wǎng)站數(shù)等方面飛速增長,同

24、時推動了信息網(wǎng)站的發(fā)展。信息網(wǎng)站的交易模式也呈現(xiàn)出多樣化?,F(xiàn)在我國的B2B、B2C和C2C都已比較成熟,而且都有幾個比較突出的代表。</p><p>  B2B主要是進行企業(yè)間的產(chǎn)品批發(fā)業(yè)務。代表網(wǎng)站有阿里巴巴。</p><p>  B2C主要是電子商務零售業(yè),顧客直接與商家接觸。代表網(wǎng)站:當當網(wǎng)和卓越網(wǎng)。</p><p>  C2C主要是用戶對用戶的商業(yè)模式,通過

25、為買賣雙方提供一個在線交易平臺,使賣方可以主動提供商品上網(wǎng)拍賣,而買方可以自行選擇商品進行競價。代表網(wǎng)站有易趣網(wǎng)和淘寶網(wǎng)。</p><p><b>  (2) 國外方面</b></p><p>  供求信息網(wǎng)站是以不受國界限制的全球性網(wǎng)絡Internet為運行平臺的,這一快捷的貿(mào)易方式可以安全的為全社會服務。</p><p>  目前,從世界范

26、圍的角度來看,信息化電子商務網(wǎng)絡的成功應用大多是在發(fā)達國家,尤其是美國和歐洲。世界各國都在大力發(fā)展信息基礎設施的建設,更新全國通訊網(wǎng)絡,建立和完善網(wǎng)上商店的供貨共享系統(tǒng),加強信息網(wǎng)站技術的研究,推動信息網(wǎng)站的標準化。美國是信息網(wǎng)站開展較早的國家,在許多領域處于全球領先水平,成為其他國家開展信息網(wǎng)絡的示范,目前占全球電子商務市場的79.1%。目前國際貿(mào)易形勢發(fā)生了很大變化,信息網(wǎng)絡的發(fā)展勢頭強勁,更促進了國際貿(mào)易經(jīng)濟的發(fā)展。</p&

27、gt;<p><b>  研究內(nèi)容及目標</b></p><p>  (1) 主要任務及要求</p><p> ?、賾肧truts 框架開發(fā)一個流行的電子商務網(wǎng)站——都市供求信息網(wǎng)。</p><p> ?、诰W(wǎng)站要求為用戶有償或無償提供盡可能全面的信息,涵蓋生活、工作與學習各方面,如求職、招聘、家教、招商、房屋、車輛、出售、求購等

28、信息。</p><p> ?、垡环矫鏋橛脩舻纳睢⒐ぷ魈峁┓奖?,另一方面提高企業(yè)知名度,為企業(yè)產(chǎn)品宣傳節(jié)約大量成本。</p><p> ?、芨鶕?jù)用戶的需求,網(wǎng)站中發(fā)布的信息要準確、有效、全面,對一些非法、不健康的信息要及時刪除。還應加強網(wǎng)站的安全性,避免在遭受到有意或無意的破壞時,導致系統(tǒng)癱瘓,造成嚴重損失。</p><p><b>  (2) 預期目標&

29、lt;/b></p><p> ?、俳缑嬖O計友好、美觀。</p><p> ?、谠谑醉撝刑峁╊A覽信息的功能,并且信息分類明確。</p><p> ?、塾脩裟軌蚍奖愕夭榭茨愁悇e中的所有信息和信息的詳細內(nèi)容。</p><p> ?、苣軌?qū)崿F(xiàn)站內(nèi)信息搜索,如定位查詢、模糊查詢。</p><p> ?、輰τ脩糨斎氲臄?shù)據(jù),

30、能夠進行嚴格的數(shù)據(jù)檢驗,并給予信息提示。</p><p> ?、蘧哂胁僮鞣奖恪⒐δ軓姶蟮暮笈_信息審核功能。</p><p> ?、呔哂胁僮鞣奖愕暮笈_付費設置功能。</p><p> ?、嗑哂幸拙S護性和易操作性。</p><p>  開發(fā)方法及關鍵技術簡介 </p><p><b>  開發(fā)工具與運行環(huán)境<

31、;/b></p><p><b>  (1)開發(fā)工具</b></p><p>  根據(jù)整個課題的開發(fā)計劃,采用的開發(fā)工具是MyEclipse6.0,并采用Tomcat 6.0作為Web服務器,采用SQL Server 2000數(shù)據(jù)庫,應用Struts 2.0開發(fā)框架。</p><p>  MyEclipse開發(fā)工具是對Eclipse ID

32、E的擴展,利用它我們可以在數(shù)據(jù)庫和J2EE的開發(fā)、發(fā)布,以及應用程序服務器的整合方面極大的提高工作效率。它是功能豐富的J2EE集成開發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測試和發(fā)布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。本課題利用MyEclipse開發(fā)工具進行Java Web開發(fā),MyEclipse中支持Tomcat插件,可以方便的控制Tomcat應用服務器的狀態(tài)[1

33、]。</p><p>  Tomcat 是一個小型的輕量級應用服務器,Tomcat服務器除了能夠運行Servlet和JSP,還提供了作為Web服務器了一些特有的功能,如Tomcat管理和控制平臺、安全域管理和Tomcat閥等。Tomcat和IIS、Apache等Web服務器一樣,具有處理HTML頁面的功能。本課題利用Tomcat服務器響應對HTML頁面的訪問請求,Tomcat作為Servlet容器負責處理客戶請求

34、,把請求傳送給Servlet并把結果返回給客戶。</p><p><b>  (2)運行環(huán)境</b></p><p><b> ?、佘浖h(huán)境</b></p><p>  操作系統(tǒng):Windows XP。</p><p>  Web服務器:Tomcat 6.0。</p><p>

35、;  Web開發(fā)框架:Struts 2.0。</p><p>  Java開發(fā)包:JDK 1.5。</p><p>  數(shù)據(jù)庫:SQL Server 2000。</p><p>  瀏覽器:IE 6.0。</p><p><b>  ②硬件環(huán)境</b></p><p>  對硬件環(huán)境無具體要求。&

36、lt;/p><p><b>  關鍵技術簡介</b></p><p><b>  Struts技術</b></p><p>  本課題采用Struts框架結構設計并實現(xiàn)了一個基于Struts的都市供求信息網(wǎng)站。它提供了一套框架用來方便地構建Web應用[2]。</p><p>  Struts是建立在當前

37、動態(tài)網(wǎng)站設計領域中JSP、Servlet、XML等相關開發(fā)技術基礎之上的一種主流開發(fā)架構,具有組件模塊化、靈活性和重用性的優(yōu)點,同時極大地簡化了Web應用程序的開發(fā)。它合理地將用戶表示邏輯、業(yè)務邏輯和控制邏輯分離,使得開發(fā)過程變得簡潔清晰,并提高了軟件的可維護性和可重用性。 </p><p><b>  數(shù)據(jù)庫技術</b></p><p>  數(shù)據(jù)庫的設計在本課題中

38、起著至關重要的作用,它決定了在后面的開發(fā)中如何進行程序編碼。一個合理、有效的數(shù)據(jù)庫設計可降低程序的復雜性,使程序開發(fā)的過程更為容易。</p><p>  本課題是一個中型的供求信息網(wǎng)站,考慮到開發(fā)成本、用戶信息量及客戶需求等問題,采用Microsoft SQL Server 2000作為項目中的數(shù)據(jù)庫[3]。</p><p>  Microsoft SQL Server是一種客戶/服務器模

39、式的關系型數(shù)據(jù)庫,它具有很強的數(shù)據(jù)完整性、可伸縮性、可管理性、可編程性;具有均衡與完備的功能;具有較高的性價比。SQL Server數(shù)據(jù)庫提供了復制服務、數(shù)據(jù)轉換服務、報表服務,并支持XML語言。使用SQL Server數(shù)據(jù)庫可以大容量地存儲數(shù)據(jù),并對數(shù)據(jù)進行合理的邏輯布局,應用數(shù)據(jù)庫對象可以對數(shù)據(jù)進行復雜的操作。SQL Server 2000也提供了JDBC編程接口,這樣可以非常方便地應用Java來操作數(shù)據(jù)庫[4]。</p>

40、;<p><b>  主要問題及解決手段</b></p><p>  (1)對于已登錄的用戶要跳過登錄頁面,直接進入后臺主頁</p><p>  課題中實現(xiàn)該功能的主要技術就是:在當前用戶登錄成功后,向session中注冊一個屬性,并為該屬性賦值,當用戶再次單擊“進入后臺”超鏈接時,在程序中先獲取存儲在session中該屬性的值,然后通過判斷其值來得知當

41、前用戶是否已經(jīng)登錄,從而決定將請求轉發(fā)到登錄頁面還是后臺首頁。</p><p>  (2) Struts 2.0中的中文亂碼問題</p><p>  在Struts 2.0中解決中文亂碼的問題,可在struts.properties文件中進行如下配置。</p><p>  struts.i18n.encoding=gb2312</p><p>

42、;  struts.i18n.encoding用來設置Web應用默認的編碼,gb2312則指定了默認的編碼。</p><p>  該方法可以解決提交表單后出現(xiàn)的中文亂碼問題。此時,表單的method屬性值必須為post,若使用Struts 2.0中的form標簽實現(xiàn)的表單,可省略method屬性,默認值為post;若是通過原始的HTML語言的form標識實現(xiàn)的表單,則需要設置method屬性,并賦值為post。&

43、lt;/p><p>  如果某個超鏈接傳遞的參數(shù)的值是中文字符,則在Action業(yè)務控制器中獲取該參數(shù)值后,必須進行如下轉碼操作,否則獲取的值為亂碼。</p><p>  String sqlvalue=request.getParameter("sqlvalue");     //獲取超鏈接傳遞的參數(shù)</p>

44、<p>  sqlvalue=new String(sqlvalue.getBytes("ISO-8859-1"),"gb2312");  //進行轉碼操作</p><p><b>  總體設計</b></p><p><b>  總體設計</b></p>&l

45、t;p>  都市供求信息網(wǎng)分為前、后臺兩部分設計。用戶可以通過前臺進行信息瀏覽,信息搜索,信息發(fā)布。管理員可以通過前臺的“登錄”超鏈接進入后臺。</p><p>  (1) 都市供求信息網(wǎng)前臺總體設計</p><p>  前臺主要實現(xiàn)信息的顯示、搜索與發(fā)布功能。其中信息的顯示包括列表顯示與詳細內(nèi)容顯示,搜索功能主要包括定位搜索和模糊搜索。</p><p>  

46、都市供求信息網(wǎng)前臺總體功能結構如圖3-1所示。</p><p>  圖3-1都市供求信息網(wǎng)前臺總體功能結構圖</p><p>  (2) 都市供求信息網(wǎng)后臺總體設計</p><p>  后臺主要實現(xiàn)的功能為信息顯示、信息審核、信息刪除、付費設置與退出登錄,其中的信息顯示功能也分為列表顯示與詳細內(nèi)容顯示。</p><p>  都市供求信息網(wǎng)后臺

47、總體功能結構如圖3-2所示。</p><p>  圖3-2都市供求信息網(wǎng)后臺總體功能結構圖</p><p><b>  功能設計</b></p><p>  都市供求信息網(wǎng)前臺主要實現(xiàn)信息的顯示、搜索與發(fā)布功能。后臺主要實現(xiàn)的功能為信息顯示、信息審核、信息刪除、付費設置與退出登錄。</p><p>  (1) 信息顯示,

48、主要將列表顯示給用戶已付費信息和分類顯示免費信息。通過單擊導航欄中的信息類別超鏈接,將顯示該類別下的所有詳細信息。</p><p>  (2) 信息搜索,用戶可以通過該模塊對網(wǎng)站內(nèi)信息進行定位搜索和模糊搜索。</p><p>  (3) 信息發(fā)布,用戶可通過此頁面發(fā)布信息,在頁面中用戶需要選擇要發(fā)布信息的類別,然后填寫信息內(nèi)容和聯(lián)系方式等;在后臺信息顯示頁面中,管理員可刪除信息,并通過單擊

49、“審核”或信息標題超鏈接進入信息審核頁面審核信息。</p><p>  (4) 進入后臺,管理員可以通過登陸模塊進入后臺管理供求信息。</p><p>  (5) 為了防止任意用戶進入后臺,進行非法操作,所以設置登錄功能。管理員可登陸后臺進行刪除信息,并通過單擊“審核”或信息標題超鏈接進入信息審核頁面審核信息,并對信息進行付費設置以及退出登陸。</p><p>  

50、①后臺登錄功能,用戶通過單擊前臺頁面頂部的“進入后臺”超鏈接,進入后臺登錄頁面。當用戶沒有輸入用戶名和密碼,或輸入了錯誤的用戶名和密碼進行登錄時,會返回登錄頁面顯示相應的提示信息。</p><p> ?、谛畔h除功能,信息刪除用來刪除一些發(fā)布的無效信息,在每條信息在操作欄中都提供了一個“刪除”超鏈接。</p><p> ?、坌畔徍斯δ?,用戶發(fā)布信息后,不能直接顯示在頁面中,需要管理員來審

51、核該信息是否可以發(fā)布。</p><p>  ④付費設置功能,付費管理可以將信息設置為“已付費”狀態(tài)。對于已付費的信息在前臺頁面顯示時,始終顯示在頁面的頂部位置,以便第一時間被瀏覽。</p><p><b>  數(shù)據(jù)庫設計</b></p><p>  本課題是一個中型的供求信息網(wǎng)站,可以采用Microsoft SQL Server 2000作為系

52、統(tǒng)中的數(shù)據(jù)庫。</p><p>  首先,規(guī)劃出本課題所使用的數(shù)據(jù)庫實體,它們分別為供求信息實體、信息類別實體和管理員實體。</p><p>  供求信息實體包括信息編號、所屬類型、信息標題、信息內(nèi)容、聯(lián)系人、聯(lián)系電話、E-mail、發(fā)布時間、審核狀態(tài)和付費狀態(tài)屬性。</p><p>  其中審核狀態(tài)與付費狀態(tài)屬性分別用來標識信息是否審核與付費,1表示“是”,0表示

53、“否”。</p><p>  信息類別實體包括類別編號、類別標識、類別名稱和類別介紹屬性。</p><p>  管理員實體包括編號、用戶名和密碼屬性。</p><p>  創(chuàng)建與實體對應的數(shù)據(jù)表,它們?yōu)閿?shù)據(jù)表tb_info、tb_type和tb_user,分別對應著供求信息實體、信息類別實體和管理員實體。其中數(shù)據(jù)表tb_info與tb_type之間相互關聯(lián)。<

54、/p><p>  供求信息表用來保存發(fā)布的所有類別的信息,該表的結構如表3-1所示。</p><p>  表3-1 tb_info表的結構</p><p>  續(xù)表3-1 tb_info表的結構</p><p>  其中info_type字段表示信息所屬類別,它與info_type表中的type_sign字段相關聯(lián)。info_state字段和

55、info_payfor字段分別用來表示信息的審核狀態(tài)與付費狀態(tài),取值為1表示“已通過審核”或“已付費”狀態(tài),取值為0表示“未通過審核”或“未付費”狀態(tài)。</p><p>  信息類別表用來保存信息所屬的類別,如招聘信息、求職信息等,該表的結構如表3-2所示。</p><p>  表3-2 tb_type表的結構</p><p>  管理員表用來保存管理員信息,該表

56、的結構如表3-3所示。</p><p>  表3-3 tb_user表的結構</p><p><b>  詳細設計</b></p><p><b>  公共類設計</b></p><p>  在本課題中,經(jīng)常需要在不同的方法中進行相同處理,例如數(shù)據(jù)庫連接和字符串處理等,為了避免重復編碼,所以將這些

57、處理封裝到單獨的公共類中。在本課題中,用到的公共類有數(shù)據(jù)庫連接及操作類、分頁類和字符串處理類3個公共類。</p><p><b>  數(shù)據(jù)庫連接及操作類</b></p><p><b>  (1) 功能描述</b></p><p>  DB類主要是對數(shù)據(jù)庫的操作,如連接、關閉數(shù)據(jù)庫及執(zhí)行SQL語句操作數(shù)據(jù)庫。每一種操作對應

58、一個方法,如getCon()方法用來獲取數(shù)據(jù)庫連接,closed()方法用來關閉數(shù)據(jù)庫連接,而對數(shù)據(jù)庫的增、刪、改、查等操作都在doPstm()方法中實現(xiàn)的[5]。</p><p><b>  (2) 程序?qū)崿F(xiàn)</b></p><p>  首先,導入所需的類包并聲明類的屬性然后賦值。主要代碼如下:</p><p>  private Conne

59、ction con;//表示連接到數(shù)據(jù)庫的連接</p><p>  private PreparedStatement pstm;//用來執(zhí)行SQL語句</p><p>  private String user="sa";//登錄數(shù)據(jù)庫的默認用戶名</p><p>  private String password=&quo

60、t;sa";//登錄數(shù)據(jù)庫的密碼</p><p>  private String className="com.microsoft.jdbc.sqlserver.SQLServerDriver";</p><p>  private String url="jdbc:microsoft:sqlserver://localhost:1433;

61、</p><p>  DatabaseName=db_CityInfo"; //數(shù)據(jù)庫URL</p><p>  然后,在覆蓋默認構造方法中使用Class.forName(className)語句實現(xiàn)數(shù)據(jù)庫驅(qū)動的加載。通過new操作符實例化一個DB類的同時,就會加載數(shù)據(jù)庫驅(qū)動。</p><p>  完成數(shù)據(jù)庫驅(qū)動的加載后,創(chuàng)建獲取數(shù)據(jù)庫連接的方法ge

62、tCon(),在方法中使用DriverManager類的getConnection()方法獲取一個Connection類實例,建立連接到URL指定的數(shù)據(jù)庫,并制定數(shù)據(jù)庫的用戶名和密碼,代碼如下。</p><p>  con=DriverManager.getConnection(url,user,password);</p><p>  最后,創(chuàng)建對數(shù)據(jù)庫進行增、刪、改、查等操作的doPs

63、tm()方法,方法中首先調(diào)用getCon()方法獲取數(shù)據(jù)庫連接,然后使用PreparedStatement類對象的execute方法來執(zhí)行SQL語句。若執(zhí)行查詢的SQL語句,則調(diào)用getResultSet()方法返回ResultSet結果集對象。若執(zhí)行更新的SQL語句,則調(diào)用getUpdateCount()方法返回影響的記錄數(shù)。</p><p><b>  業(yè)務處理類</b></p&g

64、t;<p><b>  (1)功能描述</b></p><p>  業(yè)務處理類OpDB類實現(xiàn)了處理本課題中用戶請求的所有業(yè)務的操作,包括信息顯示、信息發(fā)布、管理員登錄、信息審核、信息刪除等。每一個用戶請求的業(yè)務,在OpDB類中都對應著一個方法,具有相同性質(zhì)的業(yè)務可在一個方法中實現(xiàn)。在這些方法中,通過調(diào)用DB類中的doPstm()方法來對數(shù)據(jù)庫進行操作。</p>&

65、lt;p><b>  (2)程序?qū)崿F(xiàn)</b></p><p> ?、貽pGetListBox()方法</p><p>  OpGetListBox()方法用來獲取所有的信息類別,實現(xiàn)前臺頁面中的導航菜單項與后臺的“信息類別”下拉列表框中的選項。方法中首先調(diào)用DB類的doPstm()方法查詢tb_type數(shù)據(jù)表中的所有記錄,然后依次取出每條記錄中的type_sig

66、n與type_intro字段內(nèi)容,并分別作為TreeMap對象的key值與value值進行保存,最后返回該Map對象。</p><p>  OpGetListBox()方法在處理用戶訪問前臺首頁請求的Action類中被調(diào)用,在該Action類中將返回的TreeMap對象保存在session范圍內(nèi),在請求返回JSP頁面后,可通過Struts 2.0標簽獲取該TreeMap對象,實現(xiàn)導航菜單或下拉列表[7]

67、。</p><p>  ②OpListShow()方法</p><p>  OpListShow()方法用來實現(xiàn)具有列表顯示信息功能的業(yè)務,例如搜索信息、查看某類別下的所有信息等。在方法中首先調(diào)用DB類的doPstm()方法查詢數(shù)據(jù)庫,接著調(diào)用getRs()方法獲取查詢后的結果集,然后依次將結果集中的記錄封裝到InfoSingle類對象中,并將該對象保存到List集合中,最后返回該List

68、集合對象。</p><p> ?、跲pSingleShow()方法</p><p>  OpSingleShow()方法實現(xiàn)了查看信息詳細內(nèi)容的業(yè)務,如在前臺查看某信息的詳細內(nèi)容、在后臺進行信息審核與付費設置時用來顯示被操作信息的詳細內(nèi)容。方法中首先查詢數(shù)據(jù)庫,獲取指定條件的記錄,然后將記錄封裝到InfoSingle類對象中,最后返回該對象。</p><p>  ④

69、OpUpdate()方法</p><p>  本系統(tǒng)的信息發(fā)布、信息審核、信息刪除和付費設置業(yè)務具有相同的性質(zhì),都是根據(jù)指定的SQL語句來更新數(shù)據(jù)庫。OpUpdate()方法用來實現(xiàn)該業(yè)務,方法中首先調(diào)用DB類的doPstm()方法更新數(shù)據(jù)庫,接著調(diào)用getCount()方法獲取更新操作所影響的記錄數(shù),最后返回該記錄數(shù)。OpUpdate()方法的關鍵代碼如下:</p><p>  publ

70、ic int OpUpdate (String sql,Object[] params) {</p><p><b>  int i=-1;</b></p><p>  mydb.doPstm(sql, params);//調(diào)用DB類的doPstm()方法更新數(shù)據(jù)庫</p><p>  i=mydb.getCount();//獲取更新

71、操作所影響的記錄數(shù)</p><p><b>  return i;</b></p><p><b>  }</b></p><p> ?、軱ogOn()方法</p><p>  LogOn()方法用來實現(xiàn)管理員登錄操作的身份驗證業(yè)務,該方法通過查詢數(shù)據(jù)庫來判斷請求登錄的用戶是否存在,若存在則返回tr

72、ue,否則返回false。LogOn()方法的關鍵代碼如下:</p><p>  public boolean LogOn(String sql,Object[] params){</p><p>  mydb.doPstm(sql, params);//查詢數(shù)據(jù)庫</p><p>  ResultSet rs=mydb.getRs();//

73、獲取結果集</p><p>  boolean mark=(rs==null||!rs.next()?false:true); //判斷用戶是否存在</p><p>  return mark;</p><p><b>  }</b></p><p> ?、轔pCreatePage()方法</p><

74、;p>  OpCreatePage()方法用來設置分頁信息,這些信息包括總記錄數(shù)、總頁數(shù)、當前頁、分頁狀態(tài)和分頁導航鏈接等。OpCreatePage()方法主要就是將分頁信息封裝到CreatePage類對象中,然后返回該CreatePage對象。在CreatePage類中定義了存儲分頁信息的屬性,并且創(chuàng)建了對應的setXXX()與getXXX()方法來存取這些屬性。</p><p><b>  分

75、頁類</b></p><p><b>  (1)功能描述</b></p><p>  CreatePage類用來封裝分頁信息,這些信息都保存在CreatePage類的相應屬性中。</p><p><b>  (2)程序?qū)崿F(xiàn)</b></p><p>  首先在CreatePage類的構造方

76、法中為這些屬性賦初始值。代碼如下:</p><p>  public CreatePage(){</p><p>  CurrentP=1;//設置當前頁碼為1</p><p>  AllP=1;//設置總頁數(shù)為1</p><p>  AllR=0;//設置總記錄數(shù)為0</p><p

77、>  PerR=3;//設置每頁顯示3條記錄</p><p>  PageLink=""; //分頁導航欄信息</p><p>  PageInfo=""; //分頁狀態(tài)顯示信息</p><p><b>  }</b>

78、</p><p>  總頁數(shù)需要獲得總記錄數(shù)后與每頁顯示的記錄數(shù)計算得到,其算法為:“總頁數(shù)=(總記錄數(shù)%每頁顯示記錄==0)?(總記錄數(shù)/每頁顯示記錄):(總記錄數(shù)/每頁顯示記錄+1)”,所以要先設置總記錄數(shù),然后再來設置總頁數(shù)。CreatePage類中用來設置總頁數(shù)的方法如下:</p><p>  public void setAllP(){</p><p> 

79、 AllP=(AllR%PerR==0)?(AllR/PerR):(AllR/PerR+1);</p><p><b>  }</b></p><p>  在設置當前頁碼時,要判斷由參數(shù)傳遞的當前頁碼是否有效,例如傳遞的值是否為數(shù)字形式、是否小于1、是否大于總頁數(shù)等,對這些情況要進行相應的處理。</p><p>  可以調(diào)用設置分頁狀態(tài)顯示信息

80、的方法來設置分頁狀態(tài)顯示信息。該方法的代碼如下:</p><p>  public void setPageInfo(){</p><p>  if(AllP>1) {</p><p>  PageInfo="<table border='0' cellpadding='3'><tr><t

81、d>";</p><p>  PageInfo+="每頁顯示:"+PerR+"/"+AllR+" 條記錄!";</p><p>  PageInfo+="當前頁:"+CurrentP+"/"+AllP+" 頁!";</p><p>

82、  PageInfo+="</td></tr></table>";</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  前臺頁面設計</b></p><p> 

83、 都市供求信息網(wǎng)分為前后臺的設計,其中前臺主要實現(xiàn)信息顯示、信息搜索與信息發(fā)布功能。</p><p><b>  前臺頁面概述</b></p><p>  本系統(tǒng)中所有的前臺頁面都采用一種頁面框架。該頁面框架采用二分欄結構,分為4個區(qū)域,即頁頭、側欄、頁尾和內(nèi)容顯示區(qū)。都市供求信息網(wǎng)的前臺首頁運行效果如圖4-1所示。</p><p>  圖4-

84、1 都市供求信息網(wǎng)的前臺首頁</p><p>  實現(xiàn)前臺頁面框架的JSP文件為IndexTemp.jsp。本課題中,對前臺用戶所有請求的響應都通過該框架頁面進行顯示。在IndexTemp.jsp文件中主要采用include動作和include指令來包含各區(qū)域所對應的JSP文件。因為頁頭、頁尾和側欄是不變的,所以可以在框架頁面中事先指定;而對于內(nèi)容顯示區(qū)中的內(nèi)容則應根據(jù)用戶的操作來顯示,所以該區(qū)域要顯示的頁面是動

85、態(tài)改變的,可通過一個存儲在request范圍內(nèi)的屬性值指定[9]。例如,對用戶訪問網(wǎng)站首頁的請求,可在處理該請求的類中向request中注冊一個屬性,并設置其值為default.jsp,這樣當響應返回到框架頁面后,可在頁面中獲取該值,根據(jù)該值加載相應頁面;若用戶觸發(fā)了“發(fā)布信息”請求,則設置該屬性值為addInfo.jsp,此時在IndexTemp.jsp中就會顯示信息發(fā)布的頁面。</p><p><b&g

86、t;  前臺頁面的實現(xiàn)過程</b></p><p>  根據(jù)以上的頁面概述及分析,需要分別創(chuàng)建實現(xiàn)各區(qū)域的JSP文件,包括實現(xiàn)頁頭的top.jsp、實現(xiàn)側欄的left.jsp、頁尾文件end.jsp和首頁中需要在內(nèi)容顯示區(qū)顯示的default.jsp等JSP文件。</p><p>  在框架頁面IndexTemp.jsp中通過<base>HTML標識設置當前路徑,這

87、樣,在該頁面中的所有的URI,都是相對于basePath指定的路徑[10]。</p><p>  通過<link>HTML標識包含外部CSS樣式文件的代碼如下:</p><p>  <link type="text/css" rel="stylesheet" href="css/style.css"><

88、;/p><p>  其中type屬性用來指定文件類型,rel指定鏈接的元素是一個樣式表文件,href屬性用來指定文件位置。</p><p><b>  前臺信息顯示設計</b></p><p>  信息顯示是本系統(tǒng)要實現(xiàn)的主要功能之一,根據(jù)需求分析與系統(tǒng)設計,在前臺要實現(xiàn)3種顯示方式——首頁面的信息列表顯示、某類別中所有信息的列表顯示和某信息詳細內(nèi)

89、容的顯示。</p><p><b>  首頁信息的列表顯示</b></p><p>  (1)首頁信息的列表顯示概述</p><p>  該顯示實現(xiàn)的效果是:以超鏈接方式顯示信息的標題,單擊這些超鏈接可查看該信息的詳細內(nèi)容。該顯示方式將付費信息與免費信息進行分類顯示。對于所有類別的付費信息按照信息的發(fā)布時間降序排列顯示,如圖4-2所示。<

90、/p><p>  圖4-2 付費信息的列表顯示</p><p>  對于免費信息,進行歸類顯示,并且每一類中按照信息的發(fā)布時間降序排列顯示前5條記錄,如圖4-3所示。</p><p>  圖4-3免費信息的列表顯示</p><p>  (2)首頁信息的列表顯示技術分析</p><p>  首頁的信息顯示又分為付費信息的顯示

91、與免費信息的顯示。</p><p><b>  ①實現(xiàn)付費信息顯示</b></p><p>  該功能要實現(xiàn)的是以超鏈接形式顯示出數(shù)據(jù)庫中所有已付費信息的標題。要實現(xiàn)這樣一個目的,按照用戶訪問、程序處理、頁面顯示這樣的程序流程進行設計。</p><p>  首先,在JSP頁面中輸出信息。將要顯示的已付費信息都存在一個List集合對象中,則在頁面

92、中可通過Struts 2.0的iterator標簽遍歷這個集合,然后再使用property標簽輸出信息,實現(xiàn)信息的列表顯示。</p><p>  然后,在程序中生成List集合對象。因為信息都以記錄形式保存在數(shù)據(jù)庫中,要在頁面中顯示信息,就必須先查詢數(shù)據(jù)庫獲取符合已付費條件的記錄,然后依次將每條記錄封裝到對應的JavaBean中,最后創(chuàng)建一個List集合對象存儲這些JavaBean[11]。這個過程實際上就是將信

93、息從以記錄存儲的形式轉換為通過JavaBean進行封裝的過程。</p><p><b> ?、趯崿F(xiàn)免費信息顯示</b></p><p>  該功能要實現(xiàn)的是以超鏈接形式顯示出每個類別中最新發(fā)布的前5條免費信息的標題。同樣可采用實現(xiàn)付費信息顯示的技術分析。</p><p>  某類別中所有信息的列表顯示</p><p> 

94、 (1)某類別中所有信息的列表顯示概述</p><p>  該顯示實現(xiàn)的效果是:顯示出該類別中所有信息的詳細內(nèi)容。該顯示方式同樣將付費信息與免費信息進行分類顯示。如圖4-4所示。</p><p>  圖4-4 某類別中所有信息的列表顯示</p><p>  (2) 某類別中所有信息的列表顯示技術分析</p><p>  該功能要實現(xiàn)的是列表顯

95、示該類別下所有已通過審核的信息的詳細內(nèi)容。它與首頁付費信息顯示技術的實現(xiàn)是相同的,只不過在頁面中進行顯示時,顯示的是信息的詳細內(nèi)容,這只需通過property標簽輸出JavaBean中所有屬性值即可實現(xiàn)。</p><p>  某信息詳細內(nèi)容的顯示</p><p>  (1)某信息詳細內(nèi)容的顯示概述</p><p>  該顯示方式實現(xiàn)的效果是:顯示選擇的某信息的詳細內(nèi)

96、容。當用戶單擊信息標題超鏈接后,就會顯示該信息的詳細內(nèi)容,如圖4-5所示。</p><p>  圖4-5信息詳細內(nèi)容的顯示</p><p>  (2)某信息詳細內(nèi)容顯示技術分析</p><p>  該功能要實現(xiàn)的是顯示被選中信息的詳細內(nèi)容。與之前實現(xiàn)列表顯示技術不同的是,這里不需要List集合對象,因為只顯示一條記錄,可直接將查詢到的信息封裝到JavaBean對象中

97、后,在響應的頁面中通過property標簽輸出[12]。此時property標簽的應用與前面列表顯示中property標簽的使用是不同的,主要體現(xiàn)在標簽的value屬性值的設置上。</p><p>  信息列表顯示中的分頁技術</p><p>  本課題是通過數(shù)據(jù)庫分頁查詢的方法實現(xiàn)分頁的。通過查詢語句從數(shù)據(jù)庫中查詢出某頁所要顯示的數(shù)據(jù)。若數(shù)據(jù)表中有10條記錄,以每頁4條記錄來進行顯示,要

98、顯示第2頁信息,則只需查詢從第5條開始到第8條的所有記錄。</p><p>  數(shù)據(jù)表存在一個名稱為id的字段。將其設置為自動編號,這樣數(shù)據(jù)表中的記錄就會以該字段遞增排列。對該表進行分頁查詢,可使用如下查詢語句,查詢出只在當前頁中需要顯示的所有記錄。</p><p>  select top m * from tb_table where id>(select MAX(id) fro

99、m(select top (n-1)*m (id) from tb_table) as maxid)</p><p>  其中,n為當前頁碼;m為每頁顯示的記錄數(shù);id是一個被設為自動遞增的字段名;select top(n-1)*m (id) from tb_table子查詢語句表示從tb_table表中查詢出第n頁前的所有記錄;select MAX(id) from(子查詢語句1)as maxid表示從子查詢語

100、句1中查詢出字段id中的最大值。所以整個SQL語句表示:在tb_table表中,以id字段的內(nèi)容大于一個指定值的記錄為起點,查詢出前m條記錄,該指定值為前n-1頁中id字段內(nèi)容中的最大值。</p><p>  本課題是按照信息的發(fā)布時間來顯示信息的,最新發(fā)布的信息顯示在最頂部,所以對查詢出的記錄要按照發(fā)布時間進行降序排列。此時分頁查詢的SQL語句應使用信息的發(fā)布時間來作為分頁的條件,而不能再使用設為自動編號的字段

101、了。</p><p><b>  信息發(fā)布模塊設計</b></p><p><b>  信息發(fā)布模塊概述</b></p><p>  單擊頁面頂部的“發(fā)布信息”超鏈接,將進入信息發(fā)布頁面。在該頁面中,用戶可從下拉列表中選擇一種信息類別(共包括11個信息類別:公寓信息、招聘信息、求職信息、培訓信息、家教信息、房屋信息、車輛信

102、息、求購信息、出售信息、招商引資、尋找啟示),然后輸入其他信息,如圖4-6所示。</p><p>  信息錄入完整后,單擊“發(fā)布”按鈕,即可發(fā)布信息。此時,程序會先驗證用戶是否輸入了信息,若驗證失敗,則返回信息發(fā)布頁面,進行相應提示;若驗證成功,則會繼續(xù)驗證輸入的“聯(lián)系電話”和E-mail格式是否正確;若該驗證成功,則向數(shù)據(jù)庫中插入記錄,完成發(fā)布操作;信息發(fā)布成功后,返回給用戶信息的ID值。發(fā)布的信息還需要管理員

103、進行審核,只有審核成功的信息才能顯示在前臺頁面中。</p><p>  圖4-6 信息發(fā)布頁面</p><p>  信息發(fā)布模塊的表單驗證</p><p>  本課題采用Action類中的驗證方法來對表單數(shù)據(jù)進行驗證。</p><p>  Action類中的驗證方法的命名規(guī)則為validateXXX(),其中XXX表示Action類中用來處理

104、請求的某個方法名稱。當請求被轉發(fā)給Action類時,該Action會根據(jù)用戶請求來調(diào)用相應的方法處理請求,若在這之前需要進行表單數(shù)據(jù)驗證,則可實現(xiàn)與該方法對應的validateXXX()驗證方法進行驗證。</p><p>  本課題中用來處理前臺操作的Action類中的Add()方法用來處理信息發(fā)布的請求,在Add()方法中需要編寫向數(shù)據(jù)表中插入記錄的代碼,所以在這之前需要驗證用戶輸入的表單數(shù)據(jù)是否為空,可在Ac

105、tion類中實現(xiàn)validateAdd()方法進行驗證,驗證成功后,會自動調(diào)用Add()方法。</p><p>  validateXXX()驗證方法不需要返回值,在方法中可將提示信息通過addFieldError()方法進行保存,這樣,返回驗證失敗的提示頁面后,就可通過fielderror標簽輸出提示信息。</p><p>  Struts 2.0將根據(jù)是否調(diào)用了addFieldErro

106、r()方法判斷驗證是否成功,若validateXXX()方法的程序流程執(zhí)行了addFieldError()方法,則驗證失敗,那么在validateXXX()方法的流程結束后,將返回到配置文件中指定的JSP頁面。</p><p>  信息發(fā)布模塊的實現(xiàn)過程</p><p>  用戶通過單擊頁面頂部的“發(fā)布信息”超鏈接,進入信息發(fā)布頁面,在該頁面中填寫發(fā)布信息后,提交表單,在InfoActio

107、n處理類中獲取表單數(shù)據(jù)進行驗證,驗證成功后向數(shù)據(jù)表中插入數(shù)據(jù),完成信息的發(fā)布。下面按照這個操作流程,介紹信息發(fā)布的實現(xiàn)過程。</p><p>  (1)實現(xiàn)頁面頂部的“發(fā)布信息”超鏈接</p><p>  在view目錄下的top.jsp文件中實現(xiàn)進入信息發(fā)布頁面的“發(fā)布信息”超鏈接。代碼如下:</p><p>  <a href="info_Add

108、.action?addType=linkTo" style="color:gray">[發(fā)布信息]</a></p><p>  該超鏈接請求的路徑為info_Add.action,根據(jù)在Struts配置文件中的配置,由InfoAction類中的Add()方法處理該請求,參數(shù)addType通知Add()方法當前請求的操作,其值為linkTo表示僅僅是連接到信息發(fā)布頁面

109、[13];若為add,則表示向數(shù)據(jù)表中插入記錄。</p><p>  (1)創(chuàng)建發(fā)布信息的addInfo.jsp頁面。</p><p>  信息發(fā)布頁面addInfo.jsp頁面的關鍵代碼如下:</p><p>  <s2:form action="info_Add.action" theme="simple">&

110、lt;/p><p>  <input type="hidden" name="addType" value="add"/></p><p><b>  <tr></b></p><p>  <td>信息類別:</td></p>

111、<p>  <td> <s2:select emptyOption="true" list="#session</p><p>  typeMap" name="infoSingle.infoType"/></td></p><p>  <td>[信息標題最多不得超過 40

112、 個字符] </td></tr></p><p>  <tr> <td colspan="3"><s2:fielderror><s2:param value="%</p><p>  {'typeError'}"/></s2:fielderror>&l

113、t;/td></tr></p><p><b>  <tr></b></p><p>  <td>信息標題:</td></p><p>  <td colspan="2"><s2:textfield name="infoSingle.infoT

114、itle"/></td></tr></p><p>  <tr><td colspan="3"><s2:fielderror><s2:param value="%</p><p>  {'titleError'}"/></s2:fielder

115、ror></td></tr></p><p>  ……//省略了實現(xiàn)其他表單字段的代碼</p><p>  </s2:form></p><p>  select標簽用來實現(xiàn)下拉列表框,emptyOption屬性取值為true,表示第一個下拉列表項為空白,取值為false或省略該屬性,則不生成空白列表項;list屬性則指定用

116、來生成下拉列表項的數(shù)據(jù)源,若該數(shù)據(jù)源是一個Map對象,則默認的會將該Map對象的key值作為列表項的值,將value值作為列表項的標簽顯示給用戶。name屬性指定了與表單的處理類中對應的setXXX()與getXXX()方法。</p><p>  fielderror標簽用來輸出通過Action類的addFieldError()方法保存的信息,param標簽則指定要輸出保存的那條信息。如果要輸出保存的全部信息,可

117、使用<s2:fielderror/>?!?{}”用來計算表達式,被計算的表達式寫在“{}”中,如<s2:property value="%{100+1}"/>,將輸出“101”,所以,代碼中為param標簽的value屬性指定的是字符串值typeError,若寫為<s2:param value="typeError"/>,則此時的typeError相當于一個頁面

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論