RMI參數(shù)傳遞試驗(yàn)_第1頁
RMI參數(shù)傳遞試驗(yàn)_第2頁
RMI參數(shù)傳遞試驗(yàn)_第3頁
RMI參數(shù)傳遞試驗(yàn)_第4頁
RMI參數(shù)傳遞試驗(yàn)_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

RMI參數(shù)傳遞試驗(yàn)1.概述Java在調(diào)用本地函數(shù)時(shí),簡(jiǎn)單類型是按值傳遞,同時(shí)對(duì)象是按引用傳遞的,即類似于C中的指針傳遞;而在RMI程序中調(diào)用一個(gè)遠(yuǎn)程方法時(shí),由于客戶機(jī)于服務(wù)器各自擁有不同的內(nèi)存空間,所以傳遞類引用時(shí)必須將類成員的信息發(fā)送到遠(yuǎn)程機(jī)器,即對(duì)象必須先被序列化,之后再送到遠(yuǎn)程機(jī)器。下面用兩種方法,通過程序驗(yàn)證RMI對(duì)象是按序列化值傳遞的。2.通過外層類方法修改類成員變量驗(yàn)證根據(jù)Java參數(shù)傳遞的特點(diǎn),可通過對(duì)比類成員變量是否被外層類方法修改成功驗(yàn)證。所以設(shè)計(jì)以下方法驗(yàn)證,首先將A對(duì)象賦值到類B的成員變量中,然后通過類B的方法修改A對(duì)象的引用,并打印顯示修改是否成功,以驗(yàn)證是否傳遞引用。此處通過設(shè)計(jì)以下程序?qū)崿F(xiàn)驗(yàn)證:分別在本地與服務(wù)器建立LocalAuthority、AuthorityImpl兩個(gè)外層類,把Account對(duì)象賦值到外層類的account域中,并調(diào)用changePassword修改Account對(duì)象的password域,最后打印Account的password查看是否修改成功。

2.1.實(shí)驗(yàn)過程啟動(dòng)RMIRegistry啟動(dòng)RMI服務(wù)端口c=c口c=cC:\WINDOWS\system32\cmd.exe-F:\java\jdkl4\bin\javaLexeAuthorit^erverK:\Ppoject\Jaua\FtmiRef>F:\jaua\jdkl4\bin\jaua.exeAathopitySeruerAathoritySeruer::main<>AuthorityImp1::construetor<>啟動(dòng)客戶端(本地模式)運(yùn)行程序,根據(jù)輸出結(jié)果可以看到,該程序首先模擬登陸帳戶Account(admin,123456),然后調(diào)用LocalAuthority.changePassword將帳戶密碼修改為newpassword,最后輸出密碼,可以看到密碼修改成功,證實(shí)本地對(duì)象傳遞是按照引用傳遞的。

啟動(dòng)客戶端(遠(yuǎn)程模式)客戶端輸出服務(wù)器端輸出運(yùn)行程序,根據(jù)輸出結(jié)果可以看到,程序首先模擬登陸帳戶Account(admin,123456),然后調(diào)用Authoritylmpl.changePassword將帳戶密碼修改為newpassword,最后輸出密碼,可以看到密碼修改失敗,依然是原密碼123456,證實(shí)RMI對(duì)象傳遞是按Copy傳遞的。2.2.試驗(yàn)結(jié)果本地對(duì)象傳遞是按照引用傳遞的而RMI對(duì)象傳遞是按Copy傳遞的。3.通過靜態(tài)變量不參與序列化驗(yàn)證首先根據(jù)Java序列化的特性可知,類靜態(tài)成員不會(huì)被序列化,而對(duì)象成員會(huì)被序列化,所以可以通過設(shè)計(jì)以下程序?qū)崿F(xiàn)驗(yàn)證:Client程序向Server請(qǐng)求一個(gè)Account對(duì)象,Server為Account對(duì)象預(yù)先設(shè)定好相應(yīng)的初值,主要包括一個(gè)靜態(tài)變量和一個(gè)普通成員變量:auto_id_static、autold;Client程序每次請(qǐng)求時(shí)Server為這兩個(gè)變量自增值,Client獲取對(duì)象之后打印對(duì)比變量的值。3.1.實(shí)驗(yàn)過程啟動(dòng)RMIRegistry啟動(dòng)RMI服務(wù)端啟動(dòng)客戶端

服務(wù)器端輸出客戶端輸出根據(jù)程序輸出結(jié)果可以看到,account對(duì)象的autoId和userid域更新,而靜態(tài)變量auto_id_static始終為0

3.2.試驗(yàn)結(jié)果RMI是通過序列化傳遞對(duì)象的4.總結(jié)Java在調(diào)用本地函數(shù)時(shí),簡(jiǎn)單類型是按值傳遞,同時(shí)對(duì)象是按引用傳遞的;而在RMI程序中調(diào)用遠(yuǎn)程方法時(shí),由于客戶機(jī)于服務(wù)器各自擁有不同的內(nèi)存空間,所以傳遞對(duì)象時(shí)必須將對(duì)象序列化之后再送到遠(yuǎn)程機(jī)器。5.附件5.1.程序一5.2.程序二Account.javaAuthorityImpl.javaAccount.javaAuthorityImpl.javaAuthorityServer.javaClientC.javaIAuthority.javaLocalAuthority.javaAuthorityImpl.javaAuthorityProxyImpl.javaAuthorityServer.jav

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論