package com.bao.examples.js;
import javax.script.*;
import org.apache.commons.io.HexDump;
import junit.framework.TestCase;
public class JavaScriptTest extends TestCase
{
public void testJavaScript1() throws Exception
{
ScriptEngineManager sem = new ScriptEngineManager();
// 添加上下文绑定数据
SimpleBindings bindings = new SimpleBindings();
bindings.put("aaa_av", new Double(10000.1));
bindings.put("bbb_av", new Double(20000.2));
ScriptEngine engine = sem.getEngineByExtension("js");
engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
try
{
// 直接解析
Object res = engine.eval(" res = Math.max(aaa_av , bbb_av) + aaa_av");
System.out.println(res);
// 创建脚本
String script = "function getMax() " + "{ return Math.max(aaa_av , bbb_av)}";
// 执行脚本
engine.eval(script);
Invocable inv = (Invocable) engine;
// 执行方法并传递参数
Object obj = inv.invokeFunction("getMax", (Object[])null);
// 打印结果
System.out.println(obj);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
public void testJavaScript2() throws Exception
{
String[] data = {"打印结果", "徐工建设"};
for(int i = 0; i < data.length; i++)
{
HexDump.dump(data[i].getBytes("ISO-8859-1"), 0, System.out, 0);
System.out.println(showBin(data[i]));
System.out.println(escapeJS(data[i]));
}
}
private String showBin(String s)
{
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
int hi = (int)((c >> 8) & 0x000000FF);
int lo = (int)(c & 0x000000FF);
sb.append(String.format("%02X", (int)hi));
sb.append(String.format("%02X", (int)lo));
sb.append(" ");
}
return sb.toString();
}
private String escapeJS(String s) throws ScriptException
{
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByExtension("js");
SimpleBindings bindings = new SimpleBindings();
bindings.put("str", s);
engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
Object res = engine.eval("escape(str)");
if(res instanceof String)
{
return (String)res;
}
return res.toString();
}
}