專利名稱:Java小應(yīng)用程序下插件功能的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種插件功能的實(shí)現(xiàn)方法,特別是關(guān)于一種在Java小應(yīng)用程序下實(shí)現(xiàn)插件功能的方法。
背景技術(shù):
插件(Plug-in),英文的原意是指電源插頭,在軟件領(lǐng)域中,特別是在瀏覽器中,是指一些擴(kuò)展小程序。嚴(yán)格的插件(Plug-In)大家都可以看得到,比如和瀏覽器相關(guān)的各種各樣的插件,用來顯示不同格式的文件和播放不同的多媒體。又如PhotoShop中的各種各樣的插件,顯然也是用來實(shí)現(xiàn)一些輔助的功能。插件(Plug-In)目前最流行的作用就是能使應(yīng)用比較靈活,可以自由的為應(yīng)用增加新的插件或者是卸載現(xiàn)有的插件,而應(yīng)用程序不需要重新編譯和連接。
Java語言可以編寫兩種類型的程序應(yīng)用程序(Application)和小應(yīng)用程序(Applet)。應(yīng)用程序是可以獨(dú)立運(yùn)行的程序,而Applet不能獨(dú)立運(yùn)行,需要嵌入HTML(Hypertext Markup Language,超文字標(biāo)記語言)文件,遵循一套約定,在支持Java的瀏覽器(如Netscape Navigator 2.02版本以上,HotJava,Microsoft Internet Explorer 3.0版本以上)運(yùn)行,是Java一個(gè)重要的應(yīng)用分支,也是當(dāng)時(shí)Java最令人感興趣的地方(它一改網(wǎng)頁呆板的接口),就是在WWW網(wǎng)頁(Home Page/Pages)設(shè)計(jì)中加入動畫、影像、音樂等,而要達(dá)到這些效果,使用最多的是Java Applet和Java Script。
JavaScript是一種基于對象(Object)和事件驅(qū)動(Event Driven)并具有安全性能的腳本語言。使用它的目的是與HTML超文字標(biāo)記語言、與Web客戶交互作用,從而可以開發(fā)客戶端的應(yīng)用程序等。它是通過嵌入或文件引用在標(biāo)準(zhǔn)的HTML語言中實(shí)現(xiàn)的。它的出現(xiàn)彌補(bǔ)了HTML語言的缺陷,它是Java與HTML折衷的選擇,具有基于對象、簡單、安全、動態(tài)、跨平臺性等特性。
如同Applet執(zhí)行于瀏覽器而延伸了瀏覽器的功能一樣,HTTP Servlet也執(zhí)行于具有Java功能的Web服務(wù)器,而延伸了Web服務(wù)器的功能。Servlet是利用Java Servlet應(yīng)用程序設(shè)計(jì)接口(API)的Java程序。它們以ServletName.class的方式存在,也可能并入JAR(Java保存文件)文件中。
Java是一種極具有動態(tài)性的語言,類似Windows的動態(tài)鏈接庫(DLL),Java應(yīng)用程序總是被編譯成若干個(gè)單獨(dú)的類(Class)文件,程序執(zhí)行時(shí)根據(jù)需要由Java虛擬機(jī)動態(tài)加載相應(yīng)的類。術(shù)語“類加載”指的就是找出一個(gè)給定類名的字節(jié)所在的位置并且將這些字節(jié)轉(zhuǎn)換成Java類實(shí)例的過程。Java虛擬機(jī)(JVM)中所有的java.lang.Class實(shí)例都作為一個(gè)數(shù)組開始,該數(shù)組被組織成由JVM規(guī)范定義的類文件格式。
類加載是由JVM在啟動過程中執(zhí)行的,緊接著由java.lang.ClassLoader類中的子類執(zhí)行。這些類加載器提供一種抽象概念,使JVM不需要知道類字節(jié)的具體位置就可以將其加載,能夠進(jìn)行本地和遠(yuǎn)程存儲,以及實(shí)現(xiàn)動態(tài)類生成。
簡而言之,classloader是java.lang.ClassLoader類的子類,負(fù)責(zé)類的加載。在Java應(yīng)用程序中,有很多使用不同機(jī)制加載類的不同類加載器。每一個(gè)類加載器,都是為了與一個(gè)或者多個(gè)代碼源(Codesource)協(xié)同工作而設(shè)計(jì)的。代碼源是一個(gè)根位置,從這個(gè)位置,類加載器去尋找類。代碼源被定義用來表示二進(jìn)制類文件、必須先被編譯的Java源代碼或者實(shí)時(shí)生成的類的物理存儲地址。
正是由于Java語言的強(qiáng)安全性、平臺無關(guān)性、硬件結(jié)構(gòu)無關(guān)性、語言簡潔同時(shí)面向?qū)ο蟮奶攸c(diǎn),其已在網(wǎng)絡(luò)編程語言中占據(jù)了無可比擬的優(yōu)勢。
而另一方面,隨著經(jīng)濟(jì)和高科技的發(fā)展,企業(yè)開始大量應(yīng)用網(wǎng)絡(luò)程序來管理生產(chǎn)、經(jīng)營等工作。由于企業(yè)在不斷的發(fā)展與進(jìn)步,按企業(yè)早期經(jīng)營模式設(shè)計(jì)的系統(tǒng)有可能已經(jīng)不能滿足現(xiàn)在或?qū)淼膽?yīng)用,需要將系統(tǒng)升級,系統(tǒng)升級最常用的辦法是增加功能模塊或是重新改寫。但是重新改寫成本太高,除非系統(tǒng)結(jié)構(gòu)需要改變,比較經(jīng)濟(jì)的辦法是根據(jù)企業(yè)的新需求增加一個(gè)新模塊,這樣對企業(yè)和開發(fā)者來說都有利。這就要求在開發(fā)階段需要合理設(shè)計(jì)系統(tǒng),以便在將來能增加模塊。
一種可行的辦法是加入插件(Plug-in)功能,系統(tǒng)設(shè)計(jì)完成投入使用后,用戶可根據(jù)需要將一些額外的功能以插件(Plug-in)的形式加入系統(tǒng),系統(tǒng)將把插件(Plug-in)模塊當(dāng)作自己的一個(gè)功能模塊進(jìn)行調(diào)度。而在網(wǎng)絡(luò)應(yīng)用系統(tǒng)中,Java的Applet被大量應(yīng)用,如能在Applet中實(shí)現(xiàn)插件(Plug-in)功能,將會給設(shè)計(jì)帶來很大的方便,因此,如何能在Java Applet下實(shí)現(xiàn)插件(Plug-in)功能,已經(jīng)成為急待解決的問題。
發(fā)明內(nèi)容
本發(fā)明為解決上述問題而提供一種Java小應(yīng)用程序下插件功能的實(shí)現(xiàn)方法,用以在Java Applet下呼叫插件模塊。
本發(fā)明提供一種Java小應(yīng)用程序下插件功能的實(shí)現(xiàn)方法,用以在Applet下動態(tài)加載插件模塊來擴(kuò)展系統(tǒng)功能,該方法首先是指定一特定的插件目錄用于存放所有的插件模塊;然后系統(tǒng)類加載器在初始化時(shí)遍歷該插件目錄以搜尋插件配置文件;根據(jù)該配置文件解析該插件屬性并在系統(tǒng)菜單中構(gòu)建該插件菜單項(xiàng);捕捉使用者點(diǎn)選該菜單項(xiàng)的事件;該類加載器根據(jù)該插件的屬性獲得該插件的類型;根據(jù)該插件的類型響應(yīng)使用者點(diǎn)選事件。
本發(fā)明利用Java的動態(tài)加載類的功能特性,通過類加載器動態(tài)加載插件模塊,使應(yīng)用一網(wǎng)絡(luò)系統(tǒng)人員可以按照格式編寫自己的插件模塊,并整合到Applet中,而無需因?yàn)楣δ苌系哪承┚植扛倪M(jìn)而重新升級系統(tǒng),可以為系統(tǒng)設(shè)計(jì)帶來很大的可擴(kuò)展性。
圖1為本發(fā)明在Java小應(yīng)用程序中插件功能的實(shí)現(xiàn)方法流程圖;圖2為本發(fā)明所提供的在插件為應(yīng)用程序時(shí)響應(yīng)使用者點(diǎn)選事件的實(shí)施例流程圖;圖3為本發(fā)明所提供的在插件為頁面時(shí)響應(yīng)使用者點(diǎn)選事件的實(shí)施例流程圖;圖4為本發(fā)明的應(yīng)用環(huán)境整體流程圖;圖5為本發(fā)明所提供的構(gòu)建菜單項(xiàng)的流程圖;及圖6為本發(fā)明所提供的動態(tài)加載類的實(shí)施例流程圖。
其中,附圖標(biāo)記說明如下步驟101指定一特定的插件目錄用于存放所有的插件模塊步驟102系統(tǒng)類加載器初始化時(shí)遍歷該插件目錄以搜尋插件配置文件步驟103根據(jù)該配置文件解析該插件屬性并在系統(tǒng)菜單中構(gòu)建該插件菜單項(xiàng)步驟104捕捉使用者點(diǎn)選該菜單項(xiàng)的事件步驟105該類加載器根據(jù)該插件的屬性獲得該插件的類型步驟106根據(jù)該插件的類型響應(yīng)使用者點(diǎn)選事件步驟201插件目錄中查找相對應(yīng)的類步驟202根據(jù)該類構(gòu)造該類的一個(gè)實(shí)例步驟203呼叫該實(shí)例的初始化方法啟動該應(yīng)用程序步驟301呼叫Applet的Jsp文件中加入一個(gè)呼叫另一個(gè)頁面的JavaScript函數(shù)步驟302將插件作為參數(shù)傳遞給該JavaScript函數(shù)步驟303在Applet呼叫該JavaScript函數(shù)時(shí),由該方法呼叫該插件模塊步驟401查找存于插件目錄下的Plug-in配置文件Config.xml步驟402、403將配置文件中的參數(shù)傳遞到客戶端步驟405、406 以頁面形式實(shí)現(xiàn)功能的動態(tài)插入步驟404直接插入程序步驟501系統(tǒng)初始化步驟502搜索Plug-in目錄步驟503是否有Plug-in配置文件步驟504獲得該P(yáng)lug-in在系統(tǒng)菜單中的多項(xiàng)屬性步驟505在系統(tǒng)菜單上加入該項(xiàng)菜單步驟601若Plug-in類型為應(yīng)用程序步驟602搜索對應(yīng)的類步驟603、604找到該類后構(gòu)造該類的一個(gè)實(shí)例步驟605呼叫該實(shí)例的初始化方法步驟606若Plug-in為一個(gè)Jsp頁面步驟607加載該頁面
具體實(shí)施例方式
請參閱圖1,為本發(fā)明Java小應(yīng)用程序下插件功能的實(shí)現(xiàn)方法流程圖。該方法首先指定一特定的插件目錄用于存放所有的插件模塊(步驟101);然后系統(tǒng)類加載器初始化時(shí)遍歷該插件目錄以搜尋插件配置文件(步驟102);根據(jù)該配置文件解析該插件屬性并在系統(tǒng)菜單中構(gòu)建該插件菜單項(xiàng)(步驟103);捕捉使用者點(diǎn)選該菜單項(xiàng)的事件(步驟104);該類加載器根據(jù)該插件的屬性獲得該插件的類型(步驟105);根據(jù)該插件的類型響應(yīng)使用者點(diǎn)選事件(步驟106)。
其中,該插件類型為應(yīng)用程序時(shí),該響應(yīng)步驟(步驟106)請參閱圖2,其首先在插件目錄中查找相對應(yīng)的類(步驟201);然后根據(jù)該類構(gòu)造該類的一個(gè)實(shí)例(步驟202);最后呼叫該實(shí)例的初始化方法啟動該應(yīng)用程序(步驟203)。
而當(dāng)該插件類型為頁面時(shí),該響應(yīng)步驟(步驟106)請參閱圖3,其首先在呼叫Applet的Jsp(Java Server Pages)文件中加入一個(gè)呼叫另一個(gè)頁面的JavaScript函數(shù)(步驟301);然后將插件作為參數(shù)傳遞給該JavaScript函數(shù)(步驟302);最后在Applet呼叫該JavaScript函數(shù)時(shí),由該方法呼叫該插件模塊(步驟303)。
本發(fā)明主要是利用了Java的動態(tài)加載類的功能特性,在一個(gè)網(wǎng)絡(luò)環(huán)境中,如果上述的插件目錄位于服務(wù)器端時(shí),還包括一將該配置文件中的參數(shù)傳遞到客戶端的步驟,其整體結(jié)構(gòu)流程圖如圖4所示,首先查找保存于插件目錄下的Plug-in配置文件Config.xml(步驟401);如果這個(gè)插件目錄位于服務(wù)器端,則需要將配置文件中的參數(shù)傳遞到客戶端(步驟402、403);由于Plug-in對系統(tǒng)來說是一個(gè)單獨(dú)的模塊,可以是一個(gè)應(yīng)用程序,也可以是一個(gè)頁面,因此可以對這兩種類型分別處理,如果Plug-in是一個(gè)頁面,我們可以在調(diào)用Applet的Jsp文件中加入一個(gè)調(diào)用另外一個(gè)頁面的JavaScript函數(shù),將Plug-in作為參數(shù)傳給這個(gè)JavaScript函數(shù),當(dāng)Applet調(diào)用這個(gè)方法時(shí),由這個(gè)方法調(diào)用Plug-in模塊,以頁面形式實(shí)現(xiàn)功能的動態(tài)插入(步驟405、406);另一種情況是Plug-in是一個(gè)獨(dú)立的應(yīng)用程序,則應(yīng)用Java的動態(tài)加載機(jī)制直接插入程序(步驟404)。
如圖5所示,為本發(fā)明所提供的構(gòu)建菜單步驟的實(shí)施例流程圖。首先系統(tǒng)可以提供一個(gè)類裝載模塊,該模塊在初始化(步驟501)時(shí)會搜索Plug-in目錄(步驟502),尋找Plug-in目錄下是否有Plug-in配置文件(步驟503),如果有配置文件,則說明有一個(gè)Plug-in模塊需要加載系統(tǒng),系統(tǒng)解析該配置文件,取得該P(yáng)lug-in在系統(tǒng)菜單中的位置、狀態(tài)、名稱等屬性(步驟504),根據(jù)這些屬性在系統(tǒng)菜單上加入該項(xiàng)菜單(步驟505),以便用戶在選中此菜單時(shí)啟動Plug-in模塊。
請參閱圖6,為本發(fā)明所提供的響應(yīng)使用者點(diǎn)選事件,動態(tài)加載類的實(shí)施例流程圖。Plug-in菜單構(gòu)造完成后,可以響應(yīng)用戶點(diǎn)擊事件,用戶點(diǎn)擊該項(xiàng)菜單時(shí),類裝載模塊根據(jù)Plug-in的class type屬性判斷出該plug-in為何種類型,若Plug-in類型為應(yīng)用程序(步驟601),則在Plug-in目錄中尋找對應(yīng)的類(步驟602),找到該類后構(gòu)造該類的一個(gè)實(shí)例(步驟603、604),然后呼叫該實(shí)例的初始化方法啟動應(yīng)用程序(步驟605);若Plug-in為一個(gè)Jsp頁面(步驟606),則利用動態(tài)加載模塊加載該頁面(步驟607)。
以上所述,僅為本發(fā)明其中的較佳實(shí)施例,并非用來限定本發(fā)明的實(shí)施范圍;凡依本發(fā)明申請專利范圍在不脫離本發(fā)明的精神和范圍內(nèi)所作的均等變化與修飾,均應(yīng)屬于本發(fā)明專利權(quán)利要求書所要求保護(hù)的范圍內(nèi)。
權(quán)利要求
1.一種Java小應(yīng)用程序下插件功能的實(shí)現(xiàn)方法,用以在Applet下動態(tài)加載插件模塊來擴(kuò)展系統(tǒng)功能,其中該方法包括如下步驟指定一特定的插件目錄用于存放所有的插件模塊;系統(tǒng)類加載器初始化時(shí)遍歷該插件目錄以搜尋插件配置文件;根據(jù)該配置文件解析該插件屬性并在系統(tǒng)菜單中構(gòu)建該插件菜單項(xiàng);捕捉使用者點(diǎn)選該菜單項(xiàng)的事件;該類加載器根據(jù)該插件的屬性獲得該插件的類型;及根據(jù)該插件的類型響應(yīng)使用者點(diǎn)選事件。
2.如權(quán)利要求1所述的Java小應(yīng)用程序下插件功能的實(shí)現(xiàn)方法,其中該插件屬性包括在系統(tǒng)菜單中的位置、狀態(tài)以及名稱。
3.如權(quán)利要求1所述的Java小應(yīng)用程序下插件功能的實(shí)現(xiàn)方法,其中該在系統(tǒng)菜單中構(gòu)建插件菜單項(xiàng)的步驟,是根據(jù)該插件的屬性在系統(tǒng)菜單中加入該菜單項(xiàng)。
4.如權(quán)利要求1所述的Java小應(yīng)用程序下插件功能的實(shí)現(xiàn)方法,其中該插件類型為應(yīng)用程序時(shí),該響應(yīng)步驟還包括如下步驟在插件目錄中查找相對應(yīng)的類;根據(jù)該類構(gòu)造該類的一個(gè)實(shí)例;及呼叫該實(shí)例的初始化方法啟動該應(yīng)用程序。
5.如權(quán)利要求1所述的Java小應(yīng)用程序下插件功能的實(shí)現(xiàn)方法,其中該插件類型為頁面時(shí),該響應(yīng)步驟還包括如下步驟在呼叫Applet的Jsp文件中加入一個(gè)呼叫另一個(gè)頁面的JavaScript函數(shù);將插件作為參數(shù)傳遞給該JavaScript函數(shù);及在Applet呼叫該JavaScript函數(shù)時(shí),由該方法呼叫該插件模塊。
6.如權(quán)利要求1所述的Java小應(yīng)用程序下插件功能的實(shí)現(xiàn)方法,其中該指定的插件目錄位于服務(wù)器端時(shí),還包括一將該配置文件中的參數(shù)傳遞到客戶端的步驟。
全文摘要
一種Java小應(yīng)用程序下插件功能的實(shí)現(xiàn)方法,首先指定一插件目錄存放插件模塊,然后系統(tǒng)類加載器在初始化時(shí)搜尋插件配置文件,解析插件屬性并在系統(tǒng)菜單中構(gòu)建該插件菜單項(xiàng),當(dāng)捕捉到使用者點(diǎn)選該菜單項(xiàng)的事件時(shí),類加載器根據(jù)插件的類型響應(yīng)使用者點(diǎn)選事件,本發(fā)明利用Java的動態(tài)加載類的功能特性,通過類加載器動態(tài)的加載了插件模塊,為系統(tǒng)設(shè)計(jì)帶來很大的可擴(kuò)展性。
文檔編號G06F9/44GK1641569SQ200410001279
公開日2005年7月20日 申請日期2004年1月6日 優(yōu)先權(quán)日2004年1月6日
發(fā)明者劉文涵, 陳玄同, 李海軍 申請人:英業(yè)達(dá)股份有限公司