基于MVC的Java-Web開(kāi)發(fā)項(xiàng)目式教程項(xiàng)目7課件_第1頁(yè)
基于MVC的Java-Web開(kāi)發(fā)項(xiàng)目式教程項(xiàng)目7課件_第2頁(yè)
基于MVC的Java-Web開(kāi)發(fā)項(xiàng)目式教程項(xiàng)目7課件_第3頁(yè)
基于MVC的Java-Web開(kāi)發(fā)項(xiàng)目式教程項(xiàng)目7課件_第4頁(yè)
基于MVC的Java-Web開(kāi)發(fā)項(xiàng)目式教程項(xiàng)目7課件_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

基于MVC的Java-Web開(kāi)發(fā)項(xiàng)目式教程項(xiàng)目7課件MVC開(kāi)發(fā)模式使得互聯(lián)網(wǎng)應(yīng)用程序開(kāi)發(fā)事半功倍,是學(xué)好JavaWEB開(kāi)發(fā)的重要基石也是核心內(nèi)容,然而,MVC開(kāi)發(fā)模式概念抽象不易理解,也成為JavaWEB開(kāi)發(fā)學(xué)習(xí)的瓶頸,本項(xiàng)目通過(guò)用戶(hù)功能模塊的詳細(xì)設(shè)計(jì)講解MVC開(kāi)發(fā)模式,再基于MVC開(kāi)發(fā)模式實(shí)現(xiàn)商品信息的管理。MVC開(kāi)發(fā)模式使得互聯(lián)網(wǎng)應(yīng)用程序開(kāi)發(fā)事半功倍,是學(xué)好Jav熟悉MVC分層開(kāi)發(fā)模式原理掌握基于MVC開(kāi)發(fā)模式設(shè)計(jì)原理能設(shè)計(jì)MVC開(kāi)發(fā)模式的代碼結(jié)構(gòu)能實(shí)現(xiàn)基于MVC開(kāi)發(fā)模式的信息更新與查詢(xún)熟悉MVC分層開(kāi)發(fā)模式原理能設(shè)計(jì)MVC開(kāi)發(fā)模式的代碼結(jié)構(gòu)基于MVC的Java-Web開(kāi)發(fā)項(xiàng)目式教程項(xiàng)目7課件任務(wù)7.1MVC分層開(kāi)發(fā)模式設(shè)計(jì)任務(wù)7.1MVC分層開(kāi)發(fā)模式設(shè)計(jì)對(duì)于剛剛開(kāi)始工作的小J,要先從簡(jiǎn)單一點(diǎn)的功能上手——MVC分層開(kāi)發(fā)模式設(shè)計(jì).對(duì)于剛剛開(kāi)始工作的小J,要先從簡(jiǎn)單一點(diǎn)的功能上手——MVC分采用MVC框架模式可以實(shí)現(xiàn)WEB系統(tǒng)的職能分工,包括模型層、視圖層、控制層。通過(guò)分層開(kāi)發(fā)模式,開(kāi)發(fā)人員可以只關(guān)注整個(gè)結(jié)構(gòu)中的其中某一層,很容易的用新的實(shí)現(xiàn)來(lái)替換原有層次的實(shí)現(xiàn),可以降低層與層之間的依賴(lài),有利于標(biāo)準(zhǔn)化和各層邏輯的復(fù)用。本任務(wù)是在理解MVC分層開(kāi)發(fā)模式的基礎(chǔ)上,根據(jù)需求功能分析進(jìn)行ED電子商務(wù)網(wǎng)站的軟件設(shè)計(jì)。采用MVC框架模式可以實(shí)現(xiàn)WEB系統(tǒng)的職能分工,包括模型層、知識(shí)目標(biāo):理解MVC設(shè)計(jì)模式,以及各層職能分工與實(shí)現(xiàn)形式掌握J(rèn)SP+Servlet+JavaBean+JDBC多種技術(shù)綜合的開(kāi)發(fā)方法技能目標(biāo):能夠根據(jù)需求分析,采用MVC分層開(kāi)發(fā)模式設(shè)計(jì)思想,設(shè)計(jì)功能實(shí)現(xiàn)架構(gòu)。知識(shí)目標(biāo):MVC(ModelViewController模型-視圖-控制器)設(shè)計(jì)創(chuàng)建Web應(yīng)用程序的模式包括以下三個(gè)部分:Model(模型)是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分,負(fù)責(zé)在數(shù)據(jù)庫(kù)中存取數(shù)據(jù)。View(視圖)是應(yīng)用程序中處理數(shù)據(jù)顯示的部分,依據(jù)模型數(shù)據(jù)創(chuàng)建的。Controller(控制器)是應(yīng)用程序中處理用戶(hù)交互的部分,負(fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶(hù)輸入,并向模型發(fā)送數(shù)據(jù)。MVC分層開(kāi)發(fā)模式中模型、視圖、控制以及用戶(hù)的操作形成了一個(gè)閉環(huán),如圖所示。本任務(wù)中軟件設(shè)計(jì)的過(guò)程將從模型層設(shè)計(jì)、控制層設(shè)計(jì)、視圖層設(shè)計(jì)三個(gè)環(huán)節(jié)分別展開(kāi),其中模型層又包括數(shù)據(jù)模型層、接口層和數(shù)據(jù)操作層。項(xiàng)目1數(shù)據(jù)庫(kù)設(shè)計(jì)MVC(ModelViewController模型-視系統(tǒng)功能較多,在實(shí)現(xiàn)環(huán)節(jié)通過(guò)用戶(hù)功能模塊進(jìn)行詳細(xì)闡述。數(shù)據(jù)實(shí)體模型層分析與設(shè)計(jì)——User.java

數(shù)據(jù)模型層是MVC模式中M(Model)中的一部分,是為了數(shù)據(jù)存儲(chǔ)和讀取方便,定義的映射數(shù)據(jù)表的結(jié)構(gòu)與關(guān)系的Java類(lèi),數(shù)據(jù)表中的字段與類(lèi)的屬性一一對(duì)應(yīng),可以說(shuō)實(shí)體模型類(lèi)是數(shù)據(jù)表在程序中的映射表示,表與類(lèi)的映射關(guān)系如表所示。系統(tǒng)功能較多,在實(shí)現(xiàn)環(huán)節(jié)通過(guò)用戶(hù)功能模塊進(jìn)行詳細(xì)闡述。數(shù)據(jù)實(shí)除了屬性意外,在實(shí)體模型類(lèi)中的方法還包括無(wú)參構(gòu)造方法、有參構(gòu)造方法和屬性的GettersandSetters,user_info表與User類(lèi)的對(duì)照關(guān)系如圖所示。除了屬性意外,在實(shí)體模型類(lèi)中的方法還包括無(wú)參構(gòu)造數(shù)據(jù)表結(jié)構(gòu)已經(jīng)在數(shù)據(jù)實(shí)體模型層中定義,數(shù)據(jù)表上操作方法(如增、刪、改、查)則在接口層進(jìn)行定義。在在用戶(hù)功能模塊中功能包括:用戶(hù)登錄驗(yàn)證用戶(hù)注冊(cè)用戶(hù)信息修改根據(jù)用戶(hù)名查詢(xún)用戶(hù)信息用戶(hù)列表更新用戶(hù)積分禁用用戶(hù)重置密碼接口中定義如圖:接口層分析與設(shè)計(jì)數(shù)據(jù)表結(jié)構(gòu)已經(jīng)在數(shù)據(jù)實(shí)體模型層中定義,數(shù)據(jù)表上操作方法(如增數(shù)據(jù)操作層是接口層的實(shí)現(xiàn)類(lèi),在數(shù)據(jù)操作類(lèi)中實(shí)現(xiàn)接口中所定義的數(shù)據(jù)表的相關(guān)操作方法。由于不同的操作類(lèi)中用到的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)對(duì)象相同,如Connection、PreparedStatement、ResultSet等,因此定義一個(gè)操作類(lèi)的父類(lèi)SupserOpr,將這些共用的屬性封裝在其中,不同表的操作類(lèi)繼承父類(lèi)就可以共享獲取連接的方法。對(duì)于user_info表的數(shù)據(jù)操作類(lèi)UserDaoImpl如下定義:數(shù)據(jù)操作類(lèi)UserDaoImpl,繼承自SuperOpr(繼承了父類(lèi)的共用屬性),實(shí)現(xiàn)了UserDao接口(實(shí)現(xiàn)了不同表上的功能方法),同時(shí)與User實(shí)體類(lèi)具有強(qiáng)關(guān)聯(lián)關(guān)系,因?yàn)閁serDaoImpl的方法中一直引用了User類(lèi)進(jìn)行數(shù)據(jù)的存取。UserDaoImpl代碼略。數(shù)據(jù)操作層分析與設(shè)計(jì)數(shù)據(jù)操作層是接口層的實(shí)現(xiàn)類(lèi),在數(shù)據(jù)操作類(lèi)中實(shí)現(xiàn)接口中所定義的在UserServlet中只有兩個(gè)方法:doGet(HttpServletRequestrequest,HttpServletResponseresponse)和doPost(HttpServletRequestrequest,HttpServletResponseresponse),其中,doGet方法中調(diào)用doPost方法,在doPost方法中實(shí)現(xiàn)邏輯處理。在doPost方法中,根據(jù)不同的操作參數(shù)進(jìn)入不同的分支,處理流程如圖所示控制層分析與設(shè)計(jì)在UserServlet中只有兩個(gè)方法:doGet(Http視圖層是與用戶(hù)交互的頁(yè)面部分,對(duì)于用戶(hù)功能模塊,視圖層包括:用戶(hù)注冊(cè)、用戶(hù)修改、用戶(hù)列表(用戶(hù)取消也在此頁(yè)面上執(zhí)行)、用戶(hù)登錄、找回密碼共5個(gè)頁(yè)面。頁(yè)面的設(shè)計(jì)一般根據(jù)后臺(tái)功能的需求來(lái)進(jìn)行,例如用戶(hù)注冊(cè)功能,需要用到用戶(hù)相關(guān)信息包括名稱(chēng)、密碼、住址等等,因此在用戶(hù)界面的表單中需要設(shè)置這些標(biāo)段屬性;再如用戶(hù)登錄功能,需要根據(jù)用戶(hù)名、密碼在數(shù)據(jù)庫(kù)中進(jìn)行驗(yàn)證,因此在登錄界面就包含了用戶(hù)名和密碼以及驗(yàn)證碼表單屬性。視圖層分析與設(shè)計(jì)視圖層是與用戶(hù)交互的頁(yè)面部分,對(duì)于用戶(hù)功能模塊,視圖層包括:1、MVC設(shè)計(jì)思想MVC英文即Model-View-Controller,即把一個(gè)應(yīng)用的輸入、處理、輸出流程按照Model、View、Controller的方式進(jìn)行分離,這樣一個(gè)應(yīng)用被分成三個(gè)層——模型層、視圖層、控制層。視圖(View):代表用戶(hù)交互界面,對(duì)于Web應(yīng)用來(lái)說(shuō),可以概括為HTML界面,但有可能為XHTML、XML和Applet。隨著應(yīng)用的復(fù)雜性和規(guī)模性,界面的處理也變得具有挑戰(zhàn)性。一個(gè)應(yīng)用可能有很多不同的視圖,MVC設(shè)計(jì)模式對(duì)于視圖的處理僅限于視圖上數(shù)據(jù)的采集和處理,以及用戶(hù)的請(qǐng)求,而不包括在視圖上的業(yè)務(wù)流程的處理。業(yè)務(wù)流程的處理交予模型(Model)處理。比如一個(gè)訂單的視圖只接受來(lái)自模型的數(shù)據(jù)并顯示給用戶(hù),以及將用戶(hù)界面的輸入數(shù)據(jù)和請(qǐng)求傳遞給控制和模型。模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。業(yè)務(wù)流程的處理過(guò)程對(duì)其它層來(lái)說(shuō)是黑箱操作,模型接受視圖請(qǐng)求的數(shù)據(jù),并返回最終的處理結(jié)果。業(yè)務(wù)模型的設(shè)計(jì)可以說(shuō)是MVC最主要的核心。目前流行的EJB模型就是一個(gè)典型的應(yīng)用例子,它從應(yīng)用技術(shù)實(shí)現(xiàn)的角度對(duì)模型做了進(jìn)一步的劃分,以便充分利用現(xiàn)有的組件,但它不能作為應(yīng)用設(shè)計(jì)模型的框架。它僅僅告訴你按這種模型設(shè)計(jì)就可以利用某些技術(shù)組件,從而減少了技術(shù)上的困難。對(duì)一個(gè)開(kāi)發(fā)者來(lái)說(shuō),就可以專(zhuān)注于業(yè)務(wù)模型的設(shè)計(jì)。MVC設(shè)計(jì)模式把應(yīng)用的模型按一定的規(guī)則抽取出來(lái),抽取的層次很重要,這也是判斷開(kāi)發(fā)人員是否優(yōu)秀的設(shè)計(jì)依據(jù)。業(yè)務(wù)模型還有一個(gè)很重要的模型那就是數(shù)據(jù)模型。數(shù)據(jù)模型主要指實(shí)體對(duì)象的數(shù)據(jù)保存(持續(xù)化)。比如將一張訂單保存到數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)獲取訂單。我們可以將這個(gè)模型單獨(dú)列出,所有有關(guān)數(shù)據(jù)庫(kù)的操作只限制在該模型中。1、MVC設(shè)計(jì)思想控制(Controller):可以理解為從用戶(hù)接收請(qǐng)求,將模型與視圖匹配在一起,共同完成用戶(hù)的請(qǐng)求。劃分控制層的作用也很明顯,它清楚地告訴你,它就是一個(gè)分發(fā)器,選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶(hù)請(qǐng)求??刂茖硬⒉蛔鋈魏蔚臄?shù)據(jù)處理。例如,用戶(hù)點(diǎn)擊一個(gè)連接,控制層接受請(qǐng)求后,并不處理業(yè)務(wù)信息,它只把用戶(hù)的信息傳遞給模型,告訴模型做什么,選擇符合要求的視圖返回給用戶(hù)。因此,一個(gè)模型可能對(duì)應(yīng)多個(gè)視圖,一個(gè)視圖可能對(duì)應(yīng)多個(gè)模型。模型、視圖與控制器的分離,使得一個(gè)模型可以具有多個(gè)顯示視圖。如果用戶(hù)通過(guò)某個(gè)視圖的控制器改變了模型的數(shù)據(jù),所有其它依賴(lài)于這些數(shù)據(jù)的視圖都應(yīng)反映到這些變化。因此,無(wú)論何時(shí)發(fā)生了何種數(shù)據(jù)變化,控制器都會(huì)將變化通知所有的視圖,導(dǎo)致顯示的更新。這實(shí)際上是一種模型的變化-傳播機(jī)制。模型、視圖、控制器三者之間的關(guān)系和各自的主要功能??刂?Controller):可以理解為從用戶(hù)接收請(qǐng)求,將2、MVC的優(yōu)點(diǎn)大部分用過(guò)程語(yǔ)言開(kāi)發(fā)出來(lái)的Web應(yīng)用,初始的開(kāi)發(fā)模板就是混合層的數(shù)據(jù)編程。例如,直接向數(shù)據(jù)庫(kù)發(fā)送請(qǐng)求并用HTML顯示,開(kāi)發(fā)速度往往比較快,但由于數(shù)據(jù)頁(yè)面的分離不是很直接,因而很難體現(xiàn)出業(yè)務(wù)模型的樣子或者模型的重用性。產(chǎn)品設(shè)計(jì)彈性力度很小,很難滿(mǎn)足用戶(hù)的變化性需求。MVC要求對(duì)應(yīng)用分層,雖然要花費(fèi)額外的工作,但產(chǎn)品的結(jié)構(gòu)清晰,產(chǎn)品的應(yīng)用通過(guò)模型可以得到更好地體現(xiàn)。首先,最重要的是應(yīng)該有多個(gè)視圖對(duì)應(yīng)一個(gè)模型的能力。在目前用戶(hù)需求的快速變化下,可能有多種方式訪(fǎng)問(wèn)應(yīng)用的要求。例如,訂單模型可能有本系統(tǒng)的訂單,也有網(wǎng)上訂單,或者其他系統(tǒng)的訂單,但對(duì)于訂單的處理都是一樣,也就是說(shuō)訂單的處理是一致的。按MVC設(shè)計(jì)模式,一個(gè)訂單模型以及多個(gè)視圖即可解決問(wèn)題。這樣減少了代碼的復(fù)制,即減少了代碼的維護(hù)量,一旦模型發(fā)生改變,也易于維護(hù)。其次,由于模型返回的數(shù)據(jù)不帶任何顯示格式,因而這些模型也可直接應(yīng)用于接口的使用。再次,由于一個(gè)應(yīng)用被分離為三層,因此有時(shí)改變其中的一層就能滿(mǎn)足應(yīng)用的改變。一個(gè)應(yīng)用的業(yè)務(wù)流程或者業(yè)務(wù)規(guī)則的改變只需改動(dòng)MVC的模型層。第三,控制層的概念也很有效,由于它把不同的模型和不同的視圖組合在一起完成不同的請(qǐng)求,因此,控制層可以說(shuō)是包含了用戶(hù)請(qǐng)求權(quán)限的概念。最后,它還有利于軟件工程化管理。由于不同的層各司其職,每一層不同的應(yīng)用具有某些相同的特征,有利于通過(guò)工程化、工具化產(chǎn)生管理程序代碼。2、MVC的優(yōu)點(diǎn)3、MVC的不足(1)增加了系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)的復(fù)雜性。對(duì)于簡(jiǎn)單的界面,嚴(yán)格遵循MVC,使模型、視圖與控制器分離,會(huì)增加結(jié)構(gòu)的復(fù)雜性,并可能產(chǎn)生過(guò)多的更新操作,降低運(yùn)行效率。(2)視圖與控制器間的過(guò)于緊密的連接。視圖與控制器是相互分離,但確實(shí)聯(lián)系緊密的部件,視圖沒(méi)有控制器的存在,其應(yīng)用是很有限的,反之亦然,這樣就妨礙了他們的獨(dú)立重用。(3)視圖對(duì)模型數(shù)據(jù)的低效率訪(fǎng)問(wèn)。依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)。對(duì)未變化數(shù)據(jù)的不必要的頻繁訪(fǎng)問(wèn),也將損害操作性能。(4)目前,一般高級(jí)的界面工具或構(gòu)造器不支持MVC模式。改造這些工具以適應(yīng)MVC需要和建立分離的部件的代價(jià)是很高的,從而造成使用MVC的困難。3、MVC的不足MVC框架發(fā)展過(guò)程(1)、Model1早期的JSP規(guī)范提出了兩種用JSP技術(shù)建立應(yīng)用程序的方式。這兩種方式在術(shù)語(yǔ)中分別稱(chēng)作JSPModel1和JSPModel2,它們的本質(zhì)區(qū)別在于處理批量請(qǐng)求的位置不同。在Model1體系中,如圖所示,jsp頁(yè)面獨(dú)自響應(yīng)請(qǐng)求并將處理結(jié)果返回客戶(hù)。這里仍然存在表達(dá)與內(nèi)容的分離,因?yàn)樗缘臄?shù)據(jù)存取都是由bean來(lái)完成的。盡管Model1體系十分適合簡(jiǎn)單應(yīng)用的需要,它卻不能滿(mǎn)足復(fù)雜的大型應(yīng)用程序的實(shí)現(xiàn)。不加選擇地隨意運(yùn)用Model1,會(huì)導(dǎo)致JSP頁(yè)內(nèi)被嵌入大量的腳本片段或Java代碼,特別是當(dāng)需要處理的請(qǐng)求量很大時(shí),情況更為嚴(yán)重。盡管這對(duì)于Java程序員來(lái)說(shuō)可能不是什么大問(wèn)題,但如果JSP頁(yè)面是由網(wǎng)頁(yè)設(shè)計(jì)人員開(kāi)發(fā)并維護(hù)的――通常這是開(kāi)發(fā)大型項(xiàng)目的規(guī)范――這就確實(shí)是個(gè)問(wèn)題了。從根本上講,將導(dǎo)致角色定義不清和職責(zé)分配不明,給項(xiàng)目管理帶來(lái)不必要的麻煩。工作內(nèi)同包括:客戶(hù)將請(qǐng)求提交給JSP。JSP調(diào)用JavaBean組件進(jìn)行數(shù)據(jù)處理。如果數(shù)據(jù)處理需要數(shù)據(jù)庫(kù)支持,則使用JDBC操作數(shù)據(jù)庫(kù)數(shù)據(jù)。當(dāng)數(shù)據(jù)返回給JSP時(shí),JSP組織響應(yīng)數(shù)據(jù),返回給客戶(hù)端。MVC框架發(fā)展過(guò)程(2)、Model2Model2體系結(jié)構(gòu),如圖所示,是一種把JSP與servlets聯(lián)合使用來(lái)實(shí)現(xiàn)動(dòng)態(tài)內(nèi)容服務(wù)的方法。它吸取了兩種技術(shù)各自的突出優(yōu)點(diǎn),用JSP生成表達(dá)層的內(nèi)容,讓servlets完成深層次的處理任務(wù)。在Model2中,servlets充當(dāng)控制者的角色,負(fù)責(zé)管理對(duì)請(qǐng)求的處理,創(chuàng)建JSP頁(yè)需要使用的bean和對(duì)象,同時(shí)根據(jù)用戶(hù)的動(dòng)作決定把那個(gè)JSP頁(yè)傳給請(qǐng)求者。特別要注意,在JSP頁(yè)內(nèi)沒(méi)有處理邏輯;它僅負(fù)責(zé)檢索原先由servlets創(chuàng)建的對(duì)象或beans,從servlet中提取動(dòng)態(tài)內(nèi)容插入靜態(tài)模板。在我看來(lái),這是一種有代表性的方法,它清晰地分離了表達(dá)和內(nèi)容,明確了角色的定義以及開(kāi)發(fā)者與網(wǎng)頁(yè)設(shè)計(jì)者的分工。事實(shí)上,項(xiàng)目越復(fù)雜,使用Model2體系結(jié)構(gòu)的好處就越大。Model2也是目前教材中所使用的開(kāi)發(fā)模式。(2)、Model2(3)、Struts模型Struts工作流程如圖所示??蛻?hù)提交請(qǐng)求信息。中央控制器類(lèi)(ActionServlet)通過(guò)讀取配置文件struts-config.xml),把表單數(shù)據(jù)填充到Formbean中。中央控制器將Http請(qǐng)求分發(fā)到相應(yīng)的Action處理。Action類(lèi)調(diào)用Model組件進(jìn)行數(shù)據(jù)處理。中央控制器轉(zhuǎn)發(fā)相應(yīng)的Http請(qǐng)求到相應(yīng)的View組件。View組件將響應(yīng)信息返回給客戶(hù)端。(3)、Struts模型2、主流MVC框架(1)、StrutsStruts是Apache軟件基金下Jakarta項(xiàng)目的一部分。Struts框架的主要架構(gòu)設(shè)計(jì)和開(kāi)發(fā)者是CraigR.McClanahan。Struts是目前JavaWebMVC框架中不爭(zhēng)的王者。經(jīng)過(guò)長(zhǎng)達(dá)五年的發(fā)展,Struts已經(jīng)逐漸成長(zhǎng)為一個(gè)穩(wěn)定、成熟的框架,并且占有了MVC框架中最大的市場(chǎng)份額。但是Struts某些技術(shù)特性上已經(jīng)落后于新興的MVC框架。面對(duì)SpringMVC、Webwork2這些設(shè)計(jì)更精密,擴(kuò)展性更強(qiáng)的框架,Struts受到了前所未有的挑戰(zhàn)。但站在產(chǎn)品開(kāi)發(fā)的角度而言,Struts仍然是最穩(wěn)妥的選擇。Struts有一組相互協(xié)作的類(lèi)(組件)、Serlvet以及jsptaglib組成?;趕truts構(gòu)架的web應(yīng)用程序基本上符合JSPModel2的設(shè)計(jì)標(biāo)準(zhǔn),可以說(shuō)是MVC設(shè)計(jì)模式的一種變化類(lèi)型。根據(jù)上面對(duì)framework的描述,我們很容易理解為什么說(shuō)Struts是一個(gè)webframwork,而不僅僅是一些標(biāo)記庫(kù)的組合。但Struts也包含了豐富的標(biāo)記庫(kù)和獨(dú)立于該框架工作的實(shí)用程序類(lèi)。Struts有其自己的控制器(Controller),同時(shí)整合了其他的一些技術(shù)去實(shí)現(xiàn)模型層(Model)和視圖層(View)。在模型層,Struts可以很容易的與數(shù)據(jù)訪(fǎng)問(wèn)技術(shù)相結(jié)合,包括EJB,JDBC和ObjectRelationBridge。在視圖層,Struts能夠與JSP,VelocityTemplates,XSL等等這些表示層組件想結(jié)合。2、主流MVC框架Strutsframework是MVC模式的體現(xiàn),分別從模型、視圖、控制來(lái)介紹struts的體系結(jié)構(gòu)(Architecture)。視圖(View)主要由JSP建立,Struts自身包含了一組可擴(kuò)展的自定義標(biāo)簽庫(kù)(TagLib),可以簡(jiǎn)化創(chuàng)建用戶(hù)界面的過(guò)程。目前包括:BeanTags,HTMLTags,LogicTags,NestedTags,TemplateTags這幾個(gè)Taglib。模型(Model)模型主要是表示一個(gè)系統(tǒng)的狀態(tài)。在Struts中,系統(tǒng)的狀態(tài)主要有ActiomFormBean體現(xiàn),一般情況下,這些狀態(tài)是非持久性的。如果需要將這些狀態(tài)轉(zhuǎn)化為持久性數(shù)據(jù)存儲(chǔ),Struts本身也提供了Utitle包,可以方便的與數(shù)據(jù)庫(kù)操作??刂破鳎–ontroller)在Strutsframework中,Controller主要是ActionServlet,但是對(duì)于業(yè)務(wù)邏輯的操作則主要由Action、ActionMapping、ActionForward這幾個(gè)組件協(xié)調(diào)完成。其中,Action扮演了真正的業(yè)務(wù)邏輯的實(shí)現(xiàn)者,而ActionMapping和ActionForward則指定了不同業(yè)務(wù)邏輯或流程的運(yùn)行方向。Strutsframework是MVC模式的體現(xiàn),分別從(2)、SpringSpring是一個(gè)開(kāi)源框架,是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring使使用基本的JavaBeans來(lái)完成以前只可能由EJB完成的事情變得可能了。然而,Spring的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)輕量的控制反轉(zhuǎn)和面向切面的容器框架,包含以下四個(gè)方面:輕量完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開(kāi)銷(xiāo)也是微不足道的。Spring是非侵入式的,從大小與開(kāi)銷(xiāo)兩方面而言Spring都是輕量的??刂品崔D(zhuǎn)Spring通過(guò)一種稱(chēng)作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,對(duì)象被動(dòng)地傳遞它們的依賴(lài)而不是自己創(chuàng)建或者查找依賴(lài)對(duì)象。面向切面Spring包含對(duì)面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)服務(wù)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只完成業(yè)務(wù)邏輯,并不負(fù)責(zé)其它的系統(tǒng)關(guān)注點(diǎn),例如日志或事物支持。(2)、Spring容器Spring包含和管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器??梢耘渲媚愕拿總€(gè)bean如何被創(chuàng)建,基于一個(gè)配置原形為bean創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例以及它們是如何相互關(guān)聯(lián)的。Spring的使用完全區(qū)別于傳統(tǒng)的龐大而笨重的重量級(jí)EJB容器,更加輕量與方便。框架Spring是由簡(jiǎn)單的組件配置和組合復(fù)雜的應(yīng)用成為可能。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能如事務(wù)管理、持久性框架集成等,程序員只負(fù)責(zé)應(yīng)用邏輯的開(kāi)發(fā)。所有Spring的這些特征使得編程能夠更加清晰、可管理、并且更易于測(cè)試。容器請(qǐng)嘗試設(shè)計(jì)商品管理模塊、訂單管理模塊的MVC模式架構(gòu),以類(lèi)關(guān)系圖形式體現(xiàn)。請(qǐng)嘗試設(shè)計(jì)商品管理模塊、訂單管理模塊的MVC模式架構(gòu),以類(lèi)關(guān)任務(wù)7.2實(shí)現(xiàn)MVC模式下商品信息添加任務(wù)7.2實(shí)現(xiàn)MVC模式下商品信息添加對(duì)于剛剛開(kāi)始工作的小J,要先從簡(jiǎn)單一點(diǎn)的功能上手——實(shí)現(xiàn)MVC模式下商品信息添加。對(duì)于剛剛開(kāi)始工作的小J,要先從簡(jiǎn)單一點(diǎn)的功能上手——實(shí)現(xiàn)MV在MVC模式下,實(shí)現(xiàn)商品信息的添加。用戶(hù)輸入商品的相關(guān)信息后,將商品信息添加到數(shù)據(jù)庫(kù)中。在MVC模式下,實(shí)現(xiàn)商品信息的添加。用戶(hù)輸入商品的相關(guān)信息后知識(shí)目標(biāo):掌握MVC模式下更新數(shù)據(jù)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn);掌握Servlet控制層具體實(shí)現(xiàn);掌握更新數(shù)據(jù)庫(kù)數(shù)據(jù)的封裝方法;技能目標(biāo):能應(yīng)用MVC設(shè)計(jì)模式實(shí)現(xiàn)向數(shù)據(jù)庫(kù)寫(xiě)數(shù)據(jù)的功能。知識(shí)目標(biāo):在本任務(wù)中通過(guò)MVC來(lái)實(shí)現(xiàn)商品的添加,即控制器從用戶(hù)接受請(qǐng)求,將模型和視圖匹配在一起,共同完成用戶(hù)的請(qǐng)求。商品添加時(shí)序圖如下圖所示,管理員向ProductServlet發(fā)送添加商品請(qǐng)求,由ProductServlet獲取商品信息相關(guān)參數(shù),并通過(guò)ProductDao完成對(duì)數(shù)據(jù)的添加,并將返回的結(jié)果發(fā)送給用戶(hù)。實(shí)體類(lèi):Product.java數(shù)據(jù)庫(kù)操作接口類(lèi):ProductDao.java數(shù)據(jù)庫(kù)操作實(shí)現(xiàn)類(lèi):ProductDaoImpl.java控制類(lèi):ProductServlet.java在本任務(wù)中通過(guò)MVC來(lái)實(shí)現(xiàn)商品的添加,即控制器從打開(kāi)ProductDao.java文件,添加如下代碼:publicbooleanadd(Productp);在ProductDao接口中添加商品添加方法add()。打開(kāi)ProductDao.java文件,添加如下代碼:在Pr1.publicbooleanadd(Productp){2. //TODOAuto-generatedmethodstub3. sql="insertintoproduct_info(code,name,type,brand,pic,num,price,sale,intro)values(?,?,?,?,?,?,?,?,?)";4. try{5. psmt=con.prepareStatement(sql);6. psmt.setString(1,p.getCode());7. psmt.setString(2,p.getName());8. psmt.setString(3,p.getType());9. psmt.setString(4,p.getBrand());10. psmt.setString(5,p.getPic());11. psmt.setDouble(6,p.getNum());12. psmt.setDouble(7,p.getPrice());13. psmt.setDouble(8,p.getSale());添加商品方法的實(shí)現(xiàn)。打開(kāi)ProductDaoImpl.java文件,在文件中添加如下代碼:1.publicbooleanadd(Productp14.psmt.setString(9,p.getIntro());15. row=psmt.executeUpdate();16. }catch(SQLExceptione){17. e.printStackTrace();18. }19. returnrow>0?true:false;20.}程序說(shuō)明:第3行:配置SQL語(yǔ)句插入一條新記錄至商品表product_info;第5-14行:設(shè)置SQL語(yǔ)句參數(shù);第15行:執(zhí)行SQL語(yǔ)句,返回執(zhí)行結(jié)果;第16-18行:異常處理。第19行:如果添加成功則返回true,否則返回false;14.psmt.setString(9,p.getIntr右擊包c(diǎn)om.digitalweb.servlet,在彈出的菜單中選擇new->servlet,在彈出的對(duì)話(huà)框中輸入servlet名稱(chēng)為ProductServlet,設(shè)置如圖所示。創(chuàng)建商品管理控制類(lèi)ProductServlet。右擊包c(diǎn)om.digitalweb.servlet,在彈出的6.點(diǎn)擊“next”按鈕,進(jìn)入到XML生成向?qū)?duì)話(huà)框,將Servlet/JSPMappingURL路徑修改為“/ProductServlet”,點(diǎn)擊“Finish”,完成文件的創(chuàng)建。6.點(diǎn)擊“next”按鈕,進(jìn)入到XML生成向?qū)?duì)話(huà)框,將Se自動(dòng)生成代碼如下:38. packagecom.digitalweb.servlet;39. importjava.io.IOException;40. importjava.io.PrintWriter;41. importjavax.servlet.ServletException;42. importjavax.servlet.http.HttpServlet;43. importjavax.servlet.http.HttpServletRequest;44. importjavax.servlet.http.HttpServletResponse;45. publicclassProductServletextendsHttpServlet{46. /**47. *ThedoGetmethodoftheservlet.<br>48. *49. *Thismethodiscalledwhenaformhasitstagvaluemethodequalstoget.50. *51. *@paramrequesttherequestsendbytheclienttotheserver52. *@paramresponsetheresponsesendbytheservertotheclient53. *@throwsServletExceptionifanerroroccurred54. *@throwsIOExceptionifanerroroccurred55. */自動(dòng)生成代碼如下:publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)57. throwsServletException,IOException{58. response.setContentType("text/html");59. PrintWriterout=response.getWriter(); out60. .println("<!DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.01Transitional//EN\">");61. out.println("<HTML>");62. out.println("<HEAD><TITLE>AServlet</TITLE></HEAD>");63. out.println("<BODY>");64. out.print("Thisis");65. out.print(this.getClass());66. out.println(",usingtheGETmethod");67. out.println("</BODY>");68. out.println("</HTML>");69. out.flush();70. out.close();71. }publicvoiddoGet(HttpServletR/**73. *ThedoPostmethodoftheservlet.<br>74. *75. *Thismethodiscalledwhenaformhasitstagvaluemethodequalstopost.76. *77. *@paramrequesttherequestsendbytheclienttotheserver78. *@paramresponsetheresponsesendbytheservertotheclient79. *@throwsServletExceptionifanerroroccurred80. *@throwsIOExceptionifanerroroccurred81. */82. publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)83. throwsServletException,IOException{84. response.setContentType("text/html");85. PrintWriterout=response.getWriter();/** out.println("<!DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.01Transitional//EN\">");87. out.println("<HTML>");88. out.println("<HEAD><TITLE>AServlet</TITLE></HEAD>");89. out.println("<BODY>");90. out.print("Thisis");91. out.print(this.getClass());92. out.println(",usingthePOSTmethod");93. out.println("</BODY>");94. out.println("</HTML>");95. out.flush();96. out.close();97. }98. }程序說(shuō)明:第19-37行:處理GET請(qǐng)求的相關(guān)代碼。第45-59行:處理POST請(qǐng)求的相關(guān)代碼。 out.println("<!DOCTYPEHTMLP7.修改doGet()方法代碼。刪除第21-33行間代碼,并添加代碼:doPost(request,response);修改后的doGet()代碼如下所示:1.publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)2. throwsServletException,IOException{3. doPost(request,response);4. }7.修改doGet()方法代碼。刪除第21-33行間代碼,并8. 修改doPost()方法代碼。刪除第49-59行自動(dòng)生成的代碼,修改doPost()代碼如下:1.publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)2. throwsServletException,IOException{3. response.setContentType("text/html;charset=UTF-8");4. PrintWriterout=response.getWriter();5. ProductDaoImplpdi=newProductDaoImpl();6. StringnextPage="ProductServlet?flag=list";7. HashMap<String,String[]>map=(HashMap<String,String[]>)request.getParameterMap();8. HttpSessionsession=request.getSession();9. booleanflag=true;10. if(map.get("flag")[0].equals("add")){11. Productp=newProduct();8. 修改doPost()方法代碼。12. p.setBrand(map.get("brand")[0]);13. p.setCode(map.get("code")[0]);14. Stringintro=map.get("intro")[0];15. p.setIntro(map.get("intro")[0]);16. p.setName(map.get("name")[0]);17. p.setNum(Integer.parseInt(map.get("num")[0]));18. p.setPic(map.get("pic")[0]);19. p.setPrice(Double.parseDouble(map.get("price")[0]));20. p.setSale(Double.parseDouble(map.get("sale")[0]));21. p.setType(map.get("type")[0]);22. flag=pdi.add(p); 23. }24. if(flag)25. response.sendRedirect(nextPage);26. }12. p.setBrand(map.get("brand<formid="add_news"name="add_news"method="post"action="../ProductServlet">程序說(shuō)明:action屬性指表單提交時(shí)跳轉(zhuǎn)路徑,因?yàn)楸卷?yè)面在admin文件夾下,要跳轉(zhuǎn)至ProductServlet則需要使用“../ProductServlet”。設(shè)置商品添加頁(yè)面表單提交跳轉(zhuǎn)路徑。設(shè)置隱藏參數(shù),操作標(biāo)識(shí)符flag。<inputtype="hidden"name="flag"value="add">程序說(shuō)明:

添加隱藏域,當(dāng)表單提交至Servlet時(shí),傳遞參數(shù)flag的值為add,即要求Servlet完成商品添加操作。<formid="add_news"name="add_啟動(dòng)tomcat,運(yùn)行商品添加頁(yè)面add_product.html,輸入商品信息后,點(diǎn)擊保存即完成商品的添加。啟動(dòng)tomcat,運(yùn)行商品添加頁(yè)面add_product.h任務(wù)7.3實(shí)現(xiàn)MVC模式下商品信息顯示任務(wù)7.3實(shí)現(xiàn)MVC模式下商品信息顯示對(duì)于剛剛開(kāi)始工作的小J,要先從簡(jiǎn)單一點(diǎn)的功能上手——實(shí)現(xiàn)MVC模式下商品信息顯示。對(duì)于剛剛開(kāi)始工作的小J,要先從簡(jiǎn)單一點(diǎn)的功能上手——實(shí)現(xiàn)MV

商品的列表顯示在電子商務(wù)網(wǎng)站后臺(tái)管理中是必不可少的一個(gè)主要界面,除了可以羅列所有商品以外,還可以在它的基礎(chǔ)上進(jìn)一步實(shí)現(xiàn)商品查詢(xún)、商品修改、商品刪除功能。在本任務(wù)實(shí)現(xiàn)后臺(tái)登錄用戶(hù)查看商品信息的功能,該功能使用MVC模式進(jìn)行實(shí)現(xiàn),商品信息管理列表頁(yè)面(list_product.jsp)的頁(yè)面效果如圖所示。商品的列表顯示在電子商務(wù)網(wǎng)站后臺(tái)管理中是必不可少知識(shí)目標(biāo):進(jìn)一步掌握MVC模式下數(shù)據(jù)讀取的設(shè)計(jì)與實(shí)現(xiàn);掌握Servlet控制層具體實(shí)現(xiàn);掌握從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)的封裝方法;掌握J(rèn)SP顯示層數(shù)據(jù)處理的方法。技能目標(biāo):能應(yīng)用MVC設(shè)計(jì)模式實(shí)現(xiàn)向數(shù)據(jù)庫(kù)讀數(shù)據(jù)的功能。知識(shí)目標(biāo):本任務(wù)在MVC模式下來(lái)實(shí)現(xiàn)商品信息的列表顯示,其中包括模型“Product”、控制器“ProductServlet”和視圖,即商品信息管理頁(yè)面“admin/list_product.jsp”。與前一個(gè)任務(wù)中添加商品功能的實(shí)現(xiàn)思路相似,控制器作為模型層與視圖層之間溝通的橋梁,分派用戶(hù)請(qǐng)求并選擇恰當(dāng)?shù)囊晥D用以顯示。商品信息顯示的時(shí)序圖如下圖所示,管理員向ProductServlet發(fā)送添加商品請(qǐng)求,由ProductServlet獲取商品信息相關(guān)參數(shù),并通過(guò)ProductDao完成對(duì)數(shù)據(jù)的添加,并將返回的結(jié)果發(fā)送給用戶(hù)。實(shí)體類(lèi):Product.java數(shù)據(jù)庫(kù)操作接口類(lèi):ProductDao.java數(shù)據(jù)庫(kù)操作實(shí)現(xiàn)類(lèi):ProductDaoImpl.java控制類(lèi):ProductServlet.java本任務(wù)在MVC模式下來(lái)實(shí)現(xiàn)商品信息的列表顯示,其中包括模型“在“com.digitalweb.model”包中創(chuàng)建Product實(shí)體類(lèi),Product類(lèi)表示商品信息,它的類(lèi)結(jié)構(gòu)如圖所示。定義數(shù)據(jù)模型—?jiǎng)?chuàng)建Product實(shí)體類(lèi)。在“com.digitalweb.model”包中創(chuàng)建Pro在接口層的ProductDao接口中定義獲取商品列表方法“l(fā)ist()”。打開(kāi)ProductDao.java文件,添加如下代碼:1.importjava.util.List;2.importcom.digitalweb.model.Product;3.publicinterfaceProductDao{4.……5.publicbooleanList<Product>(Productp);6.……7.}定義數(shù)據(jù)模型—定義接口層方法list()。在接口層的ProductDao接口中定義獲取商品1.publicclassProductDaoImplextendsSuperOprimplementsProductDao{2. publicbooleanadd(Productp){3. ……4. }5. publicArrayList<Product>list(){6. sql="select*fromproduct_infowherestatus=1";7. ArrayList<Product>list=newArrayList<Product>();8. try{9. psmt=con.prepareStatement(sql);10. rs=psmt.executeQuery();11. while(rs.next()){12. Productp=newProduct();13. p.setBrand(rs.getString("brand"));14. p.setCode(rs.getString("code"));定義數(shù)據(jù)模型—編寫(xiě)數(shù)據(jù)操作層方法list()。1.publicclassProductDaoImpl15. p.setId(rs.getInt("id"));16. p.setIntro(rs.getString("intro"));17. p.setName(rs.getString("name"));18. p.setNum(rs.getInt("num"));19. p.setPic(rs.getString("pic"));20. p.setPrice(rs.getDouble("price"));21. p.setSale(rs.getDouble("sale"));22. p.setStatus(1);23. p.setType(rs.getString("type"));24. list.add(p);}}catch(SQLExceptione){27. e.printStackTrace();28. }29. returnlist;30. }31. }15. p.setId(rs.getInt("id"));在上一任務(wù)創(chuàng)建的ProductServlet的doPost()中,實(shí)現(xiàn)獲取商品列表功能,將數(shù)據(jù)保存至session對(duì)象中,具體代碼如下:1. publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)2. throwsServletException,IOException{3. ……4. ProductDaoImplpdi=newProductDaoImpl();5. StringnextPage="ProductServlet?flag=list";6. HashMap<String,String[]>map=(HashMap<String,String[]>)request.getParameterMap();7. HttpSessionsession=request.getSession();8. booleanflag=true;9. if(map.get("flag")[0].equals("add")){10. ……//添加商品11. }12. elseif(map.get("flag")[0].equals("list")){13. session.setAttribute("productList",pdi.list());//調(diào)用ProductDaoImpl類(lèi)list()方法14. nextPage="admin/list_product.jsp";//頁(yè)面跳轉(zhuǎn)15. }}控制層實(shí)現(xiàn)—編寫(xiě)ProductServlet。在上一任務(wù)創(chuàng)建的ProductServlet的doPost(1.<tablewidth="100%"border="0"cellspacing="0"cellpadding="0">2. <tr>3. <tdwidth="6%">選擇</td>4. <tdwidth="8%">序號(hào)</td>5. <tdwidth="30%">商品名稱(chēng)</td>6. <tdwidth="10%">商品類(lèi)型</td>7. <tdwidth="10%">價(jià)格</td>8. <tdwidth="10%">促銷(xiāo)</td>9. <tdwidth="10%">庫(kù)存</td>10. <tdwidth="8%">編輯</td>11. <tdwidth="8%">刪除</td>12. </tr>13. <%14. List<Product>productList=(List<Product>)session.getAttribute("productList");15. if(productList!=null){16. for(Productp:productList){17. Productp=productList.get(i);18. %>視圖層設(shè)實(shí)現(xiàn)—編輯商品信息列表list_product.jsp頁(yè)面。1.<tablewidth="100%"border=19.<tr>20. <tdheight="18">21. <inputname="checkbox"type="checkbox"value="checkbox"/>22. </td>23. <tdheight="18"><%=p.getCode()%></td>24. <tdheight="18"><%=p.getName()%></td>26. <tdheight="18"><%=p.getType()%></td>27. <tdheight="18"><%=p.getPrice()%></td>28. <tdheight="18"><%=p.getSale()%></td>29. <tdheight="18"><%=p.getNum()%></td>30. <tdheight="18"><imgsrc="tab/images/update.gif"width="9"height="9"/>[31. <ahref="update_product.jsp?id=<%=p.getId()%>">編輯</a>]</td>32. <tdheight="18"><imgsrc="tab/images/delete.gif"width="9"height="9"/>[33. <ahref="../ProductServlet?flag=delete&id=<%=p.getId()%>">刪除</a>]</td>34. </tr>35. <%}36. }%>37.</table>19.<tr>修改上述HTML代碼中<%%>中的Java代碼,可以將商品信息分頁(yè)顯示。Java代碼如下:<%List<Product>productList=(List<Product>)session.getAttribute("productList");intall=0;intcurPage=1;intpageTotal=0;intpageCount=6;if(productList!=null){ all=productList.size(); pageTotal=(all%pageCount)==0?all/pageCount:(all/pageCount+1); StringstrCurPage=request.getParameter("page"); if(strCurPage!=null){ curPage=Integer.parseInt(strCurPage); } intstart=(cur1)*pageCount; intend=curPage*pageCount>all?all:curPage*pageCount; for(inti=start;i<end;i++){ Productp=productList.get(i);%>修改上述HTML代碼中<%%>中的Java代碼,可以將商商品信息列表底部的分頁(yè)按鈕功能實(shí)現(xiàn)代碼:<tr> <tdwidth="25%"height="29"nowrap="nowrap">共<%=all%>條紀(jì)錄,當(dāng)前第<%=curPage%>/<%=pageTotal%>頁(yè),每頁(yè)<%=pageCount%>條紀(jì)錄</td>…… <tablewidth="352"height="20"bord

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論