您的位置:首页 > 编程语言 > Java开发

jdk7 新特性-Java语言的动态性-脚本语言支持api-执行脚本上下文 03

2014-11-20 14:32 666 查看
package org.yla.java语言的动态性.执行脚本上下文03;

import java.io.FileWriter;
import java.io.IOException;

import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

/**
* 测试脚本执行的上下文
* javax.script Interface ScriptContext
* @author Administrator
*
*/
public class TestScriptContext {

public static void main(String[] args) throws IOException, ScriptException {
// new TestScriptContext().scriptToFile();
// new TestScriptContext().scriptContextAttribute();
new TestScriptContext().scriptContextBindings();
}

//利用ScriptContext脚本语言执行过程中的上下文 把信息输出到文件中
public void scriptToFile() throws IOException, ScriptException{
ScriptEngine engine =getJavaScriptEngine();
// 获得context
ScriptContext context =engine.getContext();
context.setWriter(new FileWriter("output.txt"));
engine.eval("println('这里是写出文件的内容...');");
}

//自定义作用域
public void scriptContextAttribute(){
ScriptEngine engine =getJavaScriptEngine();
// 获得context
ScriptContext context =engine.getContext();
//表示的作用域对应的是从同一引擎工厂中创建出来的所有脚本引擎对象
context.setAttribute("name", "huochaigun-GLOBAL_SCOPE", ScriptContext.GLOBAL_SCOPE);
//作用域表示当前的脚本引擎
context.setAttribute("name", "huochaigun-ENGINE_SCOPE", ScriptContext.ENGINE_SCOPE);
String s =(String) context.getAttribute("name");
System.out.println(s);
// 结果是:huochaigun-ENGINE_SCOPE
}

//语言绑定对象 下面的例子说明语言绑定对象的优先级顺序的示例
public void scriptContextBindings() throws ScriptException{
ScriptEngine engine =getJavaScriptEngine();
// 获得context
ScriptContext context =engine.getContext();

Bindings bindings1 =engine.createBindings();
bindings1.put("name", "scriptContextBindings-huochaigun-GLOBAL_SCOPE");
context.setBindings(bindings1, ScriptContext.GLOBAL_SCOPE);

Bindings bindings2 =engine.createBindings();
bindings2.put("name", "scriptContextBindings-huochiagun-ENGINE_SCOPE");
context.setBindings(bindings1, ScriptContext.ENGINE_SCOPE);

engine.eval("println(name);");
}

public ScriptEngine getJavaScriptEngine() {
ScriptEngineManager manager = new ScriptEngineManager();
return manager.getEngineByName("JavaScript");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: