欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

簡(jiǎn)介 Nashorn

Nashorn 一個(gè) javascript 引擎。

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

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

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

使用方式

1. 編寫(xiě)JavaScript腳本

列:JavaScript方法使用Java對(duì)象執(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容器用戶(hù)存儲(chǔ)腳本 ScirptContainer.java

public class ScirptContainer {
 
 
 public static ScriptEngine engine;//腳本引擎
 
 static {
 ScriptEngineManager manager = new ScriptEngineManager();//腳本引擎管理
 engine = manager.getEngineByName("nashorn");//獲取nashorn腳本引擎
 engine.getContext().getWriter();//獲取正文并且寫(xiě)入
 }
 
 private ConcurrentHashMap<Integer, CompiledScript> scripts = new ConcurrentHashMap<>();//腳本存儲(chǔ)容器
 
 
 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){
 //容器中無(wú)腳本創(chuàng)建腳本對(duì)象
 Compilable compilable = (Compilable) engine;
 //編譯JavaScript腳本
 compiledScript = compilable.compile(script);
 //腳本對(duì)象存入容器中
 scripts.put(hashCode, compiledScript);
 }
 return compiledScript;
 } 
}

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

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

注意事項(xiàng):

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

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

作者: SimpleWu

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

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

相關(guān)文章

  • Java Swing中的文本區(qū)(JTextArea)實(shí)現(xiàn)換行保存到文件的幾個(gè)方法

    Java Swing中的文本區(qū)(JTextArea)實(shí)現(xiàn)換行保存到文件的幾個(gè)方法

    這篇文章主要介紹了Java Swing中的文本區(qū)(JTextArea)實(shí)現(xiàn)換行保存到文件的幾個(gè)方法,本文給出了4種方法,需要的朋友可以參考下
    2014-10-10
  • IDEA中的Structure模塊使用圖文詳解

    IDEA中的Structure模塊使用圖文詳解

    IDEA 的 Structure 功能,也是在看代碼中一個(gè)十分常用的功能,最通用的方法,就是點(diǎn)擊 IDEA 左下角的 Structure 標(biāo)簽頁(yè)即可,本文重點(diǎn)介紹IDEA中的Structure模塊使用詳解,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • java 如何計(jì)算同比增長(zhǎng)工具類(lèi)

    java 如何計(jì)算同比增長(zhǎng)工具類(lèi)

    這篇文章主要介紹了java 如何計(jì)算同比增長(zhǎng)工具類(lèi)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • spring boot+spring cache實(shí)現(xiàn)兩級(jí)緩存(redis+caffeine)

    spring boot+spring cache實(shí)現(xiàn)兩級(jí)緩存(redis+caffeine)

    這篇文章主要介紹了spring boot+spring cache實(shí)現(xiàn)兩級(jí)緩存(redis+caffeine),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Java中的反射機(jī)制基本運(yùn)用詳解

    Java中的反射機(jī)制基本運(yùn)用詳解

    這篇文章主要介紹了Java 反射機(jī)制原理與用法,結(jié)合實(shí)例形式詳細(xì)分析了Java反射機(jī)制的相關(guān)概念、原理、基本使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2021-08-08
  • Springboot 全局日期格式化處理的實(shí)現(xiàn)

    Springboot 全局日期格式化處理的實(shí)現(xiàn)

    這篇文章主要介紹了Springboot 全局日期格式化處理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 淺談MyBatis-plus入門(mén)使用

    淺談MyBatis-plus入門(mén)使用

    這幾天本人了解到了MyBatis-plus,一個(gè) Mybatis 增強(qiáng)工具包.經(jīng)過(guò)一番研究,發(fā)現(xiàn)這玩意真的好用,不用寫(xiě)任何 xml ,內(nèi)置通用的 Mapper,而且完全是面向?qū)ο缶幊?文檔給的示例代碼,跟之前用過(guò)的 sequelize (Node.js 的 ORM)非常像,因此本人也嘗試了一把, 需要的朋友可以參考下
    2021-05-05
  • Java中的動(dòng)態(tài)代理使用

    Java中的動(dòng)態(tài)代理使用

    這篇文章主要介紹了Java中的動(dòng)態(tài)代理使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 使用spring?jpa?如何給外鍵賦值

    使用spring?jpa?如何給外鍵賦值

    這篇文章主要介紹了使用spring?jpa?如何給外鍵賦值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring加載properties文件的方法

    Spring加載properties文件的方法

    這篇文章主要為大家詳細(xì)介紹了Spring加載properties文件的兩種方法,一是通過(guò)xml方式,另一種方式是通過(guò)注解方式,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評(píng)論