最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中使用JavaScript腳本的方法步驟

 更新時間:2020年06月10日 14:36:25   作者:SimpleWu  
這篇文章主要介紹了Java中使用JavaScript腳本的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

簡介 Nashorn

Nashorn 一個 javascript 引擎。

從JDK 1.8開始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成為Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript 5.1規(guī)范以及一些擴(kuò)展。

它使用基于JSR 292的新語言特性,其中包含在JDK 7中引入的 invokedynamic,將JavaScript編譯成Java字節(jié)碼。

與先前的Rhino實(shí)現(xiàn)相比,這帶來了2到10倍的性能提升。

使用方式

1. 編寫JavaScript腳本

列:JavaScript方法使用Java對象執(zhí)行方法獲取返回值。

function scriptFunction(obj){
 var a = 1;
 var b = 2;
 return obj.sum(a,b);
}
scriptFunction(obj);//調(diào)用該方法

該腳本變量定義為 String script1;

2. 創(chuàng)建JavaScript容器用戶存儲腳本 ScirptContainer.java

public class ScirptContainer {
 
 
 public static ScriptEngine engine;//腳本引擎
 
 static {
 ScriptEngineManager manager = new ScriptEngineManager();//腳本引擎管理
 engine = manager.getEngineByName("nashorn");//獲取nashorn腳本引擎
 engine.getContext().getWriter();//獲取正文并且寫入
 }
 
 private ConcurrentHashMap<Integer, CompiledScript> scripts = new ConcurrentHashMap<>();//腳本存儲容器
 
 
 public CompiledScript getCompiledScript(String script) throws ScriptException{
 //判斷腳本是否為空
 if(script == null || "".equals(script)){
 throw new ScriptException("JavaScript empty");
 }
 //獲取腳本Hash
 int hashCode = script.hashCode();
 //從容器中獲取腳本
 CompiledScript compiledScript = scripts.get(hashCode);
 if(compiledScript == null){
 //容器中無腳本創(chuàng)建腳本對象
 Compilable compilable = (Compilable) engine;
 //編譯JavaScript腳本
 compiledScript = compilable.compile(script);
 //腳本對象存入容器中
 scripts.put(hashCode, compiledScript);
 }
 return compiledScript;
 } 
}

3. Java執(zhí)行JavaScript腳本

public class ScriptHandler {
 
 //創(chuàng)建容器對象
 private ScirptContainer scirptContainer = new ScirptContainer();
 
 //需要執(zhí)行的對象
 String js1 = "function scriptFunction(obj){ var a = 1; var b = 2; return obj.sum(a,b); } scriptFunction(obj);";
 
 @Test
 public void test() throws ScriptException{
 //獲取腳本對象
 CompiledScript c1 = scirptContainer.getCompiledScript(js1);
 //創(chuàng)建參數(shù)綁定
 Bindings bindings = scirptContainer.engine.createBindings();
 //obj參數(shù)綁定SumTest類
 bindings.put("obj", new SumTest());
 //執(zhí)行JavaScript腳本并且打印返回值
 System.out.println(c1.eval(bindings));
 }
}

注意事項(xiàng):

  • 腳本中scriptFunction(obj);是必須存在,否則不會執(zhí)行方法.
  • 腳本中可以創(chuàng)建Java對象,需要全類名如var map = new java.util.HashMap();

到此這篇關(guān)于Java中使用JavaScript腳本的方法步驟的文章就介紹到這了,更多相關(guān)Java使用JavaScript腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

作者: SimpleWu

出處:https://www.cnblogs.com/SimpleWu/p/12598442.html

本站使用「SimpleWu BY 4.0」創(chuàng)作共享協(xié)議,轉(zhuǎn)載請?jiān)谖恼旅黠@位置注明作者及出處。

相關(guān)文章

  • IDEA創(chuàng)建自定義模板圖文教程

    IDEA創(chuàng)建自定義模板圖文教程

    我們每次在使用IntelliJ IDEA 時總會有一些文件是一直被創(chuàng)建的,今天我們就來學(xué)習(xí)一下IntelliJ IDEA 的自定義模板功能,文中有詳細(xì)的圖文介紹,需要的朋友可以參考下
    2021-05-05
  • Springboot?格式化LocalDateTime的方法

    Springboot?格式化LocalDateTime的方法

    這篇文章主要介紹了Springboot格式化LocalDateTime的相關(guān)知識,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • mybatis中如何實(shí)現(xiàn)一個標(biāo)簽執(zhí)行多個sql語句

    mybatis中如何實(shí)現(xiàn)一個標(biāo)簽執(zhí)行多個sql語句

    這篇文章主要介紹了mybatis中如何實(shí)現(xiàn)一個標(biāo)簽執(zhí)行多個sql語句問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • java基礎(chǔ)之泛型知識點(diǎn)總結(jié)

    java基礎(chǔ)之泛型知識點(diǎn)總結(jié)

    這篇文章主要介紹了java基礎(chǔ)之泛型知識點(diǎn)總結(jié),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Spring中容器創(chuàng)建的四種方式示例

    Spring中容器創(chuàng)建的四種方式示例

    這篇文章主要介紹了Spring中容器創(chuàng)建的四種方式示例,Spring容器是Spring框架的核心部分,它負(fù)責(zé)管理和組織應(yīng)用程序中的對象,它提供了一種輕量級的、非侵入式的方式來實(shí)現(xiàn)對象的創(chuàng)建、依賴注入和生命周期管理,需要的朋友可以參考下
    2023-10-10
  • Spring整合Junit的使用詳解

    Spring整合Junit的使用詳解

    這篇文章主要介紹了Spring整合Junit的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 關(guān)于@SpringBootApplication詳解

    關(guān)于@SpringBootApplication詳解

    這篇文章主要介紹了關(guān)于@SpringBootApplication的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java web在高并發(fā)和分布式下實(shí)現(xiàn)訂單號生成唯一的解決方案

    java web在高并發(fā)和分布式下實(shí)現(xiàn)訂單號生成唯一的解決方案

    這篇文章主要介紹了java web在高并發(fā)和分布式下實(shí)現(xiàn)訂單號生成唯一的解決方案,需要的朋友可以參考下
    2017-11-11
  • 一文詳解Java線程的6種狀態(tài)與生命周期

    一文詳解Java線程的6種狀態(tài)與生命周期

    一個線程在給定的時間點(diǎn)只能處于一種狀態(tài)。線程可以有6種狀態(tài):New、Runnable、Blocked、Waiting、Timed?waiting和Terminated。本文將詳細(xì)講解這6種狀態(tài),需要的可以參考一下
    2022-05-05
  • IDEA一鍵完成格式化、去除無用引用、編譯的操作

    IDEA一鍵完成格式化、去除無用引用、編譯的操作

    這篇文章主要介紹了IDEA一鍵完成格式化、去除無用引用、編譯的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論

宜都市| 榆树市| 灵丘县| 维西| 疏勒县| 阜新市| 武川县| 仙居县| 乌兰浩特市| 兰考县| 青神县| 大足县| 吉首市| 桓台县| 扎兰屯市| 北京市| 防城港市| 北辰区| 隆子县| 西华县| 义马市| 衡东县| 南皮县| 林西县| 达孜县| 华安县| 藁城市| 鹿邑县| 汉川市| 迁西县| 永州市| 武功县| 青阳县| 修文县| 赞皇县| 平舆县| 云龙县| 长春市| 六盘水市| 体育| 海盐县|