周文峰,任洪敏
(上海海事大學(xué)信息工程學(xué)院,上海201306)
基于LiveConnect技術(shù)的SVN Java Web插件的設(shè)計(jì)與開(kāi)發(fā)
周文峰,任洪敏
(上海海事大學(xué)信息工程學(xué)院,上海201306)
隨著計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的高速發(fā)展,互聯(lián)網(wǎng)已經(jīng)日益成為人們默認(rèn)的工作環(huán)境,而目前使用最為廣泛的Subversion版本控制系統(tǒng),只能在客戶端工作副本上工作,滿足不了人們?cè)赪eb上管理文件的需求,因此重點(diǎn)研究基于LiveConnect技術(shù)和SVNKit技術(shù)開(kāi)發(fā)一款實(shí)現(xiàn)SVN基本功能的SVN JavaWeb插件,該插件可以在Web環(huán)境上實(shí)現(xiàn)對(duì)工作區(qū)文件的管理,操作靈活,并且可以輕松嵌入其他JavaWeb項(xiàng)目中,以使該插件可以廣泛使用。
LiveConnect;SVN;SVNKit;Applet數(shù)字簽名;JNLP
自20世紀(jì)70年代,配置控制理論第一次被提出以來(lái),在版本控制工具領(lǐng)域中出現(xiàn)了很多配置管理工具如CVS、VSS、Git、SVN等,其中CVS是很多中小軟件公司使用最頻繁的版本控制工具,但由于它不能對(duì)目錄實(shí)現(xiàn)版本控制,不能記錄目錄的版本歷史,在軟件開(kāi)發(fā)中不能實(shí)現(xiàn)文件的“移動(dòng)”、“重命名”、“拷貝”等操作,使之逐漸被SVN(Subversion)取代。2000年2月, CollabNet公司啟動(dòng)SVN項(xiàng)目,它的目標(biāo)就是實(shí)現(xiàn)CVS的絕大部分功能,并充分考慮現(xiàn)有的CVS用戶,使用方式上類(lèi)似CVS。由于SVN的源代碼是公開(kāi)的,所以最近幾年來(lái),Subversion在國(guó)內(nèi)發(fā)展很迅速,被廣泛應(yīng)用于大小軟件公司,對(duì)各種資源文件進(jìn)行管理。Subversion目前使用最為廣泛的開(kāi)源版本控制系統(tǒng),和客戶端TortoiseSVN一起管理工作區(qū)文件。它的核心是版本庫(kù),儲(chǔ)存所有隨時(shí)間而變化的數(shù)據(jù)。
隨著Web技術(shù)的不斷發(fā)展,互聯(lián)網(wǎng)已經(jīng)日益成為人們默認(rèn)的工作平臺(tái),傳統(tǒng)的客戶端工作區(qū)及管理客戶端工作區(qū)文件的版本控制軟件因不能滿足人們?cè)赪eb環(huán)境上工作的需求而逐漸向互聯(lián)網(wǎng)上轉(zhuǎn)移。因此,本文開(kāi)發(fā)的LiveSVNPlugin能夠解決在Web工作區(qū)管理文件的問(wèn)題,且是采用最新的RIA(Rich Internet Application,富互聯(lián)網(wǎng)應(yīng)用)[1]技術(shù)開(kāi)發(fā)的Java Web插件。RIA既具有傳統(tǒng)B/S結(jié)構(gòu)的Web應(yīng)用在開(kāi)發(fā)、部署和維護(hù)方面的便利優(yōu)勢(shì),也具有桌面應(yīng)用在交互能力和表現(xiàn)能力上所具有的美好體驗(yàn)。LiveSVNPlugin采用了最新的Web開(kāi)發(fā)技術(shù),如HTML5、CSS3、JQuery、LiveConnect等,操作靈活,集成方便,很容易嵌入其他Web項(xiàng)目中,用于實(shí)現(xiàn)對(duì)Web工作區(qū)上文件的版本控制。該插件實(shí)現(xiàn)了Subversion客戶端的基本功能,相對(duì)于目前使用的客戶端版本控制軟件,在Web領(lǐng)域具有很大使用價(jià)值,必定會(huì)是版本控制系統(tǒng)領(lǐng)域的一個(gè)突破。
1.1LiveConnect技術(shù)介紹
LiveConnect技術(shù)[1]是Web瀏覽器允許Java和JavaScript在Web頁(yè)面內(nèi)彼此交互溝通的一個(gè)新特性。它是目前實(shí)現(xiàn)Java App let應(yīng)用的一個(gè)DOM接口,允許每個(gè)程序操縱其包含的網(wǎng)頁(yè),包括Java類(lèi)調(diào)用JavaScript方法和訪問(wèn)JavaScript環(huán)境及JavaScript訪問(wèn)Java對(duì)象和調(diào)用Java方法。LiveConnect技術(shù)提供了兩個(gè)Java Applet的API包用于與JavaScript通信。這兩個(gè)包是netscape.javascript和netscape.plugin。其中netscape. javascript在客戶端和服務(wù)器端上都可以使用,包含兩個(gè)類(lèi):
netscape.javascript.JSObject和netscape.javascript. JSException,但netscape.plugin只能使用在客戶端,包含一個(gè)類(lèi):netscape.plugin.Plugin。
雖然LiveConnect通過(guò)連接JavaScript與Java可以創(chuàng)建非常強(qiáng)大的應(yīng)用程序,但是LiveConnect并不完全支持所有瀏覽器,目前,僅Netscape瀏覽器和Mozilla Firefox完全支持這個(gè)特性。通過(guò)LiveConnect技術(shù)可以開(kāi)發(fā)出各種瀏覽器和客戶端交互的豐富的應(yīng)用程序。Applet與JavaScript的具體通信過(guò)程如下:
(1)JavaScript調(diào)用Java Applet:
window.document.SVNApplet.SVNFunction();
其中,SVNApp let是Java Applet應(yīng)用,SVNFunction()是SVNApplet里面的public類(lèi)型的方法。
(2)Java Applet調(diào)用JavaScript方法:
//獲取JavaScript窗口句柄,引用當(dāng)前文檔窗口this值object類(lèi)
JSObjectwin=JSObject.getWindow(this);
//調(diào)用頁(yè)面上的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]是一個(gè)完全基于Java的訪問(wèn)Subversion版本控制系統(tǒng)的一個(gè)客戶端工具庫(kù),它具有很高的獨(dú)立性,具有跨操作系統(tǒng)的特性。Subversion是一家領(lǐng)先的和快速增長(zhǎng)的開(kāi)源版本控制系統(tǒng),而SVNKit使Subversion更接近Java世界!SVNKit是純粹的Java工具包,它實(shí)現(xiàn)了Subversion所有功能,提供了在Java應(yīng)用程序上操作Subversion工作副本及訪問(wèn)和操作Subversion版本庫(kù)的一切API接口,并且兼容Subversion的最新版本,同時(shí)也支持SSH、HTTP、SVN和文件傳輸協(xié)議。
SVNKit對(duì)外提供的API編程接口中,主要有兩個(gè)High Level API和Low Level API,其中,通過(guò)High Level API接口,幾乎可以實(shí)現(xiàn)Subversion的所有操作,包括檢出、更新、提交、查看歷史、比較差異和瀏覽版本庫(kù)等。Low Level API接口封裝了Subversion版本庫(kù)的連接細(xì)節(jié),常用它來(lái)連接和直接操作版本庫(kù)。通過(guò)SVNKit技術(shù),可以開(kāi)發(fā)出自己所需要的具有SVN特色各種應(yīng)用程序。
圖1 LiveSVNPlugin功能結(jié)構(gòu)圖
2.2LiveSVNPlugin內(nèi)部功能結(jié)構(gòu)類(lèi)圖
在本項(xiàng)目中,登錄用戶可以看到遠(yuǎn)程工作空間上自己有權(quán)限的目錄和文件,并可以看到這些目錄和文件受(.svn)控制的狀態(tài)。它們的實(shí)現(xiàn)是基于異步加載的方式和SVNKit的相關(guān)方法在Servelet里面實(shí)現(xiàn)的,包括ourClientManager.getStatusClient().doStatus和manager.parseRootPaths(new User(userName),null))等方法。
通過(guò)LiveSVNPlugin插件,實(shí)現(xiàn)了在Web環(huán)境下對(duì)客戶端的存取操作,主要包括checkout、update、commit、delete、add、rename等SVN客戶端的常用操作,這些功能主要通過(guò)SVNkit里面的High Level API接口的doStatus、doCommit、doAdd、doUpdate、doDelete等方法實(shí)現(xiàn)。
LiveSVNPlugin插件功能原理的結(jié)構(gòu)類(lèi)圖如圖2所示。
圖2 LiveSVNPlugin和SVNKit功能結(jié)構(gòu)對(duì)應(yīng)圖
在LiveSVNPlugin部署方面采用的是JNLP技術(shù)。JNLP(Java Network Launching Protocol,Java網(wǎng)絡(luò)加載協(xié)議)是Java提供的一種可以通過(guò)瀏覽器直接執(zhí)行Java應(yīng)用程序的途徑,它可以在客戶端瀏覽器上運(yùn)行Java小應(yīng)用程序。JavaWeb應(yīng)用以JNLP的方式發(fā)布,版本升級(jí),不需要再向所有用戶發(fā)布版本,只需要更新服務(wù)器的版本,這與傳統(tǒng)的Windows應(yīng)用的版本發(fā)布是完全不同的,使Java應(yīng)用程序有了Web應(yīng)用的優(yōu)點(diǎn)。
由于Java Applet程序可以從客戶端瀏覽器上下載到本地客戶端,然后在客戶端運(yùn)行,這樣就導(dǎo)致惡意的Applet程序也有可能會(huì)破壞客戶端系統(tǒng)。并且因?yàn)镴ava安全機(jī)制的限制[3],Java把Applet限定運(yùn)行在瀏覽器規(guī)定的“沙盒(SandBox)”環(huán)境區(qū)域中,在這個(gè)區(qū)域中不能實(shí)現(xiàn)Applet對(duì)本地文件的存取,因此我們需要對(duì)Applet進(jìn)行簽名認(rèn)證,使簽名后的Applet具有普通Java應(yīng)用一樣的權(quán)限,未簽名的Applet依然運(yùn)行在“沙盒”中,這樣可以使客戶端的安全問(wèn)題得到解決。Applet數(shù)字簽名技術(shù)就是為突破JRE安全機(jī)制的限制而提出的解決方案。在本系統(tǒng)中主要是通過(guò)Applet實(shí)現(xiàn)SVN操作來(lái)完成對(duì)遠(yuǎn)程工作區(qū)文件的存取。
3.1在HTML頁(yè)面嵌入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,除了具有簡(jiǎn)化HTML代碼,把Applet需要Logo,提示信息,引用的第三方插件等資源封裝到一個(gè)JNLP文件中,對(duì)Applet維護(hù)方便,同時(shí)可以自動(dòng)下載并安裝最新JRE版本的功能。部署過(guò)程如下:
其中,SVNApplet.jar是通過(guò)MyEclipse把SVNApplet.class打的JAR包也就是上文提到的LiveSVNPlugin插件),其他JAR包是系統(tǒng)所引用的第三方插件包,<all-permissions/>表示允許所有簽名的Applet操作。
3.3Applet數(shù)字簽名[4]
使用JDK自帶的keytool和jarsigner工具對(duì)生成的SVNApplet.jar文件簽名。
步驟如下:
(1)將Applet class文件打成jar包,命令如下:使用JAR打包命令:jar cvfm SVNApplet.jarmanifest.mf*.class lib*.jar
或MyEclpse自帶打包工具到處JAR包
(2)生成秘鑰庫(kù),這個(gè)過(guò)程需要輸入密匙庫(kù)的密碼,命令如下:
keytool-genkey-keystore SVNApplet.keystore-alias SVNApplet
(3)生成簽名時(shí)所要用的證書(shū),命令如下:
Keytool-export-keystore SVNApplet.keystore-alias SVNApplet-file SVNApplet.cer
(4)用上一步產(chǎn)生的證書(shū)對(duì)jar文件進(jìn)行簽名,命令如下:
jarsigner-keystore SVNApplet.keystore SVNApplet.jar SVNApplet
簽名結(jié)果如圖3所示:
圖3 LiveSVNPlugin簽名結(jié)果圖
如果看到“jar已簽名”,如圖1所示,并且新生成SVNApplet.keystore和SVNApp let.cer兩個(gè)文件,說(shuō)明LiveSVNPlugin簽名成功。
隨著瀏覽器和JRE的不斷升級(jí),Java的安全機(jī)制也不斷變化,從Java 7 Update 51開(kāi)始,Java不在支持除Sun公司以外其他機(jī)構(gòu)和個(gè)人發(fā)布的簽名證書(shū)。為解決這一問(wèn)題,Java引入了“例外站點(diǎn)”列表功能,在Java控制臺(tái)的例外站點(diǎn)中加入項(xiàng)目URL地址即可。運(yùn)行項(xiàng)目,初次運(yùn)行會(huì)彈出簽名證書(shū)認(rèn)證窗口,如圖4所示。
圖4 RIASVN項(xiàng)目LiveSVNPlugin安全驗(yàn)證圖
其中RIASVN是項(xiàng)目名稱(chēng),LiveSVNPlugin在詳細(xì)信息中可以看到。如果看到簽名的姓名是自己信任的,則選中“接受”,然后點(diǎn)“運(yùn)行”。第一次運(yùn)行該網(wǎng)頁(yè)會(huì)有證書(shū)提示,選擇運(yùn)行以后再運(yùn)行此網(wǎng)頁(yè)將不再提示驗(yàn)證信息。如果選擇“取消”,則只可以瀏覽網(wǎng)頁(yè),不可以進(jìn)行存取等其他交互操作,下次再運(yùn)行此網(wǎng)頁(yè),仍然還會(huì)有證書(shū)確認(rèn)信息彈出。
在Windows Java控制臺(tái)查看緩存文件,若看到插件LiveSVNPlugin,右鍵查看到LiveSVNPlugin詳細(xì)信息,則說(shuō)明JNLP部署LiveSVNPlugin成功完成,如圖5所示:
圖5 控制臺(tái)應(yīng)用緩存圖
SVN是近年來(lái)崛起的版本管理軟件系統(tǒng),是使用最廣泛的版本管理軟件之一,而且功能齊全,但是隨著Web技術(shù)的不斷發(fā)展,為了適應(yīng)在線管理文件的需要,版本控制軟件在富互聯(lián)網(wǎng)(RIA)上的需求越來(lái)越多,SVN在RIA上有很大的研究?jī)r(jià)值和發(fā)展空間,本文重點(diǎn)研究SVN在互聯(lián)網(wǎng)上的應(yīng)用而開(kāi)發(fā)的LiveSVNPlugin插件,實(shí)現(xiàn)了在Web上所具有的SVN的基本功能,主要有checkout、update、commit、delete、add、rename,資源空間和本地資源交互(上傳和下載)等。和TortoiseSVN的強(qiáng)大功能相比還有很大差距,相關(guān)工作還需要繼續(xù)探索,同時(shí)為了服務(wù)于Web,SVN版本倉(cāng)庫(kù)在互聯(lián)網(wǎng)上的遠(yuǎn)程管理也必將會(huì)是SVN以后的研究重點(diǎn)。
[1]Rich Internet Application高級(jí)編程:后AJAX時(shí)代,清華大學(xué)出版社,2009.01
[2]使用Subversion進(jìn)行版本控制,北京出版社,2009
[3]朱連章.通過(guò)Applet與Servlet通信突破Applet的限制.微計(jì)算機(jī)信息,2004(4)
[4]劉丹,褚蓓蓓.用Java語(yǔ)言實(shí)現(xiàn)電子政務(wù)中的數(shù)字簽名[J].計(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-),男,安徽渦陽(yáng)人,碩士研究生,研究方向?yàn)閿?shù)據(jù)庫(kù)開(kāi)發(fā)與應(yīng)用、軟件開(kāi)發(fā)與系統(tǒng)架構(gòu)
任洪敏(1969-),男,上海浦東人,博士,副教授,研究方向?yàn)檐浖w系結(jié)構(gòu)、軟件復(fù)用、軟件項(xiàng)目管理
2015-04-29
2015-05-19