java中调用js方法

在Java中直接调用js代码

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);");

         // engine.eval("alert(\"js alert\");");    // 不能调用浏览器中定义的js函数 // 错误,会抛出alert引用不存在的异常
 }catch(ScriptException e){

 e.printStackTrace();
 }
 }   
}

输出结果:7

在Java中绑定js变量
在调用engine.get(key);时,如果key没有定义,则返回null

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,传入调用参数,并获取返回值

// expression.js 
function merge(a, b) { 
 c = a * b; 
 return c; 
}

Java代码中读取js文件,并参数两个参数,然后回去返回值。

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();  

  }
}

原文参考:
https://blog.csdn.net/z834410038/article/details/70231544

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,837评论 18 399
  • 老妈今天上夜班,可以和我一起玩半个上午。我听到消息后,一蹦三尺高,赶紧穿好衣服,和妈妈一起吃完早饭,然后,就出发啦...
    Sarahyaoyao阅读 1,774评论 0 1
  • 1 小嘉的老公小海在工厂上班,小两口平时恩恩爱爱,有一个2岁大的女儿寄宿在婆婆家,小海钱挣得虽说不多,但却很心疼小...
    加藤勇阅读 3,899评论 0 0
  • 〔一〕 『赐我梦境,还赐我很快就清醒,与我沉睡,还与我蹉跎无慈悲...
    青桐碧落M阅读 3,097评论 0 0
  • SnowFlake 下面的文章写的非常详细,有利于理解 理解分布式id生成算法SnowFlake DefaultK...
    兴浩阅读 4,055评论 0 0

友情链接更多精彩内容