java 运行javascript脚本大全

5 篇文章 0 订阅
5 篇文章 0 订阅

//转自:http://www.oschina.net/code/snippet_120696_4489


package demo7;


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

// 1
engine.put("msg", "just a test");
String str = "msg += '!!!';var user = {name:'tom',age:23,hobbies:['football','basketball']}; var name = user.name; var hb = user.hobbies[1];";
engine.eval(str);

String msg = (String) engine.get("msg");
String name = (String) engine.get("name");
String hb = (String) engine.get("hb");
System.out.println(msg);
System.out.println(name + ":" + hb);

// 2
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);

// 3
Adder adder = jsInvoke.getInterface(Adder.class);
int result2 = adder.add(10, 35);
System.out.println(result2);

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

// 5
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);
}

}
}

interface Adder {
int add(int a, int b);
}


//高级2callback
public class JsCallback{
  public static void main(String[] args) throws Exception{

   ScriptEngineManager factory = new ScriptEngineManager();
   ScriptEngine engine = factory.getEngineByName("JavaScript");
   engine.put("cb", new JsCallback());
   engine.eval("println('Doing something in javascript here first');" +
     "cb.apply('bar');");
  }


  public void apply(String s){
    System.out.println("Back in java code here: " + s);
  }
}


//高级2上下文
转自:http://www.ibm.com/developerworks/cn/java/j-lo-jse66/
            
import javax.script.*;


public class ScopeTest {
    public static void main(String[] args) throws Exception {
        String script=" println(greeting) ";
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("javascript");
        
        //Attribute from ScriptEngineManager
        manager.put("greeting", "Hello from ScriptEngineManager");
        engine.eval(script);


        //Attribute from ScriptEngine
        engine.put("greeting", "Hello from ScriptEngine");
        engine.eval(script);


        //Attribute from eval method
        ScriptContext context = new SimpleScriptContext();
        context.setAttribute("greeting", "Hello from eval method", 
            ScriptContext.ENGINE_SCOPE);
        engine.eval(script,context);
        
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值