DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> Java編程教程:SecureJSH特性簡介
Java編程教程:SecureJSH特性簡介
編輯:關於JavaScript     

網頁制作poluoluo文章簡介:JavaEye上活躍的開發者Complystill(歆淵)最近發布了自己的開源SecureJSH項目,提供了一個通過SSH交互進行Java應用開發或者管理的工具。 在項目的介紹中可以得知,SecureJSH與Ptyhon裡面的ipython或者Ruby裡面的irb非常相似。它們都允許交互式運行語言的代碼,以方便跟

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的使用方法,相信一定會有所收獲。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved