古詩詞大全網 - 個性簽名 - JS嵌入Java程序

JS嵌入Java程序

隨著java的出現,在java中嵌入javaScript腳本變得特別容易。Java引入了壹個新的javax腳本包,它為腳本語言提供了壹個公共接口。

案例;在新穎的網絡Java中嵌入javaScript腳本的想法

獲取腳本解釋器的管理器。

從管理器中獲取js的解釋器實例ScriptEngine。

獲取存儲javascript變量的綁定實例。

向ScriptEngine的eval()方法傳遞壹個java io Reader流和綁定,運行存儲在外部文件中的腳本eval()方法,返回腳本運行結果。如果在執行過程中發生錯誤,將引發ScriptException異常。

運行javascript腳本的java程序

進口?Java io *;進口?javax腳本綁定;進口?javax腳本ScriptEngine進口?javax腳本ScriptEngineManager進口?javax腳本ScriptException/* *作者?被誰?id=?*/公共?班級?RunScript?{公?靜電?作廢?main(String[]?args)?摔投?io exception { ScriptEngineManager?scriptManager?=?新的?script engine manager();//獲取解釋器的管理器中有很多種腳本解釋器ScriptEngine?js?=?script manager getEngineByExtension(;js);//從管理器中獲取js的解釋器//定義我們要運行的腳本文件字符串?文件名?=?null//通過解釋器獲取存儲javascript變量的綁定實例,並提供給腳本綁定?綁定?=?js create bindings();//處理參數parameter是腳本定義的變量參數,可能包含Dname/value。我們要處理的任何參數都不能以d開頭作為(int?我?=?;我& ltargs長度;i++){String?arg?=?args[I];If(arg startsWith( D )){//如果參數以D開頭,處理int?pos?=?arg index of(=);如果(pos?==?)?用法();字符串?name = arg substring(pos);字符串?值=?arg子串(pos+);//註意,我們定義的所有變量都是字符串。如果有必要,我們可以使用java lang Number?壹個java語言布爾任意Java對象或NULL將腳本轉換成其他類型的綁定put(name?值);//腳本中的變量存儲在綁定實例中}else{if(filename!=null)用法();文件名=參數;} }//這是為了保證我們得到參數if(filename==null){usage()的壹個文件;}//添加壹個綁定文件名,告訴腳本引擎將執行壹個特殊的保留變量名,這使它能夠提供更好的錯誤信息綁定put(腳本引擎文件名?文件名);//讀取文件的流閱讀器?在?=?新的?FileReader(文件名);嘗試{//執行腳本並獲得結果。註意,in相當於js中的腳本,bindings是腳本執行所需的變量對象。結果?=?js eval(在綁定中);系統輸出println(結果);}catch(ScriptException?Ex){//如果執行過程中出現異常,會顯示錯誤消息System out println(ex);} }靜態?作廢?用法(){System err println(用法:?java?RunScript[ Dname=value]?腳本js);系統出口();//非正常退出程序,正常退出程序使用System exit();}}?

在這段代碼中創建的Bindings對象不是靜態的。JavaScript腳本創建的所有變量都存儲在這裏。下面是腳本化Java的壹個更實際的例子。它將其Bindings對象存儲在具有更高範圍的ScriptContext對象中,以便可以讀取其變量,但新變量不會存儲在Binhdings對中。在本例中,實現了壹個簡單的配置工具(文本文件)來定義名稱/值對,可以通過這裏定義的配置類來查詢它們,它們的值可以是字符串或布爾值,如果壹個值用花括號括起來,它將被傳遞給JavaScript解釋器來計算包裝在SimpleBindings對象中的值,這樣JavaScript解釋器也可以訪問同壹文件中定義的其他變量的值。

Lishi Xinzhi/Article/program/Java/JSP/201311/19250