當前位置:成語大全網 - 新華字典 - JS嵌入到Java程序中

JS嵌入到Java程序中

 隨著java 的出現 向java嵌入javascript腳本變的特別容易 java 引入了壹個新的javax script包 為腳本化語言提供了壹個通用接口

 案例 ; 小說 網java中嵌入javascript腳本的思路

  取得腳本解釋器的管理器Manager

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

  取得存儲javascript變量的Bindings實例

  把壹個java io Reader流及Bindings傳遞給ScriptEngine的eval()方法 從而運行存儲在外部文件中的腳本 eval()方法返回腳本運行結果 如果執行中發生錯誤 會拋出ScriptException異常

 例 運行javascript腳本的壹個java程序

  import?java io *;import?javax script Bindings;import?javax script ScriptEngine;import?javax script ScriptEngineManager;import?javax script ScriptException;/**author?by?id= ?*/public?class?RunScript?{public?static?void?main(String[]?args)?throws?IOException{ScriptEngineManager?scriptManager?=?new?ScriptEngineManager();//得到解釋器的管理器 裏面有很多種腳本解釋器ScriptEngine?js?=?scriptManager getEngineByExtension( ;js );//從管理器中獲取js的解釋器//定義我們要運行的腳本文件String?filename?=?null;//通過解釋器來獲得存儲javascript變量的Bindings的實例 使它們提供給腳本 Bindings?bindings?=?js createBindings();//處理參數 參數是定義的腳本的變量 參數可能包括 Dname/value對 我們要進行處理 任何參數不能以 D 為文件名開始for(int?i?=? ;i<args length;i++){String?arg?=?args[i];if(arg startsWith( D )){//如果參數是以 D 開頭 則進行處理int?pos?=?arg indexOf( = );if(pos?==? )?usage();String?name=arg substring( pos);String?value=?arg substring(pos+ );//註意 我們定義的所有的變量是字符串 如果必要的話 我們可以通過java lang Number? 壹個java lang Boolean 任何Java對象或NULL 將腳本轉換為其他類型 bindings put(name ?value);//腳本中的變量存入bindings實例中}else{if(filename!=null)usage();filename=arg;}}//這裏是為了確保我們得到了壹個文件的參數 if(filename==null){usage();}//增加壹個具有約束力的使用特殊的保留變量名稱 告訴腳本引擎的文件的名稱將執行 這使它能夠提供更好的錯誤信息bindings put(ScriptEngine FILENAME ?filename);//讀取文件的流Reader?in?=?new?FileReader(filename);try{//執行腳本並取得結果 註意in就相當於js中的腳本 而bindings是腳本執行所需要的變量Object?result?=?js eval(in bindings);System out println(result);}catch(ScriptException?ex){//執行過程中出異常則顯示壹個錯誤信息System out println(ex);}}static?void?usage(){System err println( Usage:?java?RunScript[ Dname=value]?script js );System exit( );//異常退出程序 如果正常退出程序用System exit( );}}?

 這段代碼中所創建的Bindings對象不是靜態的 JavaScript腳本所創建的所有的變量都存儲在這裏 下面是壹個腳本化Java的更加實用的例子 它將它的Bindings對象存儲在壹個具有較高的作用域的ScriptContext對象中 以便可以讀取其變量 但是新的變量就不存儲到Binhdings對象中 這個例子實現了壹個簡單的配置文件工具 即壹個文本文件 用來定義名字/值對 可以通過這裏定義的Configuration類來查詢它們 值可能是字符串 數字或布爾值 並且 如果壹個值包含在花括號中 那麽它就會傳遞給壹個JavaScript解釋器去計算 java util Map對象保存了這些包裝在壹個SimpleBindings對象中的值 這樣壹來 JavaScript解釋器也可以訪問同壹個文件中定義的其他變量的值

lishixinzhi/Article/program/Java/JSP/201311/19250