周文峰,任洪敏
(上海海事大學(xué)信息工程學(xué)院,上海201306)
基于LiveConnect技術(shù)的SVN Java Web插件的設(shè)計與開發(fā)
周文峰,任洪敏
(上海海事大學(xué)信息工程學(xué)院,上海201306)
隨著計算機(jī)和網(wǎng)絡(luò)技術(shù)的高速發(fā)展,互聯(lián)網(wǎng)已經(jīng)日益成為人們默認(rèn)的工作環(huán)境,而目前使用最為廣泛的Subversion版本控制系統(tǒng),只能在客戶端工作副本上工作,滿足不了人們在Web上管理文件的需求,因此重點研究基于LiveConnect技術(shù)和SVNKit技術(shù)開發(fā)一款實現(xiàn)SVN基本功能的SVN JavaWeb插件,該插件可以在Web環(huán)境上實現(xiàn)對工作區(qū)文件的管理,操作靈活,并且可以輕松嵌入其他JavaWeb項目中,以使該插件可以廣泛使用。
LiveConnect;SVN;SVNKit;Applet數(shù)字簽名;JNLP
自20世紀(jì)70年代,配置控制理論第一次被提出以來,在版本控制工具領(lǐng)域中出現(xiàn)了很多配置管理工具如CVS、VSS、Git、SVN等,其中CVS是很多中小軟件公司使用最頻繁的版本控制工具,但由于它不能對目錄實現(xiàn)版本控制,不能記錄目錄的版本歷史,在軟件開發(fā)中不能實現(xiàn)文件的“移動”、“重命名”、“拷貝”等操作,使之逐漸被SVN(Subversion)取代。2000年2月, CollabNet公司啟動SVN項目,它的目標(biāo)就是實現(xiàn)CVS的絕大部分功能,并充分考慮現(xiàn)有的CVS用戶,使用方式上類似CVS。由于SVN的源代碼是公開的,所以最近幾年來,Subversion在國內(nèi)發(fā)展很迅速,被廣泛應(yīng)用于大小軟件公司,對各種資源文件進(jìn)行管理。Subversion目前使用最為廣泛的開源版本控制系統(tǒng),和客戶端TortoiseSVN一起管理工作區(qū)文件。它的核心是版本庫,儲存所有隨時間而變化的數(shù)據(jù)。
隨著Web技術(shù)的不斷發(fā)展,互聯(lián)網(wǎng)已經(jīng)日益成為人們默認(rèn)的工作平臺,傳統(tǒng)的客戶端工作區(qū)及管理客戶端工作區(qū)文件的版本控制軟件因不能滿足人們在Web環(huán)境上工作的需求而逐漸向互聯(lián)網(wǎng)上轉(zhuǎn)移。因此,本文開發(fā)的LiveSVNPlugin能夠解決在Web工作區(qū)管理文件的問題,且是采用最新的RIA(Rich Internet Application,富互聯(lián)網(wǎng)應(yīng)用)[1]技術(shù)開發(fā)的Java Web插件。RIA既具有傳統(tǒng)B/S結(jié)構(gòu)的Web應(yīng)用在開發(fā)、部署和維護(hù)方面的便利優(yōu)勢,也具有桌面應(yīng)用在交互能力和表現(xiàn)能力上所具有的美好體驗。LiveSVNPlugin采用了最新的Web開發(fā)技術(shù),如HTML5、CSS3、JQuery、LiveConnect等,操作靈活,集成方便,很容易嵌入其他Web項目中,用于實現(xiàn)對Web工作區(qū)上文件的版本控制。該插件實現(xiàn)了Subversion客戶端的基本功能,相對于目前使用的客戶端版本控制軟件,在Web領(lǐng)域具有很大使用價值,必定會是版本控制系統(tǒng)領(lǐng)域的一個突破。
1.1LiveConnect技術(shù)介紹
LiveConnect技術(shù)[1]是Web瀏覽器允許Java和JavaScript在Web頁面內(nèi)彼此交互溝通的一個新特性。它是目前實現(xiàn)Java App let應(yīng)用的一個DOM接口,允許每個程序操縱其包含的網(wǎng)頁,包括Java類調(diào)用JavaScript方法和訪問JavaScript環(huán)境及JavaScript訪問Java對象和調(diào)用Java方法。LiveConnect技術(shù)提供了兩個Java Applet的API包用于與JavaScript通信。這兩個包是netscape.javascript和netscape.plugin。其中netscape. javascript在客戶端和服務(wù)器端上都可以使用,包含兩個類:
netscape.javascript.JSObject和netscape.javascript. JSException,但netscape.plugin只能使用在客戶端,包含一個類:netscape.plugin.Plugin。
雖然LiveConnect通過連接JavaScript與Java可以創(chuàng)建非常強(qiáng)大的應(yīng)用程序,但是LiveConnect并不完全支持所有瀏覽器,目前,僅Netscape瀏覽器和Mozilla Firefox完全支持這個特性。通過LiveConnect技術(shù)可以開發(fā)出各種瀏覽器和客戶端交互的豐富的應(yīng)用程序。Applet與JavaScript的具體通信過程如下:
(1)JavaScript調(diào)用Java Applet:
window.document.SVNApplet.SVNFunction();
其中,SVNApp let是Java Applet應(yīng)用,SVNFunction()是SVNApplet里面的public類型的方法。
(2)Java Applet調(diào)用JavaScript方法:
//獲取JavaScript窗口句柄,引用當(dāng)前文檔窗口this值object類
JSObjectwin=JSObject.getWindow(this);
//調(diào)用頁面上的js方法showMsg()
Object obj[]=new Object[1];
obj[0]=info;
win.call("showMsg",obj);
其中,要加載第三方插件(import netscape. javascript.JSObject;),showMsg是JavaScript里面的函數(shù)。
function showMsg(obj)
{
......
}
1.2LiveSVNPlugin功能結(jié)構(gòu)圖
LiveSVNPlugin插件是一款基于LiveConnect技術(shù)的Java Web插件,它的功能結(jié)構(gòu)圖如圖1所示。
2.1SVNkit技術(shù)介紹
SVNKit(JavaSVN)[5]是一個完全基于Java的訪問Subversion版本控制系統(tǒng)的一個客戶端工具庫,它具有很高的獨立性,具有跨操作系統(tǒng)的特性。Subversion是一家領(lǐng)先的和快速增長的開源版本控制系統(tǒng),而SVNKit使Subversion更接近Java世界!SVNKit是純粹的Java工具包,它實現(xiàn)了Subversion所有功能,提供了在Java應(yīng)用程序上操作Subversion工作副本及訪問和操作Subversion版本庫的一切API接口,并且兼容Subversion的最新版本,同時也支持SSH、HTTP、SVN和文件傳輸協(xié)議。
SVNKit對外提供的API編程接口中,主要有兩個High Level API和Low Level API,其中,通過High Level API接口,幾乎可以實現(xiàn)Subversion的所有操作,包括檢出、更新、提交、查看歷史、比較差異和瀏覽版本庫等。Low Level API接口封裝了Subversion版本庫的連接細(xì)節(jié),常用它來連接和直接操作版本庫。通過SVNKit技術(shù),可以開發(fā)出自己所需要的具有SVN特色各種應(yīng)用程序。

圖1 LiveSVNPlugin功能結(jié)構(gòu)圖
2.2LiveSVNPlugin內(nèi)部功能結(jié)構(gòu)類圖
在本項目中,登錄用戶可以看到遠(yuǎn)程工作空間上自己有權(quán)限的目錄和文件,并可以看到這些目錄和文件受(.svn)控制的狀態(tài)。它們的實現(xiàn)是基于異步加載的方式和SVNKit的相關(guān)方法在Servelet里面實現(xiàn)的,包括ourClientManager.getStatusClient().doStatus和manager.parseRootPaths(new User(userName),null))等方法。
通過LiveSVNPlugin插件,實現(xiàn)了在Web環(huán)境下對客戶端的存取操作,主要包括checkout、update、commit、delete、add、rename等SVN客戶端的常用操作,這些功能主要通過SVNkit里面的High Level API接口的doStatus、doCommit、doAdd、doUpdate、doDelete等方法實現(xiàn)。
LiveSVNPlugin插件功能原理的結(jié)構(gòu)類圖如圖2所示。

圖2 LiveSVNPlugin和SVNKit功能結(jié)構(gòu)對應(yīng)圖
在LiveSVNPlugin部署方面采用的是JNLP技術(shù)。JNLP(Java Network Launching Protocol,Java網(wǎng)絡(luò)加載協(xié)議)是Java提供的一種可以通過瀏覽器直接執(zhí)行Java應(yīng)用程序的途徑,它可以在客戶端瀏覽器上運(yùn)行Java小應(yīng)用程序。JavaWeb應(yīng)用以JNLP的方式發(fā)布,版本升級,不需要再向所有用戶發(fā)布版本,只需要更新服務(wù)器的版本,這與傳統(tǒng)的Windows應(yīng)用的版本發(fā)布是完全不同的,使Java應(yīng)用程序有了Web應(yīng)用的優(yōu)點。
由于Java Applet程序可以從客戶端瀏覽器上下載到本地客戶端,然后在客戶端運(yùn)行,這樣就導(dǎo)致惡意的Applet程序也有可能會破壞客戶端系統(tǒng)。并且因為Java安全機(jī)制的限制[3],Java把Applet限定運(yùn)行在瀏覽器規(guī)定的“沙盒(SandBox)”環(huán)境區(qū)域中,在這個區(qū)域中不能實現(xiàn)Applet對本地文件的存取,因此我們需要對Applet進(jìn)行簽名認(rèn)證,使簽名后的Applet具有普通Java應(yīng)用一樣的權(quán)限,未簽名的Applet依然運(yùn)行在“沙盒”中,這樣可以使客戶端的安全問題得到解決。Applet數(shù)字簽名技術(shù)就是為突破JRE安全機(jī)制的限制而提出的解決方案。在本系統(tǒng)中主要是通過Applet實現(xiàn)SVN操作來完成對遠(yuǎn)程工作區(qū)文件的存取。
3.1在HTML頁面嵌入Applet標(biāo)簽
<applet name="SVNApplet"width="0"height="0">
<PARAM NAME="jnlp_href"VALUE="svn/svnApp let. jnlp">
</applet>
3.2JNIP部署Applet
采用JNLP文件[6]部署Applet,除了具有簡化HTML代碼,把Applet需要Logo,提示信息,引用的第三方插件等資源封裝到一個JNLP文件中,對Applet維護(hù)方便,同時可以自動下載并安裝最新JRE版本的功能。部署過程如下:

其中,SVNApplet.jar是通過MyEclipse把SVNApplet.class打的JAR包也就是上文提到的LiveSVNPlugin插件),其他JAR包是系統(tǒng)所引用的第三方插件包,<all-permissions/>表示允許所有簽名的Applet操作。
3.3Applet數(shù)字簽名[4]
使用JDK自帶的keytool和jarsigner工具對生成的SVNApplet.jar文件簽名。
步驟如下:
(1)將Applet class文件打成jar包,命令如下:使用JAR打包命令:jar cvfm SVNApplet.jarmanifest.mf*.class lib*.jar
或MyEclpse自帶打包工具到處JAR包
(2)生成秘鑰庫,這個過程需要輸入密匙庫的密碼,命令如下:
keytool-genkey-keystore SVNApplet.keystore-alias SVNApplet
(3)生成簽名時所要用的證書,命令如下:
Keytool-export-keystore SVNApplet.keystore-alias SVNApplet-file SVNApplet.cer
(4)用上一步產(chǎn)生的證書對jar文件進(jìn)行簽名,命令如下:
jarsigner-keystore SVNApplet.keystore SVNApplet.jar SVNApplet
簽名結(jié)果如圖3所示:

圖3 LiveSVNPlugin簽名結(jié)果圖
如果看到“jar已簽名”,如圖1所示,并且新生成SVNApplet.keystore和SVNApp let.cer兩個文件,說明LiveSVNPlugin簽名成功。
隨著瀏覽器和JRE的不斷升級,Java的安全機(jī)制也不斷變化,從Java 7 Update 51開始,Java不在支持除Sun公司以外其他機(jī)構(gòu)和個人發(fā)布的簽名證書。為解決這一問題,Java引入了“例外站點”列表功能,在Java控制臺的例外站點中加入項目URL地址即可。運(yùn)行項目,初次運(yùn)行會彈出簽名證書認(rèn)證窗口,如圖4所示。

圖4 RIASVN項目LiveSVNPlugin安全驗證圖
其中RIASVN是項目名稱,LiveSVNPlugin在詳細(xì)信息中可以看到。如果看到簽名的姓名是自己信任的,則選中“接受”,然后點“運(yùn)行”。第一次運(yùn)行該網(wǎng)頁會有證書提示,選擇運(yùn)行以后再運(yùn)行此網(wǎng)頁將不再提示驗證信息。如果選擇“取消”,則只可以瀏覽網(wǎng)頁,不可以進(jìn)行存取等其他交互操作,下次再運(yùn)行此網(wǎng)頁,仍然還會有證書確認(rèn)信息彈出。
在Windows Java控制臺查看緩存文件,若看到插件LiveSVNPlugin,右鍵查看到LiveSVNPlugin詳細(xì)信息,則說明JNLP部署LiveSVNPlugin成功完成,如圖5所示:

圖5 控制臺應(yīng)用緩存圖
SVN是近年來崛起的版本管理軟件系統(tǒng),是使用最廣泛的版本管理軟件之一,而且功能齊全,但是隨著Web技術(shù)的不斷發(fā)展,為了適應(yīng)在線管理文件的需要,版本控制軟件在富互聯(lián)網(wǎng)(RIA)上的需求越來越多,SVN在RIA上有很大的研究價值和發(fā)展空間,本文重點研究SVN在互聯(lián)網(wǎng)上的應(yīng)用而開發(fā)的LiveSVNPlugin插件,實現(xiàn)了在Web上所具有的SVN的基本功能,主要有checkout、update、commit、delete、add、rename,資源空間和本地資源交互(上傳和下載)等。和TortoiseSVN的強(qiáng)大功能相比還有很大差距,相關(guān)工作還需要繼續(xù)探索,同時為了服務(wù)于Web,SVN版本倉庫在互聯(lián)網(wǎng)上的遠(yuǎn)程管理也必將會是SVN以后的研究重點。
[1]Rich Internet Application高級編程:后AJAX時代,清華大學(xué)出版社,2009.01
[2]使用Subversion進(jìn)行版本控制,北京出版社,2009
[3]朱連章.通過Applet與Servlet通信突破Applet的限制.微計算機(jī)信息,2004(4)
[4]劉丹,褚蓓蓓.用Java語言實現(xiàn)電子政務(wù)中的數(shù)字簽名[J].計算機(jī)安全,2008(9),85-87
[5]TMate.SVNKit[CP/OL].[2014-6-18].http://www.svnkit.com/.
[6]ReneW.Schmidt.Java Network Lanching Protocol and APISpecification[M].California,2001.
LiveConnect;SVN;SVNKit;Applet Digital Signature;JNLP
Design and Developm entof SVN Java Web Plug-in Based on LiveConnect
ZHOUWen-feng,REN Hong-min
(College of Information Engineering,ShanghaiMaritime University,Shanghai 201306)
With the rapid development of computer and network technology,the Internet has increasingly become the default platform.Nowadays, Subversion is amostwidely used,free and open source version control system.The working place of SVN is only limited to client's compute,it can'tmeet the needs ofmanagement files in theWeb.So,focuses to develop a plug-in that called LiveSVNPlugin tomanage resource files based on SVN and LiveConnect technology,and it has achieved the basic functions of SVN.The LiveSVNPlugin can be achieved on the workspace for file management in the Web environment,flexible operation,and can be easily embedded in other Java Web projects tomake itused widely.
1007-1423(2015)16-0051-05
10.3969/j.issn.1007-1423.2015.16.012
周文峰(1987-),男,安徽渦陽人,碩士研究生,研究方向為數(shù)據(jù)庫開發(fā)與應(yīng)用、軟件開發(fā)與系統(tǒng)架構(gòu)
任洪敏(1969-),男,上海浦東人,博士,副教授,研究方向為軟件體系結(jié)構(gòu)、軟件復(fù)用、軟件項目管理
2015-04-29
2015-05-19