Java分布式處理技術(shù)_第1頁
Java分布式處理技術(shù)_第2頁
Java分布式處理技術(shù)_第3頁
Java分布式處理技術(shù)_第4頁
Java分布式處理技術(shù)_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Java分布式處理技術(shù)(RMI,JDNI) 1.1 RMI的基本概念1.1.1 什么是RMIRMI(Remote Method Invocation)遠(yuǎn)程方法調(diào)用是一種計算機(jī)之間對象互相調(diào)用對方函數(shù),啟動對方進(jìn)程的一種機(jī)制,使用這種機(jī)制,某一臺計算機(jī)上的對象在調(diào)用另外一臺計算機(jī)上的方法時,使用的程序語法規(guī)則和在本地機(jī)上對象間的方法調(diào)用的語法規(guī)則一樣。1.1.2 RMI的用途1、 分布式體系結(jié)構(gòu)我們?yōu)槭裁匆褂梅植际接嬎隳兀?#216; 當(dāng)我們想與多個用戶或客戶機(jī)共享一個中央資源(如一個數(shù)據(jù)庫)時,就會使用分布式計算。Ø 分布

2、式計算用來利用多個系統(tǒng)的組合計算能力,以便比在單個系統(tǒng)上更有效或更快地解決問題??梢杂枚喾N方法配置多個計算機(jī)系統(tǒng)以共享處理,包括共享內(nèi)存、共享磁盤或只是共享一條公共通信通道。最新的技術(shù)允許物理上相隔很遠(yuǎn)的系統(tǒng)能夠在處理計算問題時協(xié)同工作。關(guān)于利用計算能力這一主題,因特網(wǎng)及伴隨的通信協(xié)議 TCP/IP 的 出現(xiàn)已使無數(shù)的計算機(jī)系統(tǒng)史無前例地連接起來。對一些應(yīng)用程序來說,能夠利用如此多的計算功能來解決問題是令人滿意的。甚至更吸引人的是,大多數(shù)計算機(jī)系 統(tǒng)都有充足的空閑時間,可以幫助解決其它問題。將來,網(wǎng)格計算會利用分布式計算能力進(jìn)行出售,這與電力行業(yè)出售電能非常相似。2、

3、60;Java分布式對象編程技術(shù)RMI是Enterprise JavaBeans的支柱,是建立分布式Java應(yīng)用程序的方便途徑。只要按照RMI規(guī)則設(shè)計程序,可以不必再過問在RMI之下的網(wǎng)絡(luò)細(xì)節(jié)了,如:TCP和Socket等等。任意兩臺計算機(jī)之間的通訊完全由RMI負(fù)責(zé)。調(diào)用遠(yuǎn)程計算機(jī)上的對象就像本地對象一樣方便。1.1.3 RMI應(yīng)用程序分類依據(jù)RMI應(yīng)用程序各部分職責(zé),可對應(yīng)用程序進(jìn)行如下分類:Ø 服務(wù)器程序:服務(wù)器程序?qū)?chuàng)建多個遠(yuǎn)程對象,并使每個對象能夠被引用。等待客戶端調(diào)用創(chuàng)建好的遠(yuǎn)程對象上的方法。Ø 客戶端程序:從服務(wù)端程序中得到一個或多

4、個遠(yuǎn)程對象的引用??蛻舳四苡么艘谜{(diào)用遠(yuǎn)程對象上的方法。Ø 對等計算程序:雙方地位相等,互為對方的服務(wù)器和客戶端。1.2 創(chuàng)建RMI應(yīng)用程序步驟1、 定義遠(yuǎn)程接口在 Java 中,遠(yuǎn)程對象是實現(xiàn)遠(yuǎn)程接口的類的實例, 遠(yuǎn)程接口聲明每個要遠(yuǎn)程調(diào)用的方法。在需要創(chuàng)建一個遠(yuǎn)程對象的時候,我們通過傳遞一個接口來隱藏基層的實施細(xì)節(jié),客戶通過接口句柄發(fā)送消息即可。遠(yuǎn)程接口具有如下特點(diǎn):Ø 遠(yuǎn)程接口必須為public屬性。如果不這樣,除非客戶端與遠(yuǎn)程接口在同一個包內(nèi),否則當(dāng)試圖裝入實現(xiàn)該遠(yuǎn)程接口的遠(yuǎn)程對象時,調(diào)用會得到錯

5、誤結(jié)果。Ø 遠(yuǎn)程接口必須擴(kuò)展接口java.rmi.Remote。Ø 除與應(yīng)用程序本身特定的例外之外,遠(yuǎn)程接口中的每個方法都必須在自己的throws從句中聲明java.rmi.RemoteException。(或 RemoteException 的父類)。代碼范例1package com.itjob;import java.rmi.*;public interface RmiSample extends Remotepublic int sum(int a,int b) throws RemoteException;2、 實現(xiàn)

6、遠(yuǎn)程接口遠(yuǎn)程對象實現(xiàn)類必須擴(kuò)展遠(yuǎn)程對象java.rmi.UnicastRemoteObject類, 并實現(xiàn)所定義的遠(yuǎn)程接口。遠(yuǎn)程對象的實現(xiàn)類中包含實現(xiàn)每個遠(yuǎn)程接口所指定的遠(yuǎn)程方法的代碼。這個類也可以含有附加的方法,但客戶只能使用遠(yuǎn)程接口中的方 法。因為客戶是指向接口的一個句柄,而不是它的哪個類。必須為遠(yuǎn)程對象定義構(gòu)造函數(shù),即使只準(zhǔn)備定義一個默認(rèn)構(gòu)造函數(shù),用它調(diào)用基礎(chǔ)類構(gòu)造函數(shù)。因為基礎(chǔ) 類構(gòu)造函數(shù)可能會拋出java.rmi.RemoteException,所以即使別無它用必須拋出java.rmi.RemoteException例外。代碼范例2package com.itjob.rmi;impo

7、rt java.rmi.*;import java.rmi.server.*;import com.itjob.RmiSample ;/*遠(yuǎn)程接口實現(xiàn)類,繼承了UnicastRemoteObject并實現(xiàn)了RmiSample遠(yuǎn)程接口*/public class RmiSampleImpl extends UnicastRemoteObject implements RmiSample/覆蓋默認(rèn)構(gòu)造函數(shù)并拋出RemoteExceptionpublic RmiSampleImpl() throws RemoteExceptionsuper();/所有遠(yuǎn)程實現(xiàn)方法必須拋出RemoteExceptio

8、npublic int sum(int a,int b) throws RemoteExceptionreturn a+b;3、 編寫服務(wù)器類包含 main 方法的類可以是實現(xiàn)類自身,也可以完全是另一個類。下面通過RmiSampleServer來創(chuàng)建一個遠(yuǎn)程對象的實例,并通過java.rmi.registry.LocateRegistry類的createRegistry 方法從指定端口號啟動注冊服務(wù)程序,也可以通過執(zhí)行 rmiregistry 命令啟動注冊服務(wù)程序,注冊服務(wù)程序的缺省運(yùn)行端口為 1099。代碼范例3packa

9、ge com.itjob.rmi;import java.rmi.*;import java.rmi.registry.*;public class RmiSampleServerpublic static void main(String args)/*創(chuàng)建和安裝一個安全管理器,令其支持RMI.作為Java開發(fā)包的一部分*適用于RMI唯一一個是RMISecurityManager.*if(System.getSecurityManager() = null) System.setSecurityManager(new RMISecurityManager();*/tryLocateRegis

10、try.createRegistry(8808);RmiSampleImpl server=new RmiSampleImpl();Naming.rebind("/localhost:8808/SAMPLE-SERVER",server);System.out.println ("遠(yuǎn)程對象注冊成功,RMI服務(wù)已經(jīng)啟動,等待客戶端調(diào)用.");catch(.MalformedURLException me)System.out.println ("Malformed URL:"+me.toString();catch(RemoteExce

11、ption re)System.out.println ("Remote exception:"+re.toString();catch(AlreadyBoundException abe)System.out.println ("(AlreadyBound exception:"+ abe.toString();Ø 代碼范例3中將將遠(yuǎn)程對象名字綁定到對遠(yuǎn)程對象的引用上:LocateRegistry.createRegistry(8808);指定本RMI服務(wù)程序不使用默認(rèn)端口1099,而是使用自己指定的端口8808

12、。Naming.rebind("/localhost:8808/SAMPLE-SERVER" , Server);將遠(yuǎn)程對象在服務(wù)器上注冊并指定了將查找遠(yuǎn)程對象引用的URL,URL格式為/host:port/name。其中 host 是注冊表所在的主機(jī)(遠(yuǎn)程或本地),port 是注冊表接受調(diào)用的端口號,name 是未經(jīng)注冊表解釋的簡單字符串。host 和 port 兩者都是可選項。如果省略了host,則主機(jī)默認(rèn)為本地主機(jī)。如果省略了 port,則端口默認(rèn)為 1099,該端口是 

13、;RMI 的注冊表 rmiregistry使用的“著名”端口。代碼范例3的運(yùn)行結(jié)果如圖所示:圖 14.1代碼范例3運(yùn)行結(jié)果4、 編寫使用遠(yuǎn)程服務(wù)的客戶機(jī)類客戶機(jī)類的主要功能有兩個,一是通過Naming.lookup方法來構(gòu)造注冊服務(wù)程序 stub 程序?qū)嵗钦{(diào)用服務(wù)器遠(yuǎn)程對象上的遠(yuǎn)程方法。代碼范例4package com.itjob.rmi;import java.rmi.*;import java.rmi.server.*;public class RmiSampleClient public static void main(

14、String args)try String url = "/localhost:8808/SAMPLE-SERVER"RmiSample RmiObject = (RmiSample)Naming.lookup(url);System.out.println(" 1 + 2 = " + RmiObject.sum(1,2) ); catch (RemoteException exc) System.out.println("Error in lookup: " + exc.toString(); catch (.MalformedU

15、RLException exc) System.out.println("Malformed URL: " + exc.toString(); catch (java.rmi.NotBoundException exc) System.out.println("NotBound: " + exc.toString();5、 為遠(yuǎn)程對象實現(xiàn)創(chuàng)建根和干客戶端是通過Naming.lookup方法來構(gòu)造注冊服務(wù)程序 stub 程序?qū)嵗?,通過該實例的引用來發(fā)起對遠(yuǎn)程對象方法調(diào)用的,所以在運(yùn)行運(yùn)行客戶端應(yīng)用前必須為遠(yuǎn)程對象實現(xiàn)創(chuàng)建根(s

16、tub)和干(Skeleton)。要創(chuàng)建存根程序和骨架文件,應(yīng)以包含遠(yuǎn)程對象實現(xiàn)的已編譯類包全名運(yùn)行 rmic 編譯器。存根(Stub)是遠(yuǎn)程對象在客戶端的代理,它將RMI調(diào)用傳遞給服務(wù)器端的骨架(Skeleton),后者負(fù)責(zé)將該調(diào)用傳遞給實際的遠(yuǎn)程方法。在命令行模塊下運(yùn)行RMIC調(diào)用:圖 14.2 RMIC命令調(diào)用RMIC命令運(yùn)行結(jié)果如圖所示:圖14.3 RMIC運(yùn)行結(jié)果Ø 我們可以看系統(tǒng)幫我們生成了存根(stub)RmiSampleImpl_Stub.class但系統(tǒng)并沒有幫我們生成骨架(Skeleton)RmiSampleImp

17、l_ Skeleton.class。這與JDK的版本有關(guān):采用JDK1.4版本運(yùn)行rmic com.itjob.rmi. RmiSampleImpl命令系統(tǒng)將會生成存根(stub)RmiSampleImpl_Stub.class和骨架(Skeleton)RmiSampleImpl_ Skeleton.class兩個類文件;采用JDK1.5版本運(yùn)行rmic com.itjob.rmi. RmiSampleImpl命令系統(tǒng)將只會生成存根(stub)RmiSampleImpl_Stub.class,骨架(Skeleton)RmiSampleImpl_ Skeleton.

18、class的功能將通反射技術(shù)由系統(tǒng)在運(yùn)行時自動實現(xiàn);6、 運(yùn)行程序依次做完上述步驟后,我們現(xiàn)在來運(yùn)行一下我們的RMI應(yīng)用。先運(yùn)行服務(wù)端程序,運(yùn)行結(jié)果如圖14.1所示。接下來我們運(yùn)行客戶端程序(代碼范例4),運(yùn)行結(jié)果如圖所示:圖14.4 客戶端程序運(yùn)行結(jié)果看到上面結(jié)果說明我們客戶端程序進(jìn)行RMI遠(yuǎn)程調(diào)用已經(jīng)成功了。1.3 RMI接口和類簡介負(fù)責(zé)指定rmi系統(tǒng)遠(yuǎn)程對象行為的接口和類在java.rmi包中定義的,接下來我們了解一下幾個核心接口和類:1、 Java.rmi.Remote接口在rmi中,遠(yuǎn)程接口聲明了可從遠(yuǎn)程java虛擬機(jī)中調(diào)用的方法集,遠(yuǎn)程接口必須滿足下列

19、條件:Ø 遠(yuǎn)程接口必須至少直接或間接的擴(kuò)展java.rmi.Remote接口。Ø 遠(yuǎn)程接口中的方法申明必須滿足:遠(yuǎn)程方法申明在其throws子句中除了要包含與應(yīng)用程序有關(guān)的異常之外,還必須包括RemoteException異常(或她的父類);在遠(yuǎn)程方法申明中,作為參數(shù)或返回值申明的遠(yuǎn)程對象必須申明為遠(yuǎn)程接口,而非該接口的實現(xiàn)類。2、 Java.rmi.RemoteException類RemoteException類是在遠(yuǎn)程方法調(diào)用期間由RMI運(yùn)行所拋出的異常,在使用了rmi系統(tǒng)的應(yīng)用程序中,遠(yuǎn)程接口中申明的遠(yuǎn)程方法在其throws子句中必須指定

20、RemoteException或者其超類。Ø 當(dāng)遠(yuǎn)程方法調(diào)用由于某種原因失敗時,將拋出RemoteException異常。Ø RemoteException類是一個已檢驗的異常,而不是RuntimeException。3、 Java.rmi.server.RemoteObject類Ø RMI服務(wù)器函數(shù)由RemoteObject類及其子類RemoteServer,UnicastRemoteObject和Activatabble提供。Ø RemoteObject為遠(yuǎn)程對象敏感的Object方法,hashCod

21、e,equals和toString方法提供實現(xiàn)。Ø 創(chuàng)建遠(yuǎn)程對象并將其導(dǎo)出,所需的方法由類UnicastRemoteObject和Activatable提供,子類可以識別遠(yuǎn)程方法。Ø UnicastRemoteObject定義了單個調(diào)用的遠(yuǎn)程對象,其引用只有在服務(wù)器進(jìn)程運(yùn)行時才有效。Ø 類Activatable是抽象類,它定義的activatable遠(yuǎn)程對象在其遠(yuǎn)程方法被調(diào)用時開始執(zhí)行,并在必要時自己關(guān)閉。4、 Java.rmi.registry.LocateRegistry類LocateRegistry類用于獲得對特定主機(jī)

22、的引導(dǎo)遠(yuǎn)程對象注冊服務(wù)程序的引用(創(chuàng)建stub),或者創(chuàng)建能在特定端口接受調(diào)用的遠(yuǎn)程對象注冊服務(wù)程序,注冊服務(wù)程序?qū)崿F(xiàn)將遠(yuǎn)程對象名與遠(yuǎn)程對象引用關(guān)聯(lián)的簡單命名語法,服務(wù)器重新啟動不會記住這些名字和遠(yuǎn)程對象之間的綁定。LocateRegistry類中的方法:public static Registry getRegistry() throws RemoteExceptionPublic static Registry getRegistry(int port ) throws RemoteExceptionPublic static Registry getRegistry(String hos

23、t ) throws RemoteExceptionPublic static Registry getRegistry(String host , int port) throws RemoteExceptionPublic static Registry getRegistry(String host, int port ,RMIClientSocketFactory csf ) throws RemoteExceptionPublic static Registry createRegistry(int port )throws RemoteExceptionPublic static

24、Registry createRegistry(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException5、 Java.rmi.Naming類Naming類提供了存儲和獲得遠(yuǎn)程對象注冊服務(wù)程序中的遠(yuǎn)程對象進(jìn)行引用的方法Ø Naming類中的方法以url的形式作為其中的一個參數(shù),/host:port/nameØ 當(dāng)遠(yuǎn)程對象使用rmi注冊服務(wù)程序在本地主機(jī)上進(jìn)行過注冊后,遠(yuǎn)程主機(jī)上的調(diào)用程序就可以按名稱查詢遠(yuǎn)程對象,獲得其引用,然

25、后在對象上調(diào)用遠(yuǎn)程方法。Public static Remote lookup(String name) throws NotBoundException, MalformedURException, RemoteExceptionPublic static void bind(String name, Remote obj) throws AlreadyBoundException, MalforedURException, RemoteExceptionPublic static void unbind (String name) throws RemoteException, NotBo

26、undException,MalformedURLExceptionPublic static void rebind(String name, Remote obj) throws RemoteException, MalformedURLException6、 Java.rmi.server.UnicastRemoteObject類類UnicastRemoteObject創(chuàng)建并導(dǎo)出遠(yuǎn)程對象,該類實現(xiàn)的遠(yuǎn)程服務(wù)具有以下特點(diǎn):Ø 將這種對象的引用至多僅在創(chuàng)建該遠(yuǎn)程對象的進(jìn)程生命周期內(nèi)有效。Ø 通過TCP傳輸與遠(yuǎn)程對象通信調(diào)用,參數(shù)和結(jié)果使用流協(xié)

27、議在客戶端和服務(wù)器之間進(jìn)行通信。7、 Stub 和skeleton在遠(yuǎn)程對象的通信過程中,rmi使用標(biāo)準(zhǔn)機(jī)制:stub和skeleton圖14.5 Stub和SkeletonØ Stub的功能初始化與包含遠(yuǎn)程對象的遠(yuǎn)程機(jī)器的連接。對遠(yuǎn)程機(jī)器參數(shù)進(jìn)行編組(寫入并傳輸)。等待方法調(diào)用結(jié)果。讀取返回值或返回的異常。將值返回給調(diào)用程序。Ø Skeleton的功能在遠(yuǎn)程機(jī)器中,每個遠(yuǎn)程對象都可以有相應(yīng)的skeleton,skeleton負(fù)責(zé)將調(diào)用分配給實際的遠(yuǎn)程對象實現(xiàn),他的主要功能如下:讀取遠(yuǎn)程方法的參數(shù)。調(diào)用實際遠(yuǎn)程對象實現(xiàn)上的方法。將結(jié)果

28、(返回值或異常)編組(寫入并傳輸)給調(diào)用程序。1.4 JNDI基本概念JNDI誕生的理由似乎很簡單。隨著分布式應(yīng)用的發(fā)展,遠(yuǎn)程訪問對象訪問成為常用的方法。雖然說通過Socket等編程手段仍然可實現(xiàn)遠(yuǎn)程通信,但按照模式的理論來說,仍是有其局限性的。RMI技術(shù),RMI-IIOP技術(shù)的產(chǎn)生,使遠(yuǎn)程對象的查找成為了技術(shù)焦點(diǎn)。JNDI技術(shù)就應(yīng)運(yùn)而生。JNDI技術(shù)產(chǎn)生后,就可方便的查找遠(yuǎn)程或是本地對象。1、 JNDI 是什么?JNDI(The Java Naming and Directory Interface,Java 命名和目錄接口) 是一組在Java

29、0;應(yīng)用中訪問命名和目錄服務(wù)的API。為開發(fā)人員提供了查找和訪問各種命名和目錄服務(wù)的通用、統(tǒng)一的方式。借助于JNDI 提供的接口,能夠通過名字定位用戶、機(jī)器、網(wǎng)絡(luò)、對象服務(wù)等。Ø 命名服務(wù):就像DNS 一樣,通過命名服務(wù)器提供服務(wù),大部分的J2EE 服務(wù)器都含有命名服務(wù)器。Ø 目錄服務(wù):一種簡化的RDBMS 系統(tǒng),通過目錄具有的屬性保存一些簡單的信息。目錄服務(wù)通過目錄服務(wù)器實現(xiàn),比如微軟ACTIVE DIRECTORY 等。2、 JNDI 的好處:Ø 包含大量命名和

30、目錄服務(wù),可以使用相同API 調(diào)用訪問任何命名或目錄服務(wù)。Ø 可以同時連接多個命名和目錄服務(wù)。Ø 允許把名稱同JAVA 對象或資源關(guān)聯(lián)起來,不必知道對象或資源的物理ID。Ø 使用通用接口訪問不同種類的目錄服務(wù)Ø 使得開發(fā)人員能夠集中使用和實現(xiàn)一種類型的命名或目錄服務(wù)客戶API 上。1.5 JNDI應(yīng)用程序結(jié)構(gòu)JNDI的結(jié)構(gòu)由一個API和一個SPI組成,Java應(yīng)用程序?qū)嵱肑NDI API訪問各種各樣的命名和目錄服務(wù)。圖14.6 JNDI應(yīng)用程序結(jié)構(gòu)1、 JNDI 上

31、下文前面提到命名服務(wù)是將名稱與對象相關(guān)聯(lián)。這種關(guān)聯(lián)被稱為綁定。一組這樣的綁定被稱為上下文,Jndi上下文可以用來查找,捆綁/解除捆綁,創(chuàng)建或者破壞綁定名稱操作在JNDI中,上下文是使用javax.naming.Context 接口來表示的,而這個接口也正是與命名服務(wù)進(jìn)行交互的主要接口。Context 接口中的每個命名方法都有兩種重載的形式:lookup(String name): 接受一個字符串名稱參數(shù),查找綁定遠(yuǎn)程對象。lookup(javax.naming.Name): 接受一個結(jié)構(gòu)化的名稱,查找綁定遠(yuǎn)程對象。2、 初始化上下文Initia

32、lContext 是一個實現(xiàn)了 Context接口的類。使用這個類作為您到命名服務(wù)的入口點(diǎn) 。創(chuàng)建一個InitialContext 對象構(gòu)造器需要采用一組屬性,形式為java.util.Hashtable 或其子類之一,比如:代碼范例5Properties props = new Properties();props.setProperty("java.naming.factory.initial", "erfaces.NamingContextFactory");props.set

33、Property("vider.url", "localhost:1099");InitialContext = new InitialContext(props);要通過JNDI 進(jìn)行資源訪問,我們必須設(shè)置初始化上下文的參數(shù),主要是設(shè)置JNDI 驅(qū)動的類名(java.naming.factory.initial)和提供命名服務(wù)的URL(vider.url)。因為Jndi 的實現(xiàn)產(chǎn)品有很多。所以java.naming.factory.initial

34、0;的值因提供JNDI 服務(wù)器的不同而不同,vider.url 的值包括提供命名服務(wù)的主機(jī)地址和端口號。下表列出了用于所支持的服務(wù)提供程序的工廠類。表 : Context.INITIAL_CONTEXT_FACTORY的值名稱服務(wù)提供程序工廠文件系統(tǒng)com.sun.jndi.fscontext.RefFSContextFactoryLDAPcom.sun.jndi.ldap.LdapCtxFactoryRMIcom.sun.jndi.rmi.registry. RegistryContextFactoryCORBAcom.sun.jn

35、di.cosnaming.CNCtxFactoryDNScom.sun.jndi.dns.DnsContextFactory1.6 RMI與JNDI集成通過上面對JNDI的了解我們可以利用JNDI來管理RMI遠(yuǎn)程對象的注冊服務(wù),我們將代碼范例3進(jìn)行如下改寫:代碼范例6package com.itjob.rmi;import java.rmi.*;import java.rmi.registry.*;import javax.naming.*;public class RmiSampleServerJndipublic static void main(String args) throws E

36、xceptionLocateRegistry.createRegistry(8808);RmiSampleImpl server=new RmiSampleImpl();System.setProperty(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.rmi.registry.RegistryContextFactory");System.setProperty(Context.PROVIDER_URL,"rmi:/localhost:8808");InitialContext ctx=new InitialContext();ctx.bind("java:comp/env/SampleDemo",server);ctx.close();啟動服務(wù)端程序如圖所示:圖14.7 JNDI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論