日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码。

發布時間:2023/11/30 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JDK1.6版添加了新的ScriptEngine類,允許用戶直接執行js代碼。

在Java中直接調用js代碼

不能調用瀏覽器中定義的js函數,會拋出異常提示ReferenceError:?“alert”?is?not?defined。

[java]?view plain?copy
  • package?com.sinaapp.manjushri;???
  • import?javax.script.ScriptEngine;???
  • import?javax.script.ScriptEngineManager;??
  • import?javax.script.ScriptException;???/**??*?直接調用js代碼??*/??
  • ??????????
  • ??public?class?ScriptEngineTest?{??????
  • ????public?static?void?main(String[]?args)?{???
  • ????????ScriptEngineManager?manager?=?new?ScriptEngineManager();??
  • ????????ScriptEngine?engine?=?manager.getEngineByName("javascript");??
  • ??????????try?{??????
  • ????????????engine.eval("var?a=3;?var?b=4;print?(a+b);");??????
  • ????????????//?不能調用瀏覽器中定義的js函數??????
  • ????????????//?engine.eval("alert(\"js?alert\");");?????
  • ????????????//?錯誤,會拋出alert引用不存在的異常?????
  • ??????????}?catch?(ScriptException?e)?{??
  • ??????????????e.printStackTrace();?????
  • ??????????}????
  • ??????}?????
  • }??
  • 輸出結果:7

    在Java中綁定js變量


    在調用engine.get(key);時,如果key沒有定義,則返回null

    [java]?view plain?copy
  • package?com.sinaapp.manjushri;?????
  • import?javax.script.Bindings;???
  • import?javax.script.ScriptContext;???
  • import?javax.script.ScriptEngine;???
  • import?javax.script.ScriptEngineManager;???
  • import?javax.script.ScriptException;?????
  • ????????????
  • public?class?ScriptEngineTest2?{???
  • ????public?static?void?main(String[]?args)?{?????
  • ????????ScriptEngineManager?manager?=?new?ScriptEngineManager();?????
  • ??????????ScriptEngine?engine?=?manager.getEngineByName("javascript");?????
  • ??????????engine.put("a",?4);???engine.put("b",?3);?????
  • ??????????Bindings?bindings?=?engine.getBindings(ScriptContext.ENGINE_SCOPE);??
  • ??????????try?{??
  • ??????????????//?只能為Double,使用Float和Integer會拋出異常??
  • ??????????????Double?result?=?(Double)?engine.eval("a+b");??
  • ??????????????System.out.println("result?=?"?+?result);??
  • ??????????????engine.eval("c=a+b");??
  • ??????????????Double?c?=?(Double)engine.get("c");??
  • ??????????????System.out.println("c?=?"?+?c);??
  • ??????????}?catch?(ScriptException?e)?{??
  • ??????????????e.printStackTrace();?????
  • ??????????}????
  • ??????}???
  • ??}??
  • 輸出:
    result?=?7.0
    c?=?7.0

    在Java中調用js文件中的function,傳入調用參數,并獲取返回值

    js文件中的merge函數將兩個參數a,b相加,并返回c。
    [javascript]?view plain?copy
  • //?expression.js???
  • function?merge(a,?b)?{???
  • ?????c?=?a?*?b;???
  • ?????return?c;???
  • }??
  • 在Java代碼中讀取js文件,并參數兩個參數,然后回去返回值 [java]?view plain?copy
  • package?com.sinaapp.manjushri;????
  • ?import?java.io.FileReader;????
  • ?import?javax.script.Invocable;??
  • ?import?javax.script.ScriptEngine;??
  • ?import?javax.script.ScriptEngineManager;????
  • ?/**??*?Java調用并執行js文件,傳遞參數,并活動返回值??*???*?@author?manjushri??*/??
  • ?public?class?ScriptEngineTest?{?????
  • ?????public?static?void?main(String[]?args)?throws?Exception?{?????
  • ????????ScriptEngineManager?manager?=?new?ScriptEngineManager();?????
  • ????????ScriptEngine?engine?=?manager.getEngineByName("javascript");??????
  • ?????????String?jsFileName?=?"expression.js";????
  • ?????????//?讀取js文件?????
  • ????????FileReader?reader?=?new?FileReader(jsFileName);?????
  • ????????//?執行指定腳本????
  • ?????????engine.eval(reader);?????
  • ????????if(engine?instanceof?Invocable)?{?????
  • ?????????????Invocable?invoke?=?(Invocable)engine;??????
  • ????????????//?調用merge方法,并傳入兩個參數?????
  • ?????????????//?c?=?merge(2,?3);?????
  • ?????????????Double?c?=?(Double)invoke.invokeFunction("merge",?2,?3);?????
  • ?????????????System.out.println("c?=?"?+?c);?????
  • ????????}?????
  • ????reader.close();???
  • ?}???
  • }??
  • 輸出結果:
    c?=?5.0

    總結

    以上是生活随笔為你收集整理的JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码。的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。