国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

jini和RMI開發中的codebase問題

2019-11-18 14:03:08
字體:
來源:轉載
供稿:網友

  codebase問題其實是一個怎樣從網絡上下載類的問題,我想不只是在Jini和RMI程序開發中要用到。只要需要從網絡上下載類,就要涉及到codebase問題。例如applet等。但是因為我對applet程序不是很熟悉,所以我就只談Jini和RMI,但我想codebase問題應該是通用的。

毫無疑問,對于大多數Jini和RMI開發新手來說,如何使用codebase是比較輕易令人迷惑的一件事。(我的一位師妹就很痛苦過,而且懷疑這個是不是sun的一個騙局:P)下面我就講講codebase要注重的幾個方面,也就是容 易出問題的地方。

一、為什么需要codebase

當我們用一個對象作為遠程方法調用的參數時,對象是以序列化流來傳輸到遠端,然后在遠端重新生成對象。這樣就可能在兩個java虛擬機中交換對象了。但是序列化是這種傳遞對象的一部分。當你序列化對象時,你僅僅是把對象的成員數據轉化成字節流,而實際實現該對象的代碼卻沒有。也就是說,傳遞的只是數據部分,而做為控制邏輯的程序代碼部分卻沒有被傳遞。這就是RMI初學者輕易誤解的地方,我已經序列化對象了,而且對象也傳過去了,怎么還說找不到呢。其實,對象數據的確過去了,不過找不到是類定義,這個并不是序列化傳過去的,RMI協議是不傳遞代碼的。但是,對于本地沒有的類文件的對象,RMI提供了一些機制答應接收對象的一方去取回該對象的類代碼。而到什么地方去取,這就需要發送方設置codebase了。

二、什么是codebase

簡單說,codebase就是遠程裝載類的路徑。當對象發送者序列化對象時,會在序列化流中附加上codebase的信息。 這個信息告訴接收方到什么地方尋找該對象的執行代碼。

你要弄清楚哪個設置codebase,而哪個使用codebase。任何程序假如發送一個對方可能沒有的新類對象時就要設置codebase(例如jdk的類對象,就不用設置codebase)。

codebase實際上是一個url表,在該url下有接受方需要下載的類文件。假如你不設置codebase,那么你就不能把一個對象傳遞給本地沒有該對象類文件的程序。

三、怎樣設置codebase

在大多數情況下,你可以在命令行上通過屬性java.rmi.server.codebase來設置codebase。例如,假如你在機器url上運行web服務器,端口是8080,你所提供下載的類文件在webserver的根目錄下。那么運行應用程序的java 命令行:


-Djava.rmi.server.codebase=http://url:8080/

這就是告訴任何接受對象的程序,假如本地沒有類文件,可以從這個url下載。

四、類文件應該在什么地方

如上所示,當接收程序試圖從url的webserver上下載代碼時,它會把對象的包名轉化成目錄,到相對于codebase 的該目錄下尋找(這點和classpath是一樣的)。例如,假如你傳遞的是類文件yourgroup.PRoject.bean的實例,那么接受方就會到下面的url去下載類文件:


-Djava.rmi.server.codebase=http://url:8080/yourgroup/project/bean.class

一定要保證你把類文件放到webserver根目錄下的正確位置,這樣這些類文件才能被找到。另一方面,假如你把所有的類文件包裝成jar文件,那么設置codebase時就要明確的指出這個jar文件。(這又和 classpath一致了,其實codebase就是網絡范圍的類路徑。)例如你的jar文件是myclasses.jar,那么codebase 如下:


-Djava.rmi.server.codebase=http://url:8080/myclasses.jar

你注重這兩種形式的不同。用jar文件后面不用跟‘/’,而用路徑的一定用跟‘/’。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳西县| 兴宁市| 高州市| 舒兰市| 荣昌县| 崇阳县| 博湖县| 鄢陵县| 额尔古纳市| 高尔夫| 新干县| 阳春市| 鄂州市| 乌兰县| 阿拉尔市| 通化县| 噶尔县| 汾西县| 南宫市| 杭锦后旗| 佛冈县| 永春县| 西充县| 廊坊市| 新田县| 井冈山市| 靖边县| 随州市| 渑池县| 菏泽市| 林西县| 科尔| 梨树县| 静海县| 景泰县| 吴桥县| 六安市| 龙门县| 万源市| 晋城| 佳木斯市|