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

首頁 > 開發 > JS > 正文

Java編程教程:SecureJSH特性簡介

2024-09-06 12:40:57
字體:
來源:轉載
供稿:網友
javaeye上活躍的開發者complystill(歆淵)最近發布了自己的開源securejsh項目,提供了一個通過ssh交互進行java應用開發或者管理的工具。

 

在項目的介紹中可以得知,securejsh與ptyhon里面的ipython或者ruby里面的irb非常相似。它們都允許交互式運行語言的代碼,以方便跟蹤或者調試應用。但是,java與ruby、python不同,后者是動態腳本語言,它們天生具有解釋執行的特點(注意:當然python支持預編譯,ruby也將在yarv中開始支持,這里指它們的解釋執行狀態)。我們常見的python和ruby發行版本基本上都包括自己的解釋器(這也是它們的核心組件),但是java是一種需要中間編譯過程的語言,默認情況下它無法直接解釋運行,也沒有相應的解釋器。

 

那么securejsh是如何實現的呢?讀者首先會想到jsr-223,這個api可以自己擴展腳本語言支持,比如rhino是 javascript解釋引擎。但是使用它難以實現交互操作,因為它必須輸入一個相對完整的腳本才可以運行,這樣會喪失一部分交互性。securejsh 實際上是使用了jdk 6.0的新特性java compiler api(jsr-199),它提供了一組api來讓程序可以動態地訪問java編譯器的接口,這樣就可以使用java編譯器動態檢查代碼語法或者動態根據 java源碼生成可以執行的字節碼。這種方式與asm的編程直接生成字節碼不同,它能直接將java源碼轉換為字節碼,xruby的主力開發者鄭曄(網名 dreamhead)在他的blog中這樣對比了兩種方案:

 

之前,剛剛在blog中提到asm,里面的代碼生成工作是通過直接寫 字節碼完成的。現在有了compiler api,可以考慮生成代碼以java源碼的形式完成,然后,通過調用compiler api對源碼進行動態編譯,這樣,可以達到同直接寫字節碼類似的作用。使用compiler api,肯定不如直接生成字節碼來得高效,但對于不了解jvm指令的人來說這也許是一種解決方案。

可見jsr-199不是最高效的字節碼生成方案,但是更方便使用。java compiler api不是為了取代asm這樣的方案的,它的本意是以編程的方式實現實時編譯及信息反饋。java目前的主要架構師之一peter von der ahé曾經在他的blog對誰需要使用java compiler api這個問題做了如下解釋:

 

99%的java開發者都不需要了解java compiler api。只有少數的開發者會直接應用這個api。但是ide、java ee應用程序服務器、maven或者ant還有測試框架的開發者卻不一樣,他們有一個共同點,就死需要調用編譯器將java源碼轉換為類文件(他們是這個 api的潛在用戶)。

可見jsr-199的產生主要是面向熱部署或者增量編譯這樣的場合,但是securejsh的產生擴展了java compiler api的應用場景,同時也增強了java和jvm的交互性。complystill這樣介紹了securejsh的應用場景和需求:

 

securejsh允許java編寫的服務器端應用程序為管理員、客戶、開發者和客戶端服務提供一個安全shell,這里可以交互性地讓java語言逐句運行。securejsh需要jdk 6.0或者jre 6.0加javac(在classpath中)來運行。

securejsh的官方首頁這樣描述了它的主要特性:

安全:securejsh在服務器端實現了rfc-4251,ssh 2.0協議,支持公鑰認證,這種方式方便安全(不需要每次輸入密碼)。

交互式執行:傳 統的方式下,在運行java源代碼之前你必須將它們編譯為字節碼。但是使用securejsh,編譯的過程是透明完成的,所以你只需要隨意輸入一些 java表達式(就可以運行)。這意味著你可以使用你書寫應用程序時完全相同的語法,與最新的java語言規范同步。你可以在你的java項目源碼和 securejsh終端里面拷貝&粘貼任何代碼,都沒有問題。

智能命令識別,unix shell風格:不 像jsr-223(java scripting engin,java腳本引擎)對java語言的腳本的支持,在(java腳本引擎)里面你必須將java類的全部代碼輸入后才可以執行, securejsh更加智能和人性化,如果你輸入了不完整的java表達式,它會自動提示你進行多行的輸入,然后將這些表達式包裝到一個預先定義的類結構 中來執行。它是一個真正的shell。

沒有相互干擾,最小化資源消耗:securejsh沒有需要儲存在jvm范圍的靜態資源,每一個實例只消耗很少量的資源(基于nio實現,所有的ssh通訊都由一個線程處理)。你可以按照你的想法在一個jvm里面運行任意多個shell服務,包括java應用程序服務器的jvm。

作為一個開源項目,securejsh使用了ganymed的純java實現的ssh 2.0庫,并使用java nio編寫了網絡服務,代碼質量很高。據comply still介紹,securejsh最初是為內存數據庫tob設計的,為這個面向對象數據庫提供交互訪問的接口,但是后來作者發現它可以被應用在很多場合,所以單獨開源發布。作為java開發者,您可以從這里下載源碼從中學習ssh 2.0、nio網絡服務、java compiler api的使用方法,相信一定會有所收獲。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇信县| 富阳市| 湟源县| 抚宁县| 义马市| 汕头市| 湟源县| 西城区| 西乌珠穆沁旗| 囊谦县| 赤水市| 高要市| 阿巴嘎旗| 长武县| 阿城市| 武义县| 高州市| 宜丰县| 内乡县| 浮梁县| 农安县| 怀仁县| 巴里| 建湖县| 海伦市| 涞水县| 南江县| 台山市| 衡东县| 静乐县| 黄梅县| 伊通| 贺兰县| 腾冲县| 久治县| 兴义市| 平顶山市| 永登县| 岳阳县| 绍兴市| 台江县|