首先,装jdk6,配置环境。
安装编译组件junit4,ant1.6等。
源文件:
简单的helloword测试类:
package com.hy.testScript;public class HelloWorld {
String s = "Hello World!我爱苏小雨~~~";
    public void sayHello(){
        System.out.println(s);
    }
}
hello.js文件
print("Hello World!\n");
MaxMin.java接口文件
package com.hy.testScript;public interface MaxMin {
public int max(int a, int b);
    public int min(int a, int b);
}Test.java 测试类文件
package com.hy.testScript;
//导入需要的包
import java.io.FileNotFoundException;
import java.io.FileReader;import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
//junit4测试jar包要导入的哦~~~
import org.junit.Assert;public class Test { /**
 * @param args
 * @throws ScriptException
 * @throws FileNotFoundException
 * @throws InterruptedException
 * @throws NoSuchMethodException
 */
public static void main(String[] args) throws ScriptException,
FileNotFoundException, InterruptedException, NoSuchMethodException {
// TODO Auto-generated method stub
                // 测试你的jdk可支持的脚本类型
// ScriptEngineManager factory = new ScriptEngineManager();
// for (ScriptEngineFactory available : factory.getEngineFactories()) {
// System.out.println(available.getEngineName());
// }
                // 构造脚本引擎管理工厂
ScriptEngineManager factory = new ScriptEngineManager();
                //构造脚本引擎
ScriptEngine engine = factory.getEngineByName("JavaScript");
                //测试js的输出语句,输出Hello World!并换行
engine.eval("print('Hello World!\\n')");
// /engine.eval("if(true){println ('hello')");
int i = 0;
System.out.println("开始循环执行hello.js文件:");
while (i < 5) {
// 寻找文件从工程根开始。注意:路径是很重要的,从工程根开始。
engine.eval(new FileReader("src/com/hy/testScript/hello.js"));
                        // 加入睡眠可以看的更清楚
Thread.sleep(1000);
i++;
}
                // 不一样的调用,这里通过脚本引擎调用java类
System.out.println("开始调用类HelloWorld的对象hello的方法:sayHello");
HelloWorld hello = new HelloWorld();
engine.put("script_hello", hello);
engine.eval("script_hello.sayHello()");
System.out.println("开始调用js脚本方法say:");
String script = "function say(first,second){ print(first +' '+ second+'\\n'); }";
engine.eval(script);
Invocable inv = (Invocable) engine;
inv.invokeFunction("say", "Hello", "Tony");
script = "function max(first,second) "
+ "{ return (first > second) ?first:second;}";
engine.eval(script);
                //js与java接口的调用
Object obj = inv.invokeFunction("max", "1", "0");
                //利用junit4进行测试
Assert.assertEquals("1", obj.toString());
System.out.println(obj.toString());
//接口调用,用js实现java接口,呵呵~~~
script = "function max(first,second) "
+ "{ return (first > second) ?first:second;}";
script += "function min(first,second) { return (first < second) ?first:second;}";
engine.eval(script);
MaxMin maxMin = inv.getInterface(MaxMin.class);
Assert.assertEquals(1, maxMin.max(1, 0));
Assert.assertEquals(0, maxMin.min(1, 0));
//脚本的编译执行,测试外部js正则表达式的应用,请注意中文标点在你调试的时候,适当修改下代码哦
script = "var email=/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]" 
        + "+(\\.[a-zA-Z0-9_-]+)+$/;";
    script += "var ip = /^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])"
        +"(\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])){3}$/;";
    script += "if(email.test(str)){println('it is an email')}"
            + "else if(ip.test(str)){println('it is an ip address')}"
            + "else{println('I don\\'t know')}";
    engine.put("str", "[email protected]");
    Compilable compilable = (Compilable) engine;
    CompiledScript compiled = compilable.compile(script);
    compiled.eval(); }}
注:请在调试的时候注意下中英状态的标点,这也是我们从论坛拷代码经常编译出错的原因。
以上代码经过测试,已经可以执行通过。
联系我:
qq:152850325
email:[email protected]