【基于JavaEE的開發(fā)者論壇的設計與實現(xiàn)14000字(論文)】_第1頁
【基于JavaEE的開發(fā)者論壇的設計與實現(xiàn)14000字(論文)】_第2頁
【基于JavaEE的開發(fā)者論壇的設計與實現(xiàn)14000字(論文)】_第3頁
【基于JavaEE的開發(fā)者論壇的設計與實現(xiàn)14000字(論文)】_第4頁
【基于JavaEE的開發(fā)者論壇的設計與實現(xiàn)14000字(論文)】_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基于JavaEE的開發(fā)者論壇的設計與實現(xiàn)中文摘要在互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展的今天,技術(shù)的更新?lián)Q代也是非常的快,需要不斷學習和進步才能適應知識的更新。互聯(lián)網(wǎng)作為人們獲取、發(fā)布和傳播信息的重要途徑,在人們的交流和學習中發(fā)揮著重要作用。所以開發(fā)一個論壇可以讓用戶互相學習的同時方便查找專業(yè)知識,這是很有必要的。它不局限于時間和空間,用戶可以在論壇上發(fā)布他們的觀點,還可以發(fā)布問題與眾多用戶一同討論,并能快速解決。大家學習的效率將能大大提升,這也順應了信息化發(fā)展的越來越快。在敏捷開發(fā)的思想下,用戶的基本需求可以從個人的角度快速確定,軟件開發(fā)是以迭代、循序漸進的方式進行的。前端開發(fā)基于bookstrap框架,后端基于SpringBoot+MyBatis框架。采用MySql數(shù)據(jù)庫。論壇主要的前臺功能是文章、話題、用戶、評論、配置和廣告等模塊。這些模塊是相互關(guān)聯(lián)的。配合相應的管理系統(tǒng),完善對前端信息的監(jiān)控。大量的代碼封裝和組件開發(fā)不僅提高了代碼的可讀性,也為將來的擴展奠定了基礎。本文系統(tǒng)地描述了基于軟件開發(fā)生命周期的整個項目的開發(fā)過程。關(guān)鍵詞:論壇;SpringBoot;MySQL目錄TOC\o"1-3"\h\u31307前言 前言目前,在互聯(lián)網(wǎng)信息技術(shù)的強力推動下,不論我們來自何方只要在Internet可以接入的范圍內(nèi),動動手指全球的知識和信息唾手可得。這是一個大數(shù)據(jù)的時代,無論是在生活、工作還是學習各個方面,統(tǒng)統(tǒng)離不開數(shù)據(jù)信息。在這樣的背景下催生出熟人社交和陌生人社交以及特定群體社交三種形式,在這樣的需求下,互聯(lián)網(wǎng)上出現(xiàn)了各種類型的社交平臺。另一方面各種高級語言發(fā)展越來越成熟,比如JAVA語言,互聯(lián)網(wǎng)技術(shù)迅猛的發(fā)展。J2EE企業(yè)級技術(shù)給Web應用程序的開發(fā)提供了更多靈活的選擇,以及github等開源社區(qū)的不斷壯大,優(yōu)秀的框架體系給開發(fā)人員提供了一種基于組件的設計和開發(fā)Web應用的模塊化方法。再加上Spring的出現(xiàn)更是極大程度降低了企業(yè)應用開發(fā)的復雜性,2014年以“約定大于配置”為宗旨的SpringBoot的提出更是讓Spring家族再次煥發(fā)新春。后端技術(shù)發(fā)展迅猛,各種前端框架的發(fā)展更是日新月異,如Angular、React、Vue等。前端框架最重要的就是頁面的響應速度以及美化程度,這兩點直接決定了能否留住用戶。隨著互聯(lián)網(wǎng)的迅速發(fā)展,使得虛擬社交逐漸超過現(xiàn)實社交成為主流,從六度空間理論(通過六個陌生人之間的關(guān)系可以認識世界上任何一個人)分析其結(jié)果就是:現(xiàn)實社交的弱化導致六度空間外拓(認識世界上的任何一個人需要更多的中間人),人與人之間的溝通層級增加,一種新的基于陌生人的避免信息泛濫的社交體系有待建立,以此來滿足人們突破溝通層級,進行更多社交活動的欲望。緒論項目研究背景在互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展的今天,出現(xiàn)眾多IT愛好者以及有志于從事IT行業(yè)的人員。然而,技術(shù)就是硬道理,技術(shù)的更新?lián)Q代也是非常的快,需要不斷學習和進步才能適應知識的更新?;ヂ?lián)網(wǎng)作為人們獲取、發(fā)布和傳播信息的重要途徑,在人們的交流和學習中發(fā)揮著重要作用。一些技術(shù)論壇紛紛出現(xiàn),此種學習方式不受地點和時間限制,可以為開發(fā)者提供便捷的幫助。但是由于許多用戶專研學習的專業(yè)方向不同,會出現(xiàn)問題不能及時發(fā)現(xiàn)和解決的情況。所以開發(fā)一個論壇可以讓用戶互相學習的同時方便查找專業(yè)知識,這是很有必要的。開發(fā)者論壇系統(tǒng)是以在線網(wǎng)站的形式,為用戶提供簡便并且快捷的交流空間,在論壇中用戶通過發(fā)貼、回復的方式進行不僅限于技術(shù)學習方面的各種交流,結(jié)合管理員的協(xié)調(diào)與管理,能夠成為一個穩(wěn)定的、以開發(fā)技術(shù)為主題的技術(shù)交流平臺。項目研究意義互聯(lián)網(wǎng)已經(jīng)滲透進了我們生活的方方面面,信息化的飛速發(fā)展給我們的生活帶來無數(shù)便利,極大的提高了人們生活水平和質(zhì)量?;ヂ?lián)網(wǎng)不僅是一個信息來源,而且是一個虛擬空間,我們可以在里面相互交流。論壇正是其中之一。它不局限于時間和空間,用戶可以在論壇上發(fā)布他們的觀點,還可以發(fā)布問題與眾多用戶一同討論,并能快速解決。大家學習的效率將能大大提升,這也順應了信息化發(fā)展的越來越快。當前研究現(xiàn)狀隨著信息化的普及,國內(nèi)的論壇數(shù)量數(shù)量驚人,各個領(lǐng)域都有相應的論壇,內(nèi)容越來越廣泛。各大門戶網(wǎng)站都擁有自己的論壇,專業(yè)類的論壇也逐漸在其領(lǐng)域發(fā)展擴大。比如互聯(lián)網(wǎng)技術(shù)類的有:csdn是全國最大的開發(fā)者技術(shù)社區(qū),chinaunix是我國最大的Linux/unix技術(shù)論壇,還有ITPUB技術(shù)論壇也是與csdn并肩的;國外也要StackOverflow、SitePoint等。論文研究方法本項目擬實現(xiàn)基于JavaEE的開發(fā)者論壇,開發(fā)者論壇是一個網(wǎng)上IT技術(shù)交流的系統(tǒng),它是以Java和MySQL數(shù)據(jù)庫作為開發(fā)平臺。根據(jù)各個用戶角色需求的分析,去設計并實現(xiàn)的,系統(tǒng)分為后臺與前臺兩大模塊。前臺功能主要是頁面顯示,帖子的瀏覽、發(fā)布帖子和回復、點贊、關(guān)注等;后臺功能則是根據(jù)論壇后臺管理員對論壇管理的需求去實現(xiàn);論壇系統(tǒng)必定存在一個核心業(yè)務流程——帖子,本人通過對不同角色對帖子的需求分析,實現(xiàn)了前后臺對帖子的功能需求,實現(xiàn)了前后臺數(shù)據(jù)的交互,且數(shù)據(jù)都是實時更新的。整個系統(tǒng)開發(fā)過程中,第一階段:可行性分析,確定以現(xiàn)有條件可以完成本項目;第二階段:通過調(diào)研,完成本項目的需求分析,編寫需求文檔;第三階段:根據(jù)需求提取數(shù)據(jù)字典,設計數(shù)據(jù)庫表,設計數(shù)據(jù)流圖完成項目架構(gòu)設計;第四階段:編碼實現(xiàn)預期的項目功能;第五階段:對完成的項目功能和性能進行測試。開發(fā)技術(shù)和工具開發(fā)工具IntellijIDEAIntelliJIDEA(IntegratedDevelopmentEnvironment,IDE)是JetBrains公司旗下的一款Java集成開發(fā)環(huán)境工具軟件,正如其官方網(wǎng)站介紹的那樣該工具的開發(fā)者們致力于打造一款世界上最強大,最有效的開發(fā)人員工具,該工具可以極大的加快生產(chǎn)速度,是開發(fā)人員可以更快速的創(chuàng)建和編碼,該工具提供了大量的快捷鍵,讓開發(fā)人員很大程度可以擺脫鼠標的依賴,極大的提高生產(chǎn)力。還有其智能的編碼輔助,該工具在建立源碼索引后會在各種情況下提供建議,他提供了開箱即用的體驗,2016.1版本后自帶JDK1.8。它相對于eclipse來說更加智能,而且IntelliJIDEA自動保存代碼,在運行時先編譯再運行,Eclipse需要手動保存同時編譯,在運行時直接運行。最顯著的功能是調(diào)試(Debug),可以調(diào)試java代碼、JavaScript、jQuery、Ajax和其他技術(shù)。您可以通過代碼補全指出支持的方法。最后,在多線程調(diào)試的情況下,登錄控制臺功能有助于檢查多線程執(zhí)行的狀態(tài)。NavicatNavicat是一款可視化的數(shù)據(jù)庫管理工具,價格便宜、功能豐富。其所擁有的功能可以滿足專業(yè)開發(fā)者的需求,并且對數(shù)據(jù)庫初學者來說也非常容易學習和上手。主要開發(fā)技術(shù)SpringBoot該框架是由Pivotal團隊與2013年研發(fā),主要用來簡化Spring開發(fā)框架的開發(fā)、配置、調(diào)試、部署工作,同時在項目內(nèi)集成了大量易于使用且實用的基礎框架[4],它的出現(xiàn),極大程度的減輕了Spring一直被詬病的配置過多問題,SpringBoot提供開箱即用和約定大于配置的策略,大量的注解代替了Spring框架的XML配置,如果想要自定義配置,鼓勵以代碼形式編寫配置類,完全替代了XML文件。SpringSecuritySpringsecurity是一個安全框架,它為基于Spring的企業(yè)應用系統(tǒng)提供聲明性安全訪問控制解決方案。從SpringSecurity5開始,要求您必須手動設置密碼加密方法。Spring官方明確指出SHA和MD5都不安全,并推薦使用BCrypt加密。BCrypt加密:是加salt的加密方案。當您對相同的密碼時,加密MD5會生成相同的哈希值。有些MD5加密方法可以被暴力破解。而BCrypt加密與之完全不同,每次使用完全一樣的密碼生成出來的hash值都不一樣。每次加密時,生成第一個隨機鹽數(shù),然后通過密碼對隨機數(shù)進行hash,檢索hash值并將其存儲在數(shù)據(jù)庫中,使用的函數(shù)是BCrypt.hashpw(password,BCrypt.gensalt())。當用戶登錄時輸入的是明文密碼,此時,當springSecurity.xml文件身份驗證管理器配置BCrypt加密方案時,將從數(shù)據(jù)庫中刪除hash值并將其分開。前22位加鹽,然后,它通過組合由前端輸入的隨機數(shù)和密碼來找到hash值,并確定它們是否相同。使用的函數(shù)是:matchBCrypt.checkpw(candidate,hashed)。MyBatisMyBatis的最強大功能之一是其動態(tài)sql語句。如果您以前使用過JDBC,您將看到連接sql語句有多么困難,不要漏掉空格并且避免在columns列后面省略逗號等。而動態(tài)語句可以完全解決這些難題。Hibernate采用面向?qū)ο蟮乃枷耄ㄟ^封裝JDBC操作實現(xiàn)ORM(實體關(guān)系映射),但是在復雜的查詢操作上增加了開發(fā)人員的學習成本,MyBaits需要用戶寫更多的SQL代碼,更多的通過用戶邏輯來解決復雜查詢問題,此外,MyBatis在處理大量數(shù)據(jù)和高并發(fā)的情況表現(xiàn)更好。BootstrapBootstrap框架是當下最為流行的響應式布局的前端開發(fā)技術(shù),多用于移動端的開發(fā)。其開發(fā)出來的頁面能同時適應pc電腦、平板電腦以及手機,還兼容主流的瀏覽器。使用bootstrap開發(fā)web非常的快捷,大大簡化工作量,組件和js插件也非常的豐富,足以滿足一般的項目開發(fā)。而且技術(shù)要求不高,只要會基本的HTML及CSS知識,再對照中文文檔,即可快速上手。JWTJWT(JSONWebToken),是當前最主流的跨域認證解決方案,解決了傳統(tǒng)的Session認證擴展性差、耗費服務器內(nèi)存資源的問。官方提供7個字段,可以自定義配置,通過Base64URL算法將JSON對象串型化,這一部分是可逆的,不可存放敏感信息。簽名部分是前兩個部分的簽名,以防止數(shù)據(jù)被篡改。I18N在信息領(lǐng)域,國際化(i18n)意味著能夠在不顯著改變產(chǎn)品的情況下適應不同語言和地區(qū)的語言需求。能夠不修改程序內(nèi)部的代碼,也可以按語言或地區(qū)查看相應的界面。ThymeleafThymeleaf是一個服務器端Java模板引擎,用于開發(fā)Web和獨立環(huán)境項目。Spring正式支持的模板呈現(xiàn)模板中沒有包含JSP。但是,Thymeleaf和SpringMVC的自動配置集成,非常完美,而且成本不高。Thymeleaf與SpringBoot完全集成在一起。SpringBoot提供了Thymeleaf的默認配置,并設置了Thymeleaf的查看解析器。你可以像以前使用jsp一樣操縱Thymeleaf。代碼沒有什么不同。只是模板語法有所不同。Websocket協(xié)議由于HTTP協(xié)議存在著固定的缺陷——請求只能從客戶端發(fā)起,是一種“你問我答”的模式,導致HTTP協(xié)議不能主動的將信息推送給客戶端,這種單向請求的特點,就導致請求只能由客戶端發(fā)起然后服務端對客戶端請求進行相應,而服務端有了變化客戶端卻無從知曉,比如:想要實現(xiàn)天氣有變化實時通知給用戶,過往通過客戶端定期發(fā)送請求來解決,雖然后來開發(fā)人員對“輪詢”的方式進行了升級出現(xiàn)了“長輪詢”,但是“長輪詢”相較于“輪詢”不同是——在服務器有變化的時候給客戶端相應,而不是之前“你問我答”的方式,但還是一種長連接,而HTTP是一個發(fā)送簡單信息的昂貴的網(wǎng)絡協(xié)議,這會導致無論服務器是否有新消息傳送,都要建立昂貴的連接,導致資源極度浪費。因此WebSocket協(xié)議就誕生了。使用WebSocket協(xié)議的服務器和客戶端都可以主動推送消息,雙向平等的對話機制??梢酝ㄟ^多種HTTP代理服務器進行傳遞。可以發(fā)送文本或者以二級制的方式發(fā)送視頻文件等,并且數(shù)據(jù)格式輕量,速度更快,效率更高,但是Websocket需要更高的瀏覽器規(guī)范,并且會給服務器帶來延遲,并且還存在一些問題,比如使用使用HTTP進行安全和混合內(nèi)容處理[9]。系統(tǒng)分析系統(tǒng)功能需求概述該論壇是用戶之間交流的一個很好的平臺,信息量有效分類,形式自由。首先是論壇前臺方面,不像各種管理系統(tǒng)那樣,必須登錄賬號才能訪問,于是我就設計成對接口進行保護,需要登錄賬戶才能訪問的頁面和API接口,在未登錄的情況下無法訪問。用戶權(quán)限分為游客(未登錄)只能訪問開放的一些頁面和服務器端的接口,當用戶登錄時,所有功能都可以訪問,所有服務器端接口也會打開。同時必須要有對應的后臺管理系統(tǒng)。系統(tǒng)功能需求分析用戶功能需求分析(1)游客功能需求分析①游客不需要注冊和登錄就可以瀏覽論壇的文章列表、話題列表、查詢指定用戶。②查詢指定文章、查詢指定話題、從數(shù)據(jù)庫的層面看,游客只有部分查詢操作,沒有增刪改的操作。(2)注冊用戶功能需求分析①用戶注冊后登錄即可解鎖全部功能,包括對文章的評論、點贊,對文章作者的關(guān)注,關(guān)注后的人將會出現(xiàn)在他的關(guān)注列表中,關(guān)注人的文章也會出現(xiàn)在關(guān)注人文章列表中。②用戶可以創(chuàng)建文章,上傳圖片,并且可以選擇文章的分類和文章所屬的話題分類。③用戶可以和其他在線用戶一同進入聊天室發(fā)送文字進行在線聊天。④用戶可以修改大部分個人信息,唯一不可以修改的是用戶的登錄名,因為這作為用戶的登錄信息,在用戶表中是和id一樣的唯一標識。管理者功能需求分析(1)因為是后臺管理系統(tǒng),所以必須登錄才能訪問。(2)管理者的身份在數(shù)據(jù)庫中定義,管理員開放全部接口,對文章進行查看和刪除,對用戶的權(quán)限修改和重置用戶密碼,管理頁面廣告位的廣告投放。(3)管理員除了可以管理前臺信息以外,還能對后臺運行的日志進行查看、下載和刪除。技術(shù)經(jīng)濟分析技術(shù)可行性分析本次開發(fā)采用Java語言,Java語言憑借著其強大的特性在高級開發(fā)語言中經(jīng)久不衰,市場占有率一直穩(wěn)居開發(fā)語言排行榜前茅。配合近年流行的SpringBoot和Mybatis等框架編寫出簡潔的服務端代碼,前端使用bookstrap框架,后臺管理端使用layui能夠快速的構(gòu)建出前端頁面,并不需要自己動手寫“輪子”,(軟件領(lǐng)域中輪子理論指的他人已經(jīng)做過的項目或者功能,直接拿來使用)。現(xiàn)階段我已經(jīng)對以上所需技術(shù)基本熟悉,通過開發(fā)過程中一步一步地將技術(shù)不斷打磨。通過計劃開發(fā)周期安排,初步能確定在規(guī)定時間內(nèi)能夠完成需求分析確認下來的功能需求。Java作為常用開發(fā)語言,遇到問題及bug在各大網(wǎng)站、博客等都可提供技術(shù)支持。所以有了這些技術(shù)上的支持,成功的開發(fā)一個論壇系統(tǒng)沒有任何的技術(shù)風險。經(jīng)濟可行性分析本次設計開發(fā)的項目規(guī)模很小,目前項目的復雜程度和商業(yè)項目相距甚遠,開發(fā)人員僅有我一人,因此僅需要一臺電腦和相應的網(wǎng)上付費產(chǎn)品。而且開發(fā)出來的論壇運行起來所需要的電腦硬件要求不高,所以總的來說成本費用非常低廉。所以經(jīng)濟上是可行的。社會可行性分析本論壇的設計與實現(xiàn)過程中所使用的工具軟件均為開源軟件,并且本次開發(fā)不作商業(yè)用途,開發(fā)過程中如有借鑒到的代碼全部是開源的,不會觸及到國家、任何群體、個人的利益。所以社會、法律上也可行。用例分析參與者、用例以及這兩者之間的關(guān)系是UML用例圖的三個組成部分,首先要找到一個系統(tǒng)的參與者,并根據(jù)參與者需要系統(tǒng)做的事情建立用例,用例的名稱可以命名為簡單且易于使用。它通常是一個帶動作性的詞。前臺論壇用例分析(1)參與者主要有用戶和游客。(2)用例主要涉及到注冊、登錄;文章的查詢、點贊、關(guān)注、搜索、評論;個人中心主要涉及到修改個人相關(guān)的信息已經(jīng)獲取到個人在使用期間的一些數(shù)據(jù);用戶與用戶之間的在線聊天等。用例如圖3.1所示。圖3.1普通用戶用例圖后臺管理系統(tǒng)用例分析(1)參與者主要是后臺的管理員。(2)用例包括管理員登錄;對用戶賬號密碼的重置和權(quán)限的修改;管理員對帖子的查看和屏蔽;對廣告和新聞的增加刪除;對論壇數(shù)據(jù)的統(tǒng)計分析。用例如圖3.2所示。圖3.2后臺管理員用例圖系統(tǒng)設計系統(tǒng)架構(gòu)設計系統(tǒng)的總體架構(gòu)主要包括5個層面,展示層、控制層、業(yè)務邏輯層、數(shù)據(jù)訪問層、數(shù)據(jù)源層。數(shù)據(jù)庫與業(yè)務邏輯層進行數(shù)據(jù)交互來實現(xiàn)用戶前后臺交互,最后前后臺數(shù)據(jù)交互的結(jié)果展示在表現(xiàn)層系統(tǒng)架構(gòu)設計如圖4.1所示。圖4.1系統(tǒng)總體架構(gòu)設計圖系統(tǒng)功能模塊設計本論壇系統(tǒng)的主體模塊主要由用戶模塊(用戶注冊與登錄、修改個人資料、關(guān)注話題和文章、關(guān)注其他用戶、瀏覽用戶信息、上傳頭像和封面)、文章模塊(發(fā)布文章、瀏覽文章、點贊與關(guān)注文章、評論文章、回復評論)、后臺管理模塊(日志查看與下載、數(shù)據(jù)統(tǒng)計、文章管理、用戶管理、廣告和新聞管理、首頁文章置頂)三大模塊組成,附加一個消息通知模塊(評論通知、回復通知、未讀列表、已讀功能)。圖4.2系統(tǒng)整體模塊數(shù)據(jù)庫設計數(shù)據(jù)庫設計原則根據(jù)之前的需求分析進行數(shù)據(jù)庫表的設計,設計數(shù)據(jù)庫表的原則是最大程度地滿足數(shù)據(jù)庫設計的三大范式,但不是必須滿足。數(shù)據(jù)庫設計的優(yōu)先級應該滿足需求>性能>三大范式。三大范式是作為數(shù)據(jù)庫設計的總體方向,而五大約束則是必須要滿足的,分別是:主鍵約束、唯一約束、默認約束、外鍵約束、非空約束。為方便調(diào)試,一般等到測試階段再添加外鍵約束。數(shù)據(jù)庫ER圖ER模型是描述各個實體之間聯(lián)系的一種模型。(1)實體可以是具體的,也可以是抽象的,但一定都是對象,實體主要包括:用戶、管理、文章、話題、點贊、評論、關(guān)注用戶、關(guān)注話題、關(guān)注問題、通知、廣告、在線用戶、用戶權(quán)限等,它們具有自己的屬性,每一條數(shù)據(jù)都是一個具體的對象,而不僅僅是作為數(shù)據(jù)關(guān)聯(lián)使用。(2)聯(lián)系是指實體之間的關(guān)系,例如圖中的實體“用戶”與“問題”之間的“屬于”關(guān)系,像這種關(guān)系抽象為聯(lián)系,用菱形框表示在圖中。這種聯(lián)系可以是一對一(1:1),一對多(1:N),或者是多對多(M:N)。比如圖中的用戶與關(guān)注用戶,一個用戶可以關(guān)注多個用戶,一個用戶也可以被多個用戶關(guān)注,所以他們是多對多關(guān)系(M:N)。(3)屬性指的是實體的特征,這些特征用就是實體的屬性。比如用戶具有用戶名和密碼等屬性。在圖中用橢圓形框表示。關(guān)于將ER模型轉(zhuǎn)化為關(guān)系模型的,在1:1的關(guān)系中只需要將其中一個實體的主鍵填到另一個實體中即可;在1:N的關(guān)系中需要將1的主鍵添加到N的實體中;在M:N的關(guān)系中需要建立一個新的實體,將M和N的主鍵分別放入新的實體中,新的實體也可以具有自己的屬性,比如粉絲表是將兩個用戶的主鍵id記錄下來,并添加了新的屬性“關(guān)注時間”。此外還有1:1:N,以及M:N:P關(guān)系,其轉(zhuǎn)化規(guī)則類似于以上提到的三種??梢奅R圖的設計是十分重要的。圖5.1全部實體類關(guān)系圖數(shù)據(jù)庫物理設計本系統(tǒng)數(shù)據(jù)庫使用的是Mysql8.0.19版本,為了方便管理數(shù)據(jù)庫使用Navicat可視化工具,數(shù)據(jù)庫名稱為community,在多對多的關(guān)系中,使用了中間表進行關(guān)聯(lián),主要表有:管理表、廣告表、點贊表、評論表、關(guān)注問題表、關(guān)注話題表、關(guān)注用戶表、通知表、在線用戶表、問題表、話題表、用戶權(quán)限表、用戶表。下面是數(shù)據(jù)表的展示。表5.1管理表字段名字段類型長度默認是否為空是否主鍵描述adminIdbigint20NotnullYes管理員IDtimebigint20Notnull時間questionCountbigint200問題數(shù)userCountbigint200用戶數(shù)userAddCountbigint200用戶增長數(shù)questionAddCountbigint200問題增長數(shù)管理【admin】表是負責存放后臺管理系統(tǒng)的首頁數(shù)據(jù)統(tǒng)計記錄的,用戶和問題增長情況等。表5.1所示。表5.2問題表字段名字段類型長度默認是否為空是否主鍵描述questionIdbigint20自增NotnullYes問題IDuserIdbigint20Notnull用戶IDtitlevarchar60Null標題classificationvarchar50Null分類descriptionlongtext0Null文章內(nèi)容fileUrltext0Null文件網(wǎng)址viewCountbigint201瀏覽數(shù)commentCountbigint200評論數(shù)likeCountbigint200點贊數(shù)followCountbigint200關(guān)注數(shù)tagvarchar256Null標記createTimebigint20Null創(chuàng)建時間alterTimebigint20Null更改時間statusint111狀態(tài)文章【questions】表是整個系統(tǒng)的核心數(shù)據(jù)表,創(chuàng)建時間采用10位時間戳的形式存儲,方便時間的計算和轉(zhuǎn)換。在文章表中關(guān)聯(lián)了用戶表、評論表、點贊表。表5.2所示。表5.3點贊表字段名字段類型長度默認是否為空是否主鍵描述likeIdbigint20自增NotnullYes點贊idnotifierbigint20通知器notifierNamevarchar50Null通知器名稱receiverbigint20接收器questionIdbigint20Null問題IDcommentIdbigint20Null評論IDtypebigint20Null類型createTimebigint20Null創(chuàng)建時間notificationIdbigint20Null通知ID點贊【clicklike】表是存儲問題點贊的信息,發(fā)出點贊通知告訴作者收到點贊。表5.3所示。表5.4評論表字段名字段類型長度默認是否為空是否主鍵描述commentIdbigint20自增NotnullYes評論IDquestionIdbigint20Notnull問題IDparentCommentIdbigint20Notnull父注釋IDparentIdbigint20Notnull父IDtypeint11Notnull類型commentatorbigint20Notnull評論者contentlongtext0Notnull內(nèi)容likeCountbigint200點贊數(shù)commentCountbigint200評論數(shù)createTimebigint20Notnull創(chuàng)建時間modifiedTimebigint20Notnull修改時間statusint111狀態(tài)評論【comment】表是存放評論的相關(guān)信息,評論者,還有統(tǒng)計點贊數(shù)和評論數(shù)。表5.4所示。表5.5話題表字段名字段類型長度默認是否為空是否主鍵描述idbigint20自增NotnullYes主鍵idtitlevarchar100Notnull標題talkCountbigint200討論數(shù)followCountint1000關(guān)注數(shù)imagevarchar10000Null圖像simpleDescvarchar10000Null簡單描述typeint11Null類型createTimebigint20Null創(chuàng)造時間modifiedTimebigint20Null修正時間statusint21狀態(tài)話題【topic】表是存放話題標簽信息的數(shù)據(jù)表,存儲話題討論數(shù)、關(guān)注數(shù)、簡介等相關(guān)信息。表5.5所示。表5.6用戶表字段名字段類型長度默認是否為空是否主鍵描述idint20自增NotnullYes主鍵iduserIDvarchar20NullNotnull用戶IDuserNamevarchar20NullNotnull用戶名passwordvarchar60NullNotnull密碼emailvarchar30NullNotnull郵箱sexvarchar2NullNotnull性別ageint11Null年齡birthdayvarchar19Null生日schoolvarchar20Null學校majorvarchar20Null專業(yè)selfIntroductionvarchar500Null個性簽名simpleSelfIntroductionvarchar50Null簡介likesvarchar50Null愛好likeCountbigint200獲贊數(shù)followCountbigint200關(guān)注數(shù)fansCountbigint200粉絲數(shù)creationTimevarchar19Null創(chuàng)建時間lastTimevarchar19Null最后登錄時間headUrlvarchar300Null頭像urluserTopPhotoUrlvarchar300Null個人封面url用戶【users】表是存放用戶必須的信息,這里將用戶表和用戶信息表分開,因為用戶詳細信息并不是必須要填寫的。表5.6所示。表5.7通知表字段名字段類型長度默認是否為空是否主鍵描述idbigint20自增NotnullYes主鍵idnotifierbigint20Notnull通知器receiverbigint20Notnull接收器outerIdbigint20Notnull外部IDcommentContenttext0Null評論內(nèi)容commentIdbigint20-1評論IDtypeint11Notnull類型createTimebigint20Notnull創(chuàng)建時間statusint110狀態(tài)菜單【notification】表存放的的通知相關(guān)的信息,通知的類型還有時間等。表5.7所示。表5.8廣告表字段名字段類型長度默認是否為空是否主鍵描述idbigint20自增NotnullYes主鍵idtitlevarchar256Null標題urlvarchar1000Null網(wǎng)址imagevarchar1000Null圖像createTimebigint20Null創(chuàng)建時間modifiedUserbigint20Null最后修改的用戶startTimebigint20Null開始時間endTimebigint20Null結(jié)束時間positionvarchar50Notnull位置viewCountbigint200瀏覽數(shù)statusint20Null狀態(tài)廣告【advertisement】表存放了廣告和新聞信息的。表5.8所示。表5.9在線用戶表字段名字段類型長度默認是否為空是否主鍵描述idbigint20自增NotnullYes主鍵iduserNamevarchar20Notnull用戶名tokenvarchar300Notnull令牌ipvarchar128Notnull用戶Ip地址timebigint20Notnull時間expireTimebigint200過期時間在線用戶【onlineuser】表存放的是在線用戶登錄時的相關(guān)信息。表5.9所示。表5.10用戶權(quán)限表字段名字段類型長度默認是否為空是否主鍵描述idbigint20自增NotnullYes主鍵idpowerint111權(quán)限modifiervarchar20Notnull修飾語updateTimevarchar19Notnull更新時間dueTimebigint20Null到期時間簽到表【userpermission】是存放用戶權(quán)限信息的,是用戶表的延伸。表5.10所示。表5.11關(guān)注問題表字段名字段類型長度默認是否為空是否主鍵描述idbigint20自增NotnullYes主鍵idfollowQuestionIdbigint20Notnull關(guān)注問題idfollowQuestionAuthorbigint20Notnull關(guān)注問題作者followQuestionTitlevarchar60Notnull關(guān)注問題標題userIdbigint20Notnull用戶idcreateTimebigint20Notnull創(chuàng)建時間關(guān)注問題【followquestion】表是存放用戶關(guān)注的問題的id、作者、標題等信息。表5.11所示。表5.12關(guān)注話題表字段名字段類型長度默認是否為空是否主鍵描述followTopicIdbigint20自增NotnullYes關(guān)注話題idtopicIdbigint20Notnull話題idtopicTitlevarchar100Notnull話題標題topicImagevarchar10000Null話題圖像userIdbigint20Notnull用戶idcreateTimebigint20Notnull創(chuàng)建時間關(guān)注話題【followtopic】表是存放用戶關(guān)注的話題的id、標題、圖像等信息。表5.12所示。表5.13關(guān)注用戶表字段名字段類型長度默認是否為空是否主鍵描述idbigint20自增NotnullYes主鍵idfollowUserIdbigint20Notnull關(guān)注的用戶iduserIdbigint20Notnull用戶idcreateTimebigint20Notnull創(chuàng)建時間關(guān)注用戶【followuser】表是存放用戶關(guān)注的用戶的相關(guān)信息。表5.13所示。系統(tǒng)詳細設計與實現(xiàn)前端主要功能實現(xiàn)登錄注冊模塊(1)頁面功能游客訪問只能有很少的權(quán)限(如瀏覽帖子)。若用戶想體驗更多登錄后的功能如:發(fā)表文章、個人主頁、在線聊天、點贊、關(guān)注、評論等,則需要先注冊賬號,輸入用戶名和密碼等信息,用戶名用于登錄不能被使用過,密碼限制條件是六位以上。經(jīng)過校驗通過即注冊成功,使用郵箱和密碼進行登錄,可使用全部功能。登錄流程圖如圖6.1所示.圖6.1普通用戶登錄、注冊流程圖圖6.2登錄界面圖6.3注冊界面(2)功能實現(xiàn)數(shù)據(jù)庫的密碼是不能直接暴露出來的,此處使用的是BCrypt加密算法。BCrypt加密算法是加鹽的單向哈希,并且不可逆向破解的一種加密算法。相同的plaintext,每次加密生成的密文完全不一樣,所以是無法逆向破解去生成明文的,破解非常困難。登錄核心代碼@RequestMapping(value="/sign-in",method=RequestMethod.POST)publicStringsignInAndSkip(Stringemail,Stringpassword,Stringremember,StringvalidateCode;Modelmodel,HttpServletRequestrequest,HttpServletResponseresponse){try{HashMap<String,Object>signInMsg=signInService.signIn(email,password,remember,validateCode,request);Useruser=(User)signInMsg.get("user");//設置sessionrequest.getSession().setAttribute("user",user);//寫入cookieCookiecookie=newCookie("token",(String)signInMsg.get("token"));cookie.setMaxAge((Integer)signInMsg.get("time"));response.addCookie(cookie);returnStringUtil.jumpWebLangeParameter("/",true,request);}catch(CustomizeExceptione){if(CustomizeErrorCode.SIGN_IN_CAPTCHA_ERROR.getCode().equals(e.getCode())){CaptchaUtil.clear(request);model.addAttribute("kaptchaMsg","驗證碼錯誤!");}elseif(CustomizeErrorCode.SIGN_IN_EMAIL_ERROR.getCode().equals(e.getCode())){model.addAttribute("emailMsg","用戶不存在,請檢查郵箱!");}elseif(CustomizeErrorCode.SIGN_IN_EMAIL_OR_PASSWORD_NULL.getCode().equals(e.getCode())){model.addAttribute("emailMsg","密碼和郵箱不能為空");}elseif(CustomizeErrorCode.SIGN_IN_PASSWORD_ERROR.getCode().equals(e.getCode())){model.addAttribute("pwdMsg","密碼錯誤!");}returnStringUtil.jumpWebLangeParameter("SignIn",false,request);}}}文章列表模塊(1)首頁功能首頁是用戶看到的首個頁面,用戶可以點擊“搜索問題或用戶”,可根據(jù)問題標題中的關(guān)鍵詞進行動態(tài)模糊查詢。默認每次加載10篇文章,用戶下拉到底部,會自動加載新的文章列表。通過點擊上方“話題”選項卡會跳轉(zhuǎn)到不同的文章的話題分類列表中??蓪ξ恼逻M行點贊、評論、關(guān)注等操作。若用戶對另一用戶加關(guān)注、另一用戶會立即出現(xiàn)在他的關(guān)注列表中。圖6.4首頁圖(2)功能實現(xiàn)這里前端傳給后端的是文章分類的id,通過文章分類id加載每個分類下的文章,根據(jù)文章加載出每個文章所帶的圖片和樓主信息,根據(jù)樓主加載出樓主和當前查看文章的人的關(guān)系,以及該文章的點贊信息,在前端渲染時進行計算。若當前登錄人已經(jīng)關(guān)注了該作者就顯示取消關(guān)注按鈕,若已經(jīng)點贊過該文章則點贊圖標變亮。文章詳情&評論模塊(1)文章詳情頁功能詳情頁是用戶點擊文章相關(guān)信息之后跳轉(zhuǎn)進來的,在這里用戶可以對文章進行瀏覽和評論,用戶也可以對文章的其他評論人的評論進行點贊和回復,“作者”也可以編輯當前文章。圖6.5文章詳情圖(2)功能實現(xiàn)這里也將詳情頁的文章部分和評論部分以及下方輸入框都設計為組件,涉及到了個性化時間——距離發(fā)帖的時間不同,展示的時間格式也不同,評論涉及到了“評論蓋樓”,是開發(fā)中的一個難點,主要是數(shù)據(jù)庫評論表的設計,通過判斷當前評論是否具有父級id,若父級id為0,則是一級評論,若父級id是1則該評論是評論1的子評論。前端使用了遞歸算法渲染評論列表,后端還是在邏輯上實現(xiàn)的,也可以在Mybatis中使用遞歸查詢來增加代碼的可讀性。圖6.6文章底部評論圖部分核心代碼①評論業(yè)務類代碼@Override@Transactional(rollbackFor=CustomizeException.class)publicintinsertComment(Commentcomment){if(comment.getParentId()==0){thrownewCustomizeException(CustomizeErrorCode.TARGET_PARAM_NOT_FOUND);}if(!CommentTypeEnum.isExist(comment.getType())){thrownewCustomizeException(CustomizeErrorCode.TYPE_PARAM_WRONG);}Questionquestion=questionMapper.selectQuestionById(comment.getQuestionId(),1);if(CommentTypeEnum.COMMENT.getType().equals(comment.getType())){//回復評論if(question==null){thrownewCustomizeException(CustomizeErrorCode.QUESTION_NOT_FOUND);}CommentdbComment=selectCommentByCommentId(comment.getParentId());if(dbComment==null){thrownewCustomizeException(CustomizeErrorCode.COMMENT_NOT_FOUND);}if(comment.getParentId()!=comment.getParentCommentId()){Commentfather=commentMapper.selectCommentByCommentId(comment.getParentCommentId(),1);if(father==null){thrownewCustomizeException(CustomizeErrorCode.COMMENT_NOT_FOUND);}father.setCommentCount(1);commentMapper.updateCommentCount(father);}發(fā)布模塊(1)發(fā)布模塊功能用戶登錄之后可以發(fā)布文章,可以上傳單張圖片和多張圖片,選擇分類會下拉話題列表。其他用戶評論,設置文章權(quán)限、設置所在位置,也可以選擇文章所屬的分類,若用戶沒有考慮好可以暫時退出,會自動緩存為草稿。發(fā)布帖子支持markdown編輯。(2)功能實現(xiàn)圖6.7發(fā)布界面圖①發(fā)布模塊核心代碼@Override@Transactional(rollbackFor=CustomizeException.class)publicintcreateQuestion(Questionquestion){if(question.getQuestionId()==-1){question.setCreateTime(System.currentTimeMillis());question.setAlterTime(System.currentTimeMillis());//話題數(shù)+1tagClassService.updateTalkCount(question.getTag(),1);returnquestionMapper.createQuestion(question);}else{QuestionoldQuestion=questionMapper.selectQuestionById(question.getQuestionId(),1);//防止用戶修改不屬于自己的問題//另一方面防止用戶修改自己的問題時,改錯問題if(oldQuestion==null||oldQuestion.getUserId()!=question.getUserId()||oldQuestion.getCreateTime()!=question.getCreateTime()){("有人嘗試非法修改,修改被攔截!");thrownewCustomizeException(CustomizeErrorCode.INVALID_OPERATION);}Stringregex=",|,";String[]newTags=question.getTag().split(regex);String[]oldTags=oldQuestion.getTag().split(regex);question.setAlterTime(System.currentTimeMillis());tagClassService.alterQuestionTalkCount(newTags,oldTags);returnquestionMapper.updateQuestion(question);}}話題模塊(1)話題功能描述點擊在首頁頂部的第二個“話題”按鈕就可以進入到話題模塊,話題模塊主要包括話題列表、話題分類等。其中點擊話題標簽可以查看參與該話題的全部文章。在首頁和話題等頁面的右側(cè)廣告位下面的位置顯示熱門話題,熱門話題與熱門問題默認是每一小時更新一次,也可以在后臺管理頁手動更新。(2)功能實現(xiàn)圖6.8話題列表界面在線聊天模塊(1)在線聊天功能描述點擊首頁或其他頁面頂部“聊天”按鈕進入聊天頁面,點擊“開始聊天”即可進入聊天室,聊天室顯示當前在線人數(shù),在聊天室可以與當前在線用戶進行文字聊天。需要登錄后才能聊天,本站不存儲所有聊天信息,關(guān)閉聊天后消息立即失效。采用js實現(xiàn)的簡易多人在線聊天室。因為不保存聊天消息,所以用戶只能看見該用戶在進入聊天室后的這段時間里收到的消息。(2)功能實現(xiàn)這一部分的后端需要搭建Websocket服務,實現(xiàn)了基礎的文字聊天,相對前端來說后端相對容易實現(xiàn)。界面如圖6.9所示。圖6.9在線聊天室的聊天界面消息發(fā)送核心代碼functionsendMessage(event){varmessageContent=messageInput.value.trim();if(messageContent&&stompClient){varchatMessage={sender:username,content:messageInput.value,type:'CHAT',image:userImage,id:userId};stompClient.send("/app/chat.sendMessage",{},JSON.stringify(chatMessage));messageInput.value='';}event.preventDefault();}用戶個人中心模塊(1)個人中心功能描述用戶點擊頂部最右方用戶名和頭像的位置下拉菜單“我的主頁”點擊進入就會跳轉(zhuǎn)到個人中心,可以看到自己的信息以及自己發(fā)表的文章列表、回復的文章列表,右方顯示關(guān)注的人和被誰關(guān)注,和關(guān)注的問題、話題以及最新回復。(2)功能實現(xiàn)個人中心頁面主要是各種數(shù)據(jù)的統(tǒng)計。圖6.10個人中心主頁圖6.11我的關(guān)注設置模塊(1)設置模塊功能描述在首頁頁面頂部最右方用戶名和頭像的位置下拉菜單“設置”進入設置界面,點擊“修改”按鈕即可編輯修改資料;點擊導航“修改密碼”進入頁面輸入兩遍新密碼點擊“提交”即可修改密碼;點擊導航“修改頭像”點擊修改跳轉(zhuǎn)到修改指南,然后“選擇頭像”調(diào)整尺寸點擊上傳即可修改頭像成功;點擊導航“修改主頁封面”然后選擇文件并點擊“上傳”即可完成封面修改。由于篇幅有限這里只展示部分頁面。(2)功能實現(xiàn)設置模塊主要是對表單組件的使用,包括頭像上傳、封面上傳等。圖6.12個人設置后臺管理頁面展示登錄界面(1)登錄功能描述登錄界面是后臺管理系統(tǒng)的第一個頁面,登錄界面設計簡潔大方。在前端使用JavaScript做了表單校驗,對非法情況進行友好提示,當鼠標光標位于驗證碼框輸入驗證碼后,點擊回車鍵即可登錄。若登錄的賬號沒有管理權(quán)限,則提示權(quán)限不足圖6.13登錄頁面圖(2)功能實現(xiàn)登錄的界面表單校驗使用ajax操作,用戶登錄功能,輸入錯誤的話,會在下面提示用戶輸入錯誤等,不會重新刷新頁面,只刷新下面的塊元素等。用戶請求不會間斷,用戶可以繼續(xù)操作。首頁界面(1)功能描述首頁可以看到總文章數(shù)統(tǒng)計、當前在線用戶統(tǒng)計、總用戶數(shù)統(tǒng)計和顯示當前時間,下面顯示近期數(shù)據(jù)列表。圖6.14后臺管理員首頁圖(2)功能實現(xiàn)登錄若沒有相關(guān)權(quán)限,訪問就會被拒絕。通過這種方式實現(xiàn)了對接口的保護。統(tǒng)計在線用戶數(shù)在后端實現(xiàn),查詢用戶是否在線,獲取token并插入在線記錄到onlineuser表中暫時存放,并統(tǒng)計在線用戶數(shù)展示到后臺頁面上。服務端會定時刪除登陸過期的用戶。部分核心代碼/***每間隔兩小時,清理一次過期用戶**/@Scheduled(fixedRate=7200000)publicvoidreportCurrentTime(){onlineUserService.deleteExpireTimeUser(System.currentTimeMillis());("定時刪除登陸過期的用戶,執(zhí)行時間{}",StringUtil.getNowTime());}用戶管理頁(1)功能描述用戶管理頁面主要功能有,用戶資料查看、快速查詢、用戶權(quán)限的變更等。圖6.15用戶管理界面(2)功能實現(xiàn)用戶管理頁面主要是分頁的實現(xiàn),管理員可以修改其他用戶的權(quán)限。文章管理頁(1)功能描述文章管理主要實現(xiàn)功能有對文章的搜索,刪除文章,點擊文章標題可以進入查看文章的詳情和評論,在彈出框中可以對用戶評論進行回復。圖6.16文章管理界面圖6.2.5廣告管理頁面(1)廣告模塊可以對廣告進行增刪改查,開始投放和結(jié)束投放。圖6.17廣告管理界面圖系統(tǒng)測試系統(tǒng)測試概述系統(tǒng)測試貫穿著開發(fā)的整個周期,而不僅僅是在系統(tǒng)開發(fā)結(jié)束進行的,其實系統(tǒng)測試最好不要由該系統(tǒng)的開發(fā)人員來做,一是開發(fā)人員往往會認為自己的軟件沒有錯誤,另一方面是開發(fā)人員很同意根據(jù)自己開發(fā)時候的編程思路或者是開發(fā)過程中的開發(fā)步驟進行測試,存在著很大的“思維死角”,局限性非常大。測試人員應該根據(jù)軟件的整體邏輯精心的設計測試用例,測試用例不僅是合理的輸入條件,也要測試不合理的情況。如果忽略了不合理的測試情況很容易在今后的使用中發(fā)現(xiàn)意想不到的情況。根據(jù)現(xiàn)階段情況統(tǒng)計,國內(nèi)軟件存在著“重開發(fā),輕測試”的情況,導致日后軟件問題頻出,不過這種情況正在日益改善,實際上軟件測試占據(jù)軟件開發(fā)周期的三分之一,或者說軟件測試與開發(fā)的時間比例大概為1:1,由此可見測試是軟件開發(fā)周期中非常重要的一個環(huán)節(jié)。接口測試用例由于該項目時前后端分離的,開發(fā)步驟是,寫前端界面、寫后端接口、接口測試、前后端對接。接口測試相當于在測試后端代碼,是針對Controller進行測試。在接口測試中往往是根據(jù)http狀態(tài)碼(HTTPstatusCode)的反饋進行判斷,通過三位數(shù)字代碼對網(wǎng)頁服務器超文本傳輸協(xié)議的相應狀態(tài)進行描述。根據(jù)狀態(tài)碼的范圍可以快速找到錯誤的發(fā)生位置,如200代表請求成功;401代表請求未授權(quán);404代表服務端找不到請求的地址;服務端出錯最常見的狀態(tài)碼是500。而狀態(tài)碼的第一位數(shù)字是對問題的總體描述。圖7.1postman生成部分接口測試文檔集成測試用例集成測試是對整個系統(tǒng)或整個子系統(tǒng)進行測試。事實上,有些模塊是單獨測試并沒有問題,而結(jié)合整體卻發(fā)現(xiàn)出問題。在該項目中,集成測試相當于是在測試前后端接口對接之后是否能正常運行并且測試數(shù)據(jù)和預期一致。由于受制于篇幅,僅展示注冊登錄部分和使用WebSockt實現(xiàn)的在線聊天。表7.1注冊登錄模塊測試用例測試模塊注冊、登錄模塊測試模塊條目測試目的預期結(jié)果實際結(jié)果輸入數(shù)據(jù)庫中已有的用戶名測試注冊功能是否實現(xiàn)提示該賬號已被注冊符合輸入錯誤的郵箱測試注冊功能是否實現(xiàn)提示郵箱格式不合法符合輸入數(shù)據(jù)庫中已有的郵箱測試注冊功能是否實現(xiàn)提示該賬號已被注冊符合輸入空的生日測試注冊功能是否實現(xiàn)提示生日格式不正確符合輸入錯誤的驗證碼測試注冊功能是否實現(xiàn)提示驗證碼錯誤符合120s內(nèi)輸入正確驗證碼測試注冊功能是否實現(xiàn)注冊通過符合輸入正確用戶名和密碼測試登錄功能是否實現(xiàn)跳轉(zhuǎn)到首頁符合輸入正確用戶名和錯誤密碼測試登錄功能是否實現(xiàn)提示密碼錯誤符合輸入數(shù)據(jù)庫不存

溫馨提示

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

評論

0/150

提交評論