JDK8中Java调用Javascript脚本引擎动态定义与执行代码

import java.lang.*;
import java.util.Arrays;
import java.util.List;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class ScriptEngineTest {

public static void main(String[] args) throws Exception {
    ScriptEngineManager sem = new ScriptEngineManager();
    ScriptEngine engine = sem.getEngineByName("javascript");     //python or jython, 

<pre name="code" class="html">   //向上下文中存入变量
   engine.put("msg", "just a test");
   //定义类user
   String str = "msg += '!!!';var user = {name:'tom',age:23,hobbies:['football','basketball']}; ";
   engine.eval(str);

   //从上下文引擎中取值
   String msg = (String) engine.get("msg");
   String name = (String) engine.get("name");
   String[] hb = engine.get("hb");
   System.out.println(msg);
   System.out.println(name + ":" + hb[0]);

   //定义数学函数
   engine.eval("function add (a, b) {c = a + b; return c; }");

    //取得调用接口
    Invocable jsInvoke = (Invocable) engine;

  //定义加法函数

  Object result1 = jsInvoke.invokeFunction("add", new Object[] { 10, 5 });

  System.out.println(result1);

  //调用加法函数,注意参数传递的方法

  Adder adder = jsInvoke.getInterface(Adder.class);

  int result2 = adder.add(10, 35);

  System.out.println(result2);

  //定义run()函数

  engine.eval("function run() {print('www.java2s.com');}");

  Invocable invokeEngine = (Invocable) engine;

  Runnable runner = invokeEngine.getInterface(Runnable.class);
  //定义线程运行之

  Thread t = new Thread(runner);

  t.start();

  t.join();

  //导入其他java包

  String jsCode = "importPackage(java.util);

  var list2 = Arrays.asList(['A', 'B', 'C']); ";

  engine.eval(jsCode);

  List<String> list2 = (List<String>) engine.get("list2");

  for (String val : list2) { System.out.println(val);}

  }

}

脚本引擎为实现动态功能(如插件机制)提供了良好的扩展性.

有关引擎接口的文档:

ScriptEngine

时间: 2024-10-10 22:25:37

JDK8中Java调用Javascript脚本引擎动态定义与执行代码的相关文章

JDK8在Java转让Javascript脚本引擎动态地定义和运行代码

import java.lang.*; import java.util.Arrays; import java.util.List; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class ScriptEngineTest { public static void main(String[] args) throw

java调用javascript :js引擎rhino

java调用javascript :js引擎rhino JavaJavaScriptEclipse脚本SQL 前段时间,在浏览javaeye论坛,看见有人征集如何在java中运行数学表达式.结果方案五花八门:1.jakarta commons JEXL. 2.Beanshell3.Java Math Expression Parser jep 4.parse combinator jparsec 5.jdk 6.0的 script6.利用SQL 7.自己写语法分析如果自己写语法分析,没有个200

在&lt;a&gt;&lt;/a&gt;标签中如何调用javaScript脚本

在日常工作总会遇到在<a>标签中执行js代码的情况 现在做一个总结,希望对大家有一个帮助. 1.a href="javascript:js_method();" 这是我们平台上常用的方法,但是这种方法在传递this等参数的时候很容易出问题,而且javascript:协议作为a的href属性的时候不仅会导致不必要的触发window.onbeforeunload事件,在IE里面更会使gif动画图片停止播放. W3C标准不推荐在href里面执行javascript语句. 2.a

在&lt;a&gt;&lt;/a&gt;标签中调用javascript脚本

有时候,我们点击了<a></a>标签(除了跳转到指定链接外)想要它调用某个方法,及调用javascript脚本,该如何做: 方法1:<a href="javascript:void(0);" onclick="functionname()" >aaaa</a> 方法2:<a href="javascript:functionname('dd')" >ddddd</a> 方法3

ASP.NET调用javascript脚本的方法总结

ASP.NET本身就提供了多种调用javascript脚本的方法,本文总结了六种调用方法,大家根据自己的使用习惯可以选择相应的调用方式了! 1.直接在前台调用 javascript 函数 很简单,在 head 元素之间加入 script 元素,将 type 元素设置为 " text/javascript " 如: <head runat="server"> <script type="text/javascript" >

android 中java和javascript交互

android的WebView是一个非常强大的控件,本文主要针对其简单使用和笔者在使用时所遇到的问题做一些总结. 本文参考了该博文:http://blog.csdn.net/zgjxwl/article/details/9627685 一.WebView中Java与javascript交互 1.这是要和js交互的注入接口类: public final class JavascriptInteerface{ @JavascriptInterface public void test(String

java调用dll或so动态库文件(c++/c)

java调用dll或so动态库文件(c++/c) 博客分类: 工作 CC#C++JavaEclipse java调用dll或so动态库文件(c++/c)开发平台:Eclipse3.3.1.1+CDT(cdt-master-4.0.3)+MinGW(MinGW-5.1.4) 一:下面是java调用dll(C++) 1:下载并安装cdt :http://www.eclipse.org/cdt/downloads.php  :选择自己eclipse 支持的cdt插件,下载,并且 通过eclipse--

Java 调用 shell 脚本详解

这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能. 从之前的项目中拷贝的相关模块和网上的例子来看,有个别的"陷阱"造成调用shell 脚本在某些特殊的场景下,有一些奇奇怪怪的bug. 大家且听我一一道来. 先看看网上搜索到的例子: [java] view plain copy package someTest; import java.io.BufferedReader; import java.io.IOException; im

(转)java调用python脚本

这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用到第三方类库的情况. 先来说说我为什么要用java调用python代码,原因就在于python在爬虫方面提供了丰富的类库,但我本来已经有一套java操作数据库以及消息中间件的代码,这些代码用python实现的话可能需要至少一周时间,为了减少时间成本,因此我决定用java调用python脚本的方式使用