問卷調(diào)查系統(tǒng)說明文件_第1頁
問卷調(diào)查系統(tǒng)說明文件_第2頁
問卷調(diào)查系統(tǒng)說明文件_第3頁
問卷調(diào)查系統(tǒng)說明文件_第4頁
問卷調(diào)查系統(tǒng)說明文件_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 HYPERLINK / 摘要在校園、機(jī)關(guān)或企業(yè)里,由于各種調(diào)查研究的需要,經(jīng)常會(huì)有各種各樣的調(diào)查問卷,在傳統(tǒng)模式下,人們不但要花費(fèi)許多的費(fèi)用印刷問卷,而且還要消耗大量時(shí)刻和精力發(fā)放問卷,回收問卷,統(tǒng)計(jì)問卷,同時(shí)問卷可控性差,容易產(chǎn)生漏卷,廢卷等問題。本系統(tǒng)建立在信息技術(shù)基礎(chǔ)上,構(gòu)建一個(gè)在線的問卷設(shè)計(jì)、分發(fā)、調(diào)查、回收、統(tǒng)計(jì)的系統(tǒng),差不多解決傳統(tǒng)問卷的上訴老大難問題。本文首先對J2EE體系架構(gòu)作了簡要介紹;然后討論了設(shè)計(jì)模式在面向?qū)ο筌浖_發(fā)過程中的重要作用,闡述了在J2EE平臺下開發(fā)應(yīng)用程序的一些常用的設(shè)計(jì)模式,以及如何使用這些設(shè)計(jì)模式來對一個(gè)問卷調(diào)查系統(tǒng)項(xiàng)目進(jìn)行設(shè)計(jì);接著討論了應(yīng)用程序框架

2、的概念以及使用應(yīng)用程序框架開發(fā)業(yè)務(wù)應(yīng)用程序所帶來的優(yōu)勢,最后研究和設(shè)計(jì)了一個(gè)建立在J2EE平臺上的通用框架。從而建立了一個(gè)能夠快速開發(fā)業(yè)務(wù)應(yīng)用程序的開發(fā)環(huán)境。關(guān)鍵詞:J2EE體系結(jié)構(gòu),問卷調(diào)查,設(shè)計(jì)模式,通用框架 AbstractOn campus, authorities or enterprises in China, due to a variety of research needs, often have a variety of questionnaires, the traditional model, people not only have to spend a lot of

3、 the cost of printing the questionnaires, but also spend a lot of time and Issued on the questionnaire, the recovery of the questionnaire, statistical survey, questionnaires and control poor, prone to leakage volume, the volume of waste. The system built on the basis of information technology, to bu

4、ild an online questionnaire design, distribution, investigation, recovery, statistical systems, the traditional solution to the basic appeal of the questionnaire chronic problem.The paper introduces J2EE architecture firstly,and then,the importance of design patterns and the advantage of developing

5、object-oriented application using design patterns are discussed.With following,some important design patterns used on J2EE architecture are described,and the way how to use these design patterns to design an enterprise management information system is introduced. Finally,the paper make a research an

6、d a design of a common framework established on J2EE platform. Keywords:J2EE,questionnaire,common framework,survey目 錄 TOC o 1-3 h z u HYPERLINK l _Toc227598016 一、 緒論 PAGEREF _Toc227598016 h 7 HYPERLINK l _Toc227598017 (一)、引言 PAGEREF _Toc227598017 h 7 HYPERLINK l _Toc227598018 (二)、項(xiàng)目介紹 PAGEREF _Toc22

7、7598018 h 7 HYPERLINK l _Toc227598019 二、J2EE簡介 PAGEREF _Toc227598019 h 7 HYPERLINK l _Toc227598020 (一)、J2EE概述 PAGEREF _Toc227598020 h 7 HYPERLINK l _Toc227598021 (二)、J2EE的優(yōu)勢 PAGEREF _Toc227598021 h 8 HYPERLINK l _Toc227598022 三、 系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) PAGEREF _Toc227598022 h 10 HYPERLINK l _Toc227598023 (一)、使用設(shè)計(jì)模

8、式進(jìn)行系統(tǒng)設(shè)計(jì) PAGEREF _Toc227598023 h 10 HYPERLINK l _Toc227598024 (二)、系統(tǒng)總體設(shè)計(jì) PAGEREF _Toc227598024 h 10 HYPERLINK l _Toc227598025 1、 MVC模式 PAGEREF _Toc227598025 h 10 HYPERLINK l _Toc227598026 2、系統(tǒng)總體結(jié)構(gòu) PAGEREF _Toc227598026 h 11 HYPERLINK l _Toc227598027 (三)、持久層設(shè)計(jì)與實(shí)現(xiàn) PAGEREF _Toc227598027 h 12 HYPERLINK l

9、 _Toc227598028 (四)、 業(yè)務(wù)邏輯層的設(shè)計(jì)與實(shí)現(xiàn) PAGEREF _Toc227598028 h 20 HYPERLINK l _Toc227598029 (五)、 前端WEB層設(shè)計(jì)與實(shí)現(xiàn) PAGEREF _Toc227598029 h 21 HYPERLINK l _Toc227598030 四、重難點(diǎn)問題解決方案研究 PAGEREF _Toc227598030 h 25 HYPERLINK l _Toc227598031 (一)、如何實(shí)現(xiàn)用戶答卷時(shí)題目動(dòng)態(tài)截?cái)嗪吞D(zhuǎn) PAGEREF _Toc227598031 h 25 HYPERLINK l _Toc227598032 (二

10、)、如何實(shí)現(xiàn)存取單張答卷 PAGEREF _Toc227598032 h 29 HYPERLINK l _Toc227598033 五、 通用框架設(shè)計(jì) PAGEREF _Toc227598033 h 32 HYPERLINK l _Toc227598034 (一)、 用于獵取數(shù)據(jù)庫連接的有用工具 PAGEREF _Toc227598034 h 32 HYPERLINK l _Toc227598035 (二)、用于快速執(zhí)行SQL的工具SQLCommand PAGEREF _Toc227598035 h 33 HYPERLINK l _Toc227598036 結(jié)束語 PAGEREF _Toc22

11、7598036 h 35 HYPERLINK l _Toc227598037 附錄 PAGEREF _Toc227598037 h 37 HYPERLINK l _Toc227598038 參考文獻(xiàn) PAGEREF _Toc227598038 h 42 HYPERLINK l _Toc227598039 致謝 PAGEREF _Toc227598039 h 43一、 緒論(一)、引言在校園、機(jī)關(guān)或企業(yè)里,由于各種調(diào)查研究的需要,經(jīng)常會(huì)有各種各樣的調(diào)查問卷,在傳統(tǒng)模式下,人們不但要花費(fèi)許多的費(fèi)用印刷問卷,而且還要消耗大量時(shí)刻和精力發(fā)放問卷,回收問卷,統(tǒng)計(jì)問卷,同時(shí)問卷可控性差,容易產(chǎn)生漏卷,廢卷

12、等問題。現(xiàn)代信息技術(shù)的進(jìn)展,極大程度上提高了我們生產(chǎn)的效率,因此也為我們解決問卷調(diào)查的難題提供了良好的解決方案,其中J2EE解決方案確實(shí)是一個(gè)在絕大多數(shù)方面都占據(jù)優(yōu)勢的方案,也是本文討論的主題。(二)、項(xiàng)目介紹本項(xiàng)目旨在建立一個(gè)基于J2EE的WEB應(yīng)用系統(tǒng),提供問卷創(chuàng)建,問卷編輯,問卷公布,問卷統(tǒng)計(jì),題目添加刪除修改,友情連接治理等功能;題目支持單選題、多選題、帶文本輸入的單選題、帶文本輸入的多選題、問答題;用戶能夠給某問卷添加圖片;用戶能夠給問卷設(shè)置密碼,IP限制,包括黑名單和白名單,用戶也能夠設(shè)置同一IP是否能夠重復(fù)提交等防作弊選項(xiàng);系統(tǒng)提供對客觀題調(diào)查結(jié)果的智能統(tǒng)計(jì),并用圖表展示出來;針

13、對每一張問卷的每一個(gè)題目的任易選項(xiàng),用戶也能夠設(shè)置截?cái)啵K止調(diào)查,也能夠設(shè)置跳轉(zhuǎn),即被調(diào)查者點(diǎn)擊了某個(gè)選項(xiàng)后自動(dòng)跳轉(zhuǎn)到與該選項(xiàng)匹配的后續(xù)題目上。二、J2EE簡介(一)、J2EE概述隨著Internet計(jì)算的迅速進(jìn)展,作為一門新興的語言,Java以其完全面向?qū)ο蟮脑O(shè)計(jì)風(fēng)格和良好的平臺無關(guān)性,差不多超越了語言本身的功能,成為了開發(fā)Web應(yīng)用的理想平臺。Java平臺包括了一種用于實(shí)現(xiàn)Java對象的語言和這些Java對象的運(yùn)行環(huán)境Java虛擬機(jī)JVM(Java Virtual Machine)。Java語言的要緊特點(diǎn)是平臺無關(guān)性:在一個(gè)操作系統(tǒng)下開發(fā)的Java對象能夠不做修改的運(yùn)行在另外一個(gè)操作系統(tǒng)的

14、JVM上。JVM封裝了各種底層操作系統(tǒng)在體系結(jié)構(gòu)和語義上的差異,在此基礎(chǔ)上為Java對象提供了一個(gè)統(tǒng)一的運(yùn)行環(huán)境。Java對象的源代碼被編譯為平臺無關(guān)的中性代碼字節(jié)碼。在運(yùn)行時(shí)刻,字節(jié)碼由JVM進(jìn)行解釋,被映射為真正的相關(guān)的操作系統(tǒng)調(diào)用而得以執(zhí)行功能。因此,只要是100%純Java語言實(shí)現(xiàn)的對象能夠被各種具有相應(yīng)JVM的操作系統(tǒng)所支持。Sun公司的J2EE構(gòu)架是在1997年的Java One大會(huì)上宣布的,J2EE定義了開發(fā)和運(yùn)行企業(yè)級Web應(yīng)用的標(biāo)準(zhǔn)。它是一組規(guī)范,旨在為支持Java語言服務(wù)器端部署而提供平臺無關(guān)的、可移植的、多用戶的、安全的和標(biāo)準(zhǔn)的企業(yè)級平臺。伴隨J2EE的出現(xiàn),Java語言

15、的功能和工具得到了極大的擴(kuò)充、豐富和進(jìn)展,能夠用于復(fù)雜的、多層次的以及分布式的電子商務(wù)和企業(yè)級應(yīng)用。J2EE構(gòu)架與技術(shù)為組件開發(fā)模型提供廣泛的支持,同時(shí)也提供一組開發(fā)工具和服務(wù),以便開發(fā)模塊化的、可重用的和平臺獨(dú)立的各種組件技術(shù)的業(yè)務(wù)邏輯。(二)、J2EE的優(yōu)勢J2EE為搭建具有可伸縮性、靈活性、易維護(hù)性的商務(wù)系統(tǒng)提供了良好的機(jī)制,它具有以下突出的優(yōu)點(diǎn):1、事實(shí)的標(biāo)準(zhǔn):J2EE是由SUN引導(dǎo),各廠商共同發(fā)起的,并得到廣泛認(rèn)可的工業(yè)標(biāo)準(zhǔn),業(yè)內(nèi)的大企業(yè)(如IBM,BEA,ORACLE等)都積極參與,專門多應(yīng)用軟件開發(fā)商也把自己的產(chǎn)品轉(zhuǎn)移到J2EE平臺上來,使之成為事實(shí)的工業(yè)標(biāo)準(zhǔn)。因此,J2EE擁有

16、良好的市場和旺盛的生命力。2、可保存現(xiàn)有的IT資產(chǎn):使用J2EE能夠充分利用客戶原有的投資,保留已有的信息資源;同時(shí),由于基于J2EE平臺的產(chǎn)品幾乎在任何操作系統(tǒng)和硬件配置上都能夠運(yùn)行,現(xiàn)有的操作系統(tǒng)和硬件也能夠被保留使用。3、高效的開發(fā):J2EE同意公司把一些通用的、專門繁瑣的服務(wù)端任務(wù)交給中間件供應(yīng)商去完成。如此開發(fā)人員能夠集中精力在如何創(chuàng)建業(yè)務(wù)邏輯上,相應(yīng)地縮短了開發(fā)時(shí)刻。4、支持異構(gòu)環(huán)境:J2EE能夠開發(fā)部署在異構(gòu)環(huán)境中的可移植程序?;贘2EE的程序不依靠于任何特定操作系統(tǒng)、中間件、硬件。因此設(shè)計(jì)合理的基于J2EE的應(yīng)用程序只需開發(fā)一次就可被部署到各種平臺。這在典型的異構(gòu)企業(yè)計(jì)算環(huán)境

17、中是十分重要的。J2EE標(biāo)準(zhǔn)也同意客戶定購與J2EE兼容的第三方的現(xiàn)成的組件,把它們部署到異構(gòu)環(huán)境中,節(jié)約了由自己制定整個(gè)方案所需的費(fèi)用。5、可伸縮性:企業(yè)必須選擇一種服務(wù)器端平臺,這種平臺應(yīng)能提供極佳的可伸縮性去滿足那些在它們的系統(tǒng)上進(jìn)行商業(yè)運(yùn)作的大批新客戶。基于J2EE平臺的應(yīng)用程序可被部署到各種操作系統(tǒng)上。例如可被部署到高端UNIX和大型機(jī)系統(tǒng),這種系統(tǒng)單機(jī)可支持64至256個(gè)處理器。(這是NT服務(wù)器所望塵莫及的)J2EE領(lǐng)域的供應(yīng)商提供了更為廣泛的負(fù)載平衡策略,能消除系統(tǒng)中的瓶頸,同意多臺服務(wù)器集成部署。這種部署可達(dá)數(shù)千個(gè)處理器,實(shí)現(xiàn)可高度伸縮的系統(tǒng),滿足以后商業(yè)應(yīng)用的需要。6、穩(wěn)定的

18、可用性:一個(gè)服務(wù)器端平臺必須能夠全天候運(yùn)轉(zhuǎn)以滿足公司客戶和合作伙伴的需要。因?yàn)镮nternet是全球化的、無處不在的,即使在夜間按打算停機(jī)也可能造成嚴(yán)峻損失。意外停機(jī)有可能造成災(zāi)難性后果。能夠把J2EE部署到可靠的操作環(huán)境中,它們支持長期的可用性。最健壯的操作系統(tǒng)可達(dá)到99.999的可用性或每年只需5分鐘的停機(jī)時(shí)刻,這是實(shí)時(shí)性專門強(qiáng)商業(yè)系統(tǒng)理想的選擇。三、 系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)(一)、使用設(shè)計(jì)模式進(jìn)行系統(tǒng)設(shè)計(jì)軟件模式是軟件開發(fā)期間對重復(fù)問題的可復(fù)用解決方案,是經(jīng)驗(yàn)的總結(jié)。掌握這些設(shè)計(jì)模式后,當(dāng)遇到類似的問題時(shí),就能夠快速利用已有的解決方案分析問題,然后采取適當(dāng)?shù)牟呗?,從而有效縮短軟件開發(fā)周期并提高

19、軟件質(zhì)量。因此,使用設(shè)計(jì)模式是進(jìn)行軟件設(shè)計(jì)開發(fā)的有效途徑。在企業(yè)級應(yīng)用開發(fā)中,通過使用設(shè)計(jì)模式,能夠大大提高應(yīng)用程序的性能和增加軟件的復(fù)用性。因此,在本項(xiàng)目中,我們采納通過實(shí)踐檢驗(yàn)的、成熟的面向?qū)ο蟮脑O(shè)計(jì)模式來對我們的應(yīng)用系統(tǒng)進(jìn)行建模,以期達(dá)到服務(wù)質(zhì)量(QoS)較好(可擴(kuò)展性強(qiáng)、性能優(yōu)良、安全可靠,有一定的靈活性)的目的,并在此基礎(chǔ)上實(shí)現(xiàn)整個(gè)系統(tǒng)。(二)、系統(tǒng)總體設(shè)計(jì)1、 MVC模式模型視圖操縱器(MVC)是Xerox PARC在八十年代為編程語言Smalltalk80發(fā)明的一種軟件設(shè)計(jì)模式,至今已被廣泛使用。最近幾年被推舉為Sun公司J2EE平臺的設(shè)計(jì)模式。MVC結(jié)構(gòu)提供了一種按功能對各種對

20、象進(jìn)行分割的方法,它強(qiáng)制性地使應(yīng)用程序的輸入、處理和輸出分開,因此依據(jù)這種設(shè)計(jì)思想能夠構(gòu)造良好的松耦合的構(gòu)件。使用MVC的應(yīng)用程序被分成三個(gè)核心構(gòu)件:模型、視圖、操縱器。2、系統(tǒng)總體結(jié)構(gòu)本系統(tǒng)采納MVC的設(shè)計(jì)模式,用戶輸入輸出界面均為JSP頁面,即展示層(VIEW),用戶的請求(REQUEST)將會(huì)被發(fā)送到操縱層(CONTROL)的一個(gè)SERVLET集中處理,依照請求調(diào)用模型層(MODEL)的JAVABEAN對請求進(jìn)行實(shí)際處理,并把結(jié)果返回給操縱層,操縱層依照請求的執(zhí)行結(jié)果將響應(yīng)(RESPONSE)派發(fā)到相應(yīng)的JSP頁面。例如,一個(gè)數(shù)據(jù)提交(操作請求)的標(biāo)準(zhǔn)流程:在問卷治理模塊中的添加問卷頁面

21、(SurveyAdd.jsp),用戶在那個(gè)頁面中輸入數(shù)據(jù),提交之后,請求被派發(fā)到一個(gè)名為SurveyManage的servlet中集中處理,在那個(gè)servlet中,調(diào)用了持久層的名為SurveyDAO 的javabean的addSurvey方法對數(shù)據(jù)進(jìn)行持久化,然后把處理結(jié)果返回給SurveyMange那個(gè)操縱器,操縱器依照返回的結(jié)果決定將相應(yīng)的頁面展現(xiàn)給客戶端掃瞄器。又如,一個(gè)數(shù)據(jù)查詢(數(shù)據(jù)請求)的標(biāo)準(zhǔn)流程:在問卷設(shè)計(jì)頁面中(SurveyAdmin.jsp),用戶打開頁面后,頁面即調(diào)用SurveyDAO的listAllSurvey方法查詢出所有問卷信息返回給頁面,即頁面進(jìn)行數(shù)據(jù)查詢時(shí)不再通過

22、CONTROLLER層。如圖3-2-1:圖3-2-1(三)、持久層設(shè)計(jì)與實(shí)現(xiàn)1、 數(shù)據(jù)庫設(shè)計(jì)核心實(shí)體包括:問卷(SURVEY),問題(QUESTION),答卷(ANSWERSHEET);還有保存用戶輸入的文本的文本輸入項(xiàng)實(shí)體(TEXT),治理員表(ADMINS),友情鏈接表(LINK),系統(tǒng)配置表(CONFIG),如圖3-3-1 。值得一提的是,為了保證每個(gè)題目能夠有不限量個(gè)選項(xiàng),在question表中,我把q_body字段用來保存該題目因此的選項(xiàng)信息,每個(gè)選項(xiàng)用&$&那個(gè)專門字符串隔開,同樣的,在q_result中保存的調(diào)查結(jié)果信息用逗號隔開,在q_jdtz中保存的截?cái)嗵D(zhuǎn)信息用&隔開。圖3

23、-3-1問卷表(SURVEY)字段名類型可否空含義s_idNumericNo問卷IDTemplet_idNumericNo模板ID,預(yù)留字段,暫未使用S_nameVarchar(100)No問卷名稱S_descVarchar(500)Yes問卷描述S_authorVarchar(100)Yes發(fā)起人S_imgVarchar(1000)Yes圖片文件名S_ipRepeatBit(1)Yes是否同意同一IP多次提交S_createdateDatetimeYes創(chuàng)建時(shí)刻S_ipLimitTypeVarchar(100)YesIP限制類型,預(yù)留字段未使用S_ipRangeVarchar(2000)Ye

24、sIP限制范圍,格式如下:“白名單:54;黑名單:”S_passwordVarchar(100)Yes訪問密碼S_isOpenBit(1)Yes是否開放,即是否顯示在首頁S_expireDateDatetimeYes過期日期S_isAuditedBit(1)Yes是否審核通過S_hitsNumericYes點(diǎn)擊訪問次數(shù),未使用S_usehitsNumericYes答卷張數(shù)題目表(question)字段名類型可否空含義Q_idnumericNo題目IDS_idNumeric(18)No問卷ID,survey表外鍵Q_typeNumber(18)No題目類型: 1單選題,2多選題,3單選題加輸入框

25、,4多選題加輸入框,5問答題Q_headVarchar(1000)Yes題干Q_bodyVarchar(8000)Yes選項(xiàng).以 &$& 分隔Q_resultVarchar(1000)Yes用戶提交的選擇,格式如下:2,3,5,2表示選擇A選項(xiàng)被選擇了2次,B選項(xiàng)被選擇了3次,C選項(xiàng)被選擇了5次,D選項(xiàng)被選擇了2次,即此某選項(xiàng)被選擇了一次之后,其對應(yīng)的RESULT值加一。Q_imgVarchar(1000)Yes題目的圖片,預(yù)留字段。Q_jdtzVarchar(1000)Yes截?cái)嗵D(zhuǎn):格式如下:null&69&over&90即用戶點(diǎn)擊A選項(xiàng)后,跳轉(zhuǎn)到默認(rèn)的題目,即下一題,點(diǎn)擊B跳轉(zhuǎn)到69號題

26、,點(diǎn)擊C終止問卷,點(diǎn)擊D跳轉(zhuǎn)到90號題Q_orderNumeric(18)yes題目順序號,保留字段答卷表(answersheet)字段名類型可否空含義as_idnumeric(9)no答卷IDs_idnumeric(9)no問卷ID,survey表外鍵as_resultvarchar(8000)yes答卷內(nèi)容 格式如下:18:as=1,4;text=醬油&19:as=1;即每個(gè)題目用戶&分隔;題目內(nèi)部以題號開頭+冒號+用戶選擇的項(xiàng)+分號+用戶輸入文本as_postdatedatetimeyes提交日期as_userIPvarchar(50)yes用戶IP2、 持久層框架設(shè)計(jì)持久性框架是一組軟

27、件服務(wù),將應(yīng)用程序同其使用和操縱的數(shù)據(jù)源分離。它位于機(jī)構(gòu)的數(shù)據(jù)源之上,隱藏訪問這些數(shù)據(jù)源的數(shù)據(jù)查詢存取API(如JDBC、實(shí)體EJB等),它提供的服務(wù)應(yīng)完全抽象,同時(shí)隱藏使用及操縱數(shù)據(jù)源數(shù)據(jù)的細(xì)節(jié)。圖3-3-2顯示了它在J2EE系統(tǒng)體系結(jié)構(gòu)中的地位。圖3-3-2本系統(tǒng)在持久層要緊使用了3種設(shè)計(jì)模式:DAO模式、VO模式、簡單工廠模式。DAO(數(shù)據(jù)訪問對象)模式:數(shù)據(jù)訪問對象(DAO)模式使用數(shù)據(jù)訪問對象來封裝和抽象對所有數(shù)據(jù)源的訪問,它治理著與數(shù)據(jù)源的連接以便于檢索和存儲數(shù)據(jù),為業(yè)務(wù)對象提供了透明的底層數(shù)據(jù)訪問實(shí)現(xiàn)。DAO模式完全包裝數(shù)據(jù)的讀取和操縱,并包裝與數(shù)據(jù)庫交互的數(shù)據(jù)訪問API,它用數(shù)

28、值對象包裝從數(shù)據(jù)庫讀取和發(fā)送到數(shù)據(jù)庫的數(shù)據(jù),與業(yè)務(wù)層進(jìn)行通信。DAO模式提供的靈活性是由于應(yīng)用程序并不直接訪問數(shù)據(jù)源,而是創(chuàng)建DAO對象,用其訪問數(shù)據(jù)源。讀取數(shù)據(jù)時(shí),能夠用數(shù)值對象保存取得的數(shù)據(jù)。例如: SurveyDAO.java beginpublic interface SurveyDAO boolean addSurvey(Survey survey);/添加問卷boolean updateSurvey(Survey survey);/更新問卷boolean delSurvey(Long surveyId);/刪除問卷SurveyDAO.java endVO(值對象)模式:使用值對象能

29、夠減少使用實(shí)體bean時(shí)需要的遠(yuǎn)程調(diào)用的次數(shù)。我們使用值對象來封裝業(yè)務(wù)數(shù)據(jù),用相應(yīng)的方法調(diào)用來設(shè)置和檢索值對象。當(dāng)客戶端向?qū)嶓wbean請求業(yè)務(wù)數(shù)據(jù)時(shí),該實(shí)體bean能夠構(gòu)造值對象,用屬性值來填充,同時(shí)將值對象傳送給客戶端。同樣道理,客戶端向?qū)嶓wbean提交數(shù)據(jù)時(shí),也采納值對象這一方法。Question.java begin public class Question private Long QId;private Long survey;private Long QType;public Long getQId() /取得問題IDreturn this.QId;public void set

30、QId(Long QId) /設(shè)置問題IDthis.QId = QId;public Long getSurvey() /獵取問卷IDreturn this.survey;Question.java end系統(tǒng)中因此的數(shù)據(jù)庫實(shí)體,都被封裝成了如此的VO。例如,頁面上要數(shù)據(jù)庫中添加一個(gè)問卷,那么首先頁面把數(shù)據(jù)發(fā)送到操縱層的SERVLET,在該SERVLET中通過頁面?zhèn)鬟^來的參數(shù)構(gòu)造一個(gè)VO,然后把那個(gè)VO傳遞給DAO對象,DAO對象最后完成對數(shù)據(jù)庫的操縱操作。簡單工廠模式:專門定義一個(gè)類來負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。它又稱為靜態(tài)工廠方法模式,屬于類的創(chuàng)建型模式。簡單工

31、廠模式的實(shí)質(zhì)是由一個(gè)工廠類依照傳入的參數(shù),動(dòng)態(tài)決定應(yīng)該創(chuàng)建哪一個(gè)產(chǎn)品類(這些產(chǎn)品類繼承自一個(gè)父類或接口)的實(shí)例。DAOFactory.java beginpublic class DAOFactory private DAOFactory()public static SurveyDAO getSurveyDAO()return new SurveyDAOimpl();/返回問卷DAO的實(shí)現(xiàn)類public static QuestionDAO getQuestionDAO()return new QuestionDAOimpl();/返回問題DAO的實(shí)現(xiàn)類DAOFactory.java end

32、本工廠類使用了多方法工廠,隔離上層與數(shù)據(jù)庫底層,使上層方法不用關(guān)懷底層采納何種數(shù)據(jù)庫實(shí)現(xiàn),系統(tǒng)假如要遷移到其他數(shù)據(jù)庫上,也只需實(shí)現(xiàn)相應(yīng)的DAO接口,然后在DAOFactroy類中修改返回的實(shí)現(xiàn)類即可。(四)、 業(yè)務(wù)邏輯層的設(shè)計(jì)與實(shí)現(xiàn)本系統(tǒng)涉及的業(yè)務(wù)邏輯相對簡單,因此在設(shè)計(jì)的時(shí)候,我們將其并入MVC操縱層,在操縱層中直接調(diào)用DAO處理對象持久化操作。 SurveyManage.java beginpublic class SurveyManage extends HttpServlet private static final long serialVersionUID = -173745830

33、2140188798L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException PrintWriter out=response.getWriter();if(“AddSurvey”.equals(request.getParameter(“op”)SurveyDAO surveydao=DAOFactory.getSurveyDAO(); /獵取DAO對象Survey survey=new Survey();/構(gòu)造VO對象su

34、rvey.setSName(request.getParameter(“Survey_name”);/給VO對象賦值survey.setSAuthor(request.getParameter(“Survey_author”);oolean ret=surveydao.addSurvey(survey);/調(diào)用DAO對象方法執(zhí)行數(shù)據(jù)庫操作if(ret=true)response.sendRedirect(“./admin/OpResult.jsp?op=SurveyAdd&ret=true”);/依照返回結(jié)果轉(zhuǎn)發(fā)頁面elseresponse.sendRedirect(“./admin/OpRe

35、sult.jsp?op=SurveyAdd&ret=false”); SurveyManage.java end (五)、 前端WEB層設(shè)計(jì)與實(shí)現(xiàn)WEB前端層的設(shè)計(jì)和實(shí)現(xiàn)中,充分利用的JAVASCRIPT的強(qiáng)大操縱功能,同時(shí)在某些頁面上采納了DIV+CSS組合設(shè)計(jì)方法。在系統(tǒng)后臺,頁面采納框架布局,頁面上面顯示BANNER等信息,左邊顯示菜單,中間顯示操作頁面。后臺界面的設(shè)計(jì)要緊依據(jù)功能模塊來劃分,論文重點(diǎn)闡述問卷治理模塊的設(shè)計(jì),這也是后臺的核心部分。一個(gè)正常的業(yè)務(wù)流程是如此的:第一步:點(diǎn)擊“添加問卷”,進(jìn)入問卷添加頁面,按要求錄入相應(yīng)的數(shù)據(jù),提交即可生成一份問卷,然而那個(gè)時(shí)候,問卷僅僅是一份

36、空白問卷,我們還需要進(jìn)行第二步。如圖3-5-1:圖3-5-1系統(tǒng)后臺-添加問卷頁面第二步:點(diǎn)擊“問卷設(shè)計(jì)”,進(jìn)入問卷設(shè)計(jì)頁面,界面會(huì)顯示出當(dāng)前系統(tǒng)中的因此問卷,用戶找到相應(yīng)的問卷后,點(diǎn)擊治理題目,進(jìn)入治理題目的界面,用戶在那個(gè)地點(diǎn)能夠?qū)μ砑觿h除題目,同時(shí)能夠?qū)︻}目進(jìn)行設(shè)置截?cái)嗪吞D(zhuǎn)操作。如圖3-5-2,3-5-3:圖3-5-2 系統(tǒng)后臺-問卷設(shè)計(jì)頁面圖3-5-3系統(tǒng)后臺-題目治理頁面第三步:點(diǎn)擊“問卷審核”,顯示出問卷審核界面,用戶能夠在那個(gè)界面上對某一問卷設(shè)置通過審核或禁用操作,值得強(qiáng)調(diào)的是,“通過審核”操作會(huì)凍結(jié)該問卷,也確實(shí)是講用戶在審核問卷之后就不能再對其進(jìn)行更改了,如此設(shè)計(jì)是為了保證

37、問卷調(diào)查數(shù)據(jù)的準(zhǔn)確性和系統(tǒng)的穩(wěn)定性。然而,也存在用戶有專門需求需要修改問卷的情況,那個(gè)時(shí)候用戶能夠執(zhí)行“禁用”操作,也確實(shí)是反審核操作,這會(huì)使問卷返回到能夠編輯的狀態(tài),然而在執(zhí)行那個(gè)操作的時(shí)候,假如有用戶差不多希望系統(tǒng)提交了答卷,就會(huì)使系統(tǒng)產(chǎn)生臟數(shù)據(jù),系統(tǒng)就無法準(zhǔn)確的統(tǒng)計(jì)調(diào)查結(jié)果信息,因?yàn)楝F(xiàn)在系統(tǒng)的答卷數(shù)據(jù)是依照問卷修改之前的問卷結(jié)構(gòu)生成的,假如問卷結(jié)構(gòu)發(fā)生變化,那么系統(tǒng)將無法依照現(xiàn)有的問卷結(jié)構(gòu)分析之前的“臟數(shù)據(jù)”。因此,我在設(shè)計(jì)那個(gè)功能的時(shí)候,強(qiáng)烈建議用戶在執(zhí)行反審核之后趕忙到問卷統(tǒng)計(jì)模塊中執(zhí)行答卷結(jié)果清零操作,以保證系統(tǒng)數(shù)據(jù)的正確性。如圖3-5-4:圖3-5-4 系統(tǒng)后臺-問卷審核頁面第四

38、步:在通過充分的調(diào)查后,用戶能夠點(diǎn)擊“問卷統(tǒng)計(jì)”,查看統(tǒng)計(jì)結(jié)果,統(tǒng)計(jì)結(jié)果分為兩部分,一部分是所有答卷的匯總統(tǒng)計(jì),另一部分是每個(gè)用戶的答卷。用戶能夠依照自己的需要使用這些數(shù)據(jù)信息。如圖3-5-5:圖3-5-5 答卷統(tǒng)計(jì)前臺界面采納簡潔大方的設(shè)計(jì)風(fēng)格,首頁排列出了最新問卷和熱門問卷。如圖3-5-6:圖3-5-6 系統(tǒng)前臺-首頁圖3-5-7 系統(tǒng)前臺-問卷頁面問卷調(diào)查頁面的設(shè)計(jì)采納AJAX技術(shù)來實(shí)現(xiàn)本系統(tǒng)最大的特色功能動(dòng)態(tài)跳轉(zhuǎn),當(dāng)用戶點(diǎn)擊某一題目某一選項(xiàng)時(shí),系統(tǒng)會(huì)依照設(shè)置跳轉(zhuǎn)到與當(dāng)前選項(xiàng)相關(guān)的題目上,而這一切,用戶感受到只是網(wǎng)頁中局部一小塊刷新了,具有專門好的用戶體驗(yàn)。四、重難點(diǎn)問題解決方案研究(一

39、)、如何實(shí)現(xiàn)用戶答卷時(shí)題目動(dòng)態(tài)截?cái)嗪吞D(zhuǎn)需求描述:當(dāng)用戶選擇一個(gè)選項(xiàng)時(shí),即刻彈出與此選項(xiàng)相關(guān)的后續(xù)題目,例如:有一張關(guān)于九九鴨脖消費(fèi)的調(diào)查問卷:圖4-1-1第一題,當(dāng)用戶選擇明白時(shí)跳到默認(rèn)的下一題,選擇“不明白”,就提示用戶問卷結(jié)束。第二題,當(dāng)用戶選擇前4項(xiàng)時(shí),跳到默認(rèn)的下一題,選擇“從不”,提示問卷結(jié)束。第三題,當(dāng)用戶選擇“廣告宣傳”時(shí),彈出對何種廣告媒體的調(diào)查題目,選擇其他選項(xiàng)則躍過廣告媒體的題目。解決方案:首先,我們將SurveyShow.jsp那個(gè)頁面作為容器頁面,即那個(gè)頁面顯示問卷本身的一些描述信息,如問卷標(biāo)題,問卷描述等,在那個(gè)頁面中間,我們嵌入一個(gè)區(qū)域(DIV)名叫questio

40、n_list,那個(gè)DIV用來裝載從ajax_SurveyShow.jsp實(shí)時(shí)獵取的題目信息。其次,ajax_SurveyShow.jsp 需要SurveyShow.jsp傳遞兩個(gè)參數(shù),一個(gè)是問卷編號(sid),另一個(gè)是跳往題目編號(to),ajax_SurveyShow.jsp首先依照sid查找出所有的題目,然后過濾掉編號小于to的題目,接著推斷to所代表的題目是否屬于單選題(包括單選題,含輸入框的單選題),假如是單選題,則返回這道題目,假如不是單選題,則接著生成它后面的題目,直到發(fā)覺單選題才停止。單選題與其他類型題目的構(gòu)成是不同的,其他類型題目的結(jié)構(gòu)是如此的:題干選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D而單

41、選題在那個(gè)結(jié)構(gòu)的基礎(chǔ)上增加了一個(gè)DIV(qbox):題干選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D那么那個(gè)qbox就用來裝載他的后續(xù)題目,也確實(shí)是講,當(dāng)用戶點(diǎn)擊某選項(xiàng)的時(shí)候,依照參數(shù)to的值推斷后續(xù)題目,然后用后續(xù)題目來填充qbox,值得一提的是,假如他的后續(xù)題目是單選題,那么qbox就只裝后續(xù)題目這一道題目,而這一道題目又包含了一個(gè)qbox,以此類推;假如他的后續(xù)題目不是單選題,則那個(gè)qbox就不斷查詢加載下一題目,直到發(fā)覺單選題,如此那個(gè)qbox就會(huì)裝載專門多題目,而最后一題確信是單選題(除非問卷結(jié)束時(shí)都沒有找到單選題),同時(shí)包含一個(gè)qboxDIV,而對那個(gè)題目進(jìn)行選擇時(shí),又會(huì)觸發(fā)對qbox的填充。如圖4-

42、1-2。圖4-1-2SurveyShow.jsp實(shí)現(xiàn)跳轉(zhuǎn)的JS代碼,使用prototype的AJAX對象:jump beignfunction jump(obj,to)var request_url = ajax_SurveyShow.jsp; / 需要獵取內(nèi)容的url if(to=null)to=0;var request_pars = to=+to+&sid=+;/請求參數(shù) var myAjax = new Ajax.Updater(obj, request_url, / 將request_url返回內(nèi)容綁定到id為result的HTML TAG中 ,那個(gè)地點(diǎn)的obj確實(shí)是qboxmeth

43、od : post, /HTTP請求的方法,get or post parameters : request_pars, /請求參數(shù) ); jump end 實(shí)現(xiàn)截?cái)嗟腏S代碼:EndSurvey bginfunction EndSurvey(qid)$(qbox+qid).innerHTML=;var ret=window.confirm(選擇此項(xiàng)意味著問卷終止,確定提交問卷嗎?);if(ret=true)$(form_survey).submit();EndSurvey end (二)、如何實(shí)現(xiàn)存取單張答卷需求描述:專門多情況下,問卷發(fā)起人需要明白每個(gè)被調(diào)查人的單張答卷信息,以進(jìn)一步了解答

44、卷人的方法。因此需要系統(tǒng)能夠提供一個(gè)記錄和提取答卷人單張答卷的功能,也確實(shí)是講,問卷發(fā)起人能夠查看到任何一個(gè)被調(diào)查人的答卷信息,同時(shí),因?yàn)橄到y(tǒng)有截?cái)嗵D(zhuǎn)功能,需要考慮每張答卷結(jié)構(gòu)專門可能不一樣的情況,如圖4-1-3,4-1-4:圖4-1-3 某用戶答卷圖4-1-4 某用戶答卷解決方案:首先,在用戶提交問卷的時(shí)候,系統(tǒng)把該答卷存入ANSWERSHEET表,該表要緊有4個(gè)字段,as_id,s_id,as_result,as_userIP。As_id確實(shí)是答卷的編號,s_id是問卷的編號,as_userIP是用戶的IP地址,而as_result是按一定結(jié)構(gòu)組織成的用戶的答卷信息。該結(jié)構(gòu)形式如下:18

45、:as=1,4;text=醬油&19:as=1;即每個(gè)題目用&分隔;題目內(nèi)部以題號開頭+冒號+as=用戶選擇的項(xiàng)(多個(gè)項(xiàng)用逗號分隔)+分號+text=用戶輸入文本。其次,當(dāng)用戶打開答卷頁面時(shí),頁面解析從數(shù)據(jù)庫傳過來的as_result字符串,先用&拆成數(shù)組,然后再對每個(gè)字串進(jìn)行解析。把解析出來的qid構(gòu)造成一個(gè)ArrayList,依照個(gè)List,查找question表,迭代出該答卷所有的題目信息。然后,在頁面底部,用JAVASCRIPT給題目賦上用戶選擇或輸入的值。五、 通用框架設(shè)計(jì)(一)、 用于獵取數(shù)據(jù)庫連接的有用工具首先,在TOMCAT的CONTEXT.XML里配置如下代碼:context

46、.xml begincontext.xml end接著在WEB-INF/WEB.XML里配置如下代碼:web.xml begin JNDIname java.lang.String jdbc/survey/JNDI名稱 然后,在ConnectionFactory中寫:public class ConnectionFactory private ConnectionFactory()public static Connection getConnection()try String JNDIname=(String)new javax.naming.InitialContext().lookup

47、(java:comp/env/JNDIname);/查找WEB.XML中的JNDIname的值,通過它來找到數(shù)據(jù)庫JNDI的名稱return ConnectionFactory.getConnection(JNDIname); catch (NamingException e) e.printStackTrace();return null;public static Connection getConnection(String JNDIname) try Context initCtx = new InitialContext(); Context envCtx = (Context) i

48、nitCtx.lookup(java:comp/env); DataSource ds = (DataSource) envCtx.lookup(JNDIname);/通過指定的JNDI名稱獵取數(shù)據(jù)庫連接,如jdbc/surveyreturn ds.getConnection(); catch (NamingException e1) e1.printStackTrace();return null; catch (SQLException e) e.printStackTrace();return null;web.xml end總體思路確實(shí)是通過web.xml獵取JNDI名稱,然后通過JN

49、DI名稱去查找TOMCAT初始上下文中的JNDI配置中數(shù)據(jù)源,獵取那個(gè)數(shù)據(jù)源,創(chuàng)建數(shù)據(jù)庫連接。(二)、用于快速執(zhí)行SQL的工具SQLCommand為了簡化開發(fā)的復(fù)雜度,我把執(zhí)行SQL的語句進(jìn)行了封裝,打包成一個(gè)SQLCommand類(圖5-2-1),使用那個(gè)類操作數(shù)據(jù)庫,不用再關(guān)懷數(shù)據(jù)庫連接的獵取和釋放,只需提供要執(zhí)行的SQL即可。然而,考慮到模塊耦合的問題,我并可不能在頁面中或業(yè)務(wù)邏輯層中使用本工具,本項(xiàng)目要緊在DAO的實(shí)現(xiàn)類中使用本工具。其他項(xiàng)目假如使用此類,可不必受此約束。圖5-2-1executeSQLs(String sqls) 方法:執(zhí)行一組SQL;executeSQL(Strin

50、g sql) 方法:執(zhí)行一條SQL;queryRowSet(String sql) 方法:執(zhí)行一條SQL,返回一個(gè)RowSet類型的結(jié)果集,那個(gè)結(jié)果集是無連接的,保存在內(nèi)存中;queryScalar(String sql) 方法:獵取結(jié)果集中第一行第一列的值,返回類型為String,常用于帶聚合函數(shù)的SQL。代碼片段:SQLCommand beginpublic class SQLCommand public int executeSQL(String sql)Connection conn=this.getConn();Statement stmt=null;try stmt=conn.cr

51、eateStatement();return stmt.executeUpdate(sql); catch (SQLException e) e.printStackTrace();return -1; finallySQLCommand.close(stmt);SQLCommand.close(conn);SQLCommand end結(jié)束語J2EE是開發(fā)分布式企業(yè)級應(yīng)用程序的中間件平臺。J2EE技術(shù)專門好地解決了傳統(tǒng)二層體系架構(gòu)帶來的弊端;而且它也被許多提供企業(yè)應(yīng)用軟件的國際領(lǐng)先廠商所支持,擁有眾多的支撐與應(yīng)用資源,進(jìn)展越來越成熟,因此在能夠預(yù)見的今后具有專門好的應(yīng)用前景。通過使用J2EE開

52、發(fā)平臺,大大簡化了應(yīng)用程序的編程代碼量,部分地免去了編程的復(fù)雜性,提高了軟件的生產(chǎn)效率和可維護(hù)性。因此,通過使用J2EE架構(gòu),我們能夠快速地開發(fā)出高質(zhì)量的企業(yè)級應(yīng)用軟件。在J2EE架構(gòu)上進(jìn)行的軟件開發(fā),盡管是面向組件的,但究其全然依舊屬于面向?qū)ο蟮某绦蛟O(shè)計(jì)方法范疇。因此,軟件除了必須給用戶提供必需的差不多功能外,還需要使軟件具備可重用性、可維護(hù)性、可擴(kuò)展性、可移植性和靈活性。面向?qū)ο笤O(shè)計(jì)模式的產(chǎn)生和應(yīng)用,正是為了實(shí)現(xiàn)這些目標(biāo)。設(shè)計(jì)模式是面向?qū)ο筌浖_發(fā)的指南,它強(qiáng)調(diào)的是一種重用思想,是設(shè)計(jì)上的重用和架構(gòu)上的重用,它將最佳實(shí)踐的解決方案抽象化,提供給人們學(xué)習(xí)和研究。在論文中介紹的企業(yè)治理信息系統(tǒng)

53、項(xiàng)目的設(shè)計(jì)和一個(gè)通用框架的設(shè)計(jì)過程中,都使用了大量的設(shè)計(jì)模式,從而使系統(tǒng)實(shí)現(xiàn)了擴(kuò)展性強(qiáng)、性能優(yōu)良、具有一定靈活性的設(shè)計(jì)目標(biāo)。軟件構(gòu)件化是21世紀(jì)軟件工業(yè)進(jìn)展的大趨勢。工業(yè)化的軟件復(fù)用差不多從通用類庫進(jìn)展到了面向領(lǐng)域的應(yīng)用框架。框架的最大好處確實(shí)是重用,面向?qū)ο笙到y(tǒng)獲得的最大的復(fù)用方式確實(shí)是框架。框架的重用已成為軟件生產(chǎn)中最有效的重用方式之一,一個(gè)大的應(yīng)用系統(tǒng)往往可能由多層互相協(xié)作的框架組成。在某些方面使用不人的成熟的框架,就相當(dāng)于讓不人幫你完成了一些基礎(chǔ)工作,你只需要集中精力完成應(yīng)用系統(tǒng)的業(yè)務(wù)邏輯設(shè)計(jì),從而使軟件生產(chǎn)效率得到了大幅度提高。因此,使用框架開發(fā)應(yīng)用程序,能夠加快開發(fā)速度,逐漸成為了

54、企業(yè)應(yīng)用程序開發(fā)的趨勢。在論文中,我們嘗試設(shè)計(jì)了一個(gè)通用框架的原型系統(tǒng),希望能夠?qū)崿F(xiàn)軟件復(fù)用,達(dá)到快速開發(fā)應(yīng)用程序的目的。附錄(一)、ajax_SurveyShow.jsp源代碼(部分)_%QuestionDAO qdao=DAOFactory.getQuestionDAO();List qlist=qdao.listAllQuestion(Long.valueOf(request.getParameter(sid);String to=request.getParameter(to);qlist:for(Question q:qlist) if(q.getQId()Long.valueOf(

55、to) continue;/this is to avoid generate the same question.out.println( +q.getQHead() + );out.println(); String body=q.getQBody().split(&$&); String sz_jdtz; int Jdtz; switch(q.getQType().intValue() case 1: sz_jdtz =q.getQJdtz().split(&); for(int i=0;ibody.length;i+) if(over.equals(sz_jdtzi) out.prin

56、tln(+bodyi+); else if(null.equals(sz_jdtzi) out.println(+bodyi+); else out.println(+bodyi+); out.println();out.println();break qlist;/ this is a single choice , it may have jump or break,so stop generate list,wait for users choice.case 2: for(int i=0;ibody.length;i+) out.println(+bodyi+); out.printl

57、n();break;/this is a mutible choice, it cannot have jump or break,so just break the switch clause,and continue to get the next question to the list.case 3: sz_jdtz =q.getQJdtz().split(&); for(int i=0;ibody.length;i+) if(over.equals(sz_jdtzi) out.print(+bodyi+); else if(null.equals(sz_jdtzi) out.print(+bodyi+); else out.print(+bodyi+); out.println(); out.println();out.println();break qlist;case 4:for(int i=0;ibody.length;i+) out.println(+bodyi+); out.println();out.println();break;c

溫馨提示

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

評論

0/150

提交評論