java实战晋级技巧(五)调用js代码
【摘要】
jdk8里使用脚本引擎调用js
1.定义一个js方法:
function getRouteInfo(province){ //注意,参数不要带var。。在java里执行会报错。。 if (province=='henan') return 'http://127.0.0.1/resweb'; ...
jdk8里使用脚本引擎调用js
1.定义一个js方法:
-
function getRouteInfo(province){ //注意,参数不要带var。。在java里执行会报错。。
-
if (province=='henan')
-
return 'http://127.0.0.1/resweb';
-
else
-
return '未找到对应的省份信息,province='+province;
-
}
2. 写一个java 测试类来 调用上面的js方法
-
-
import javax.script.Invocable;
-
import javax.script.ScriptEngine;
-
import javax.script.ScriptEngineManager;
-
import javax.script.ScriptException;
-
import java.io.StringReader;
-
-
-
public class TestJs {
-
-
public static void main(String args[]) {
-
// js function:getRouteInfo,入参为province
-
// 参数不要带var。。不然后面执行方法的时候会报错。。
-
String routeScript = "function getRouteInfo(province){ \n" + " if (province=='henan') "
-
+ " return 'http://127.0.0.1/resweb';\n" + " else "
-
+ " return '未找到对应的省份信息,province='+province;\n" + "}";
-
// 脚本的执行结果
-
String scriptResult = "";
-
// 1.得到脚本引擎
-
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
-
try {
-
// 2.引擎读取 脚本字符串
-
engine.eval(new StringReader(routeScript));
-
// 如果js存在文件里,举例
-
// Resource aesJs = new ClassPathResource("js/aes.js");
-
// this.engine.eval(new FileReader(aesJs.getFile()));
-
// 3.将引擎转换为Invocable,这样才可以掉用js的方法
-
Invocable invocable = (Invocable)engine;
-
// 4.使用 invocable.invokeFunction掉用js脚本里的方法,第一個参数为方法名,后面的参数为被调用的js方法的入参
-
scriptResult = (String)invocable.invokeFunction("getRouteInfo", "henan1");
-
} catch (ScriptException e) {
-
e.printStackTrace();
-
System.out.println("Error executing script: " + e.getMessage() + " script:[" + routeScript + "]");
-
} catch (NoSuchMethodException e) {
-
e.printStackTrace();
-
System.out.println("Error executing script,为找到需要的方法: " + e.getMessage() + " script:[" + routeScript + "]");
-
}
-
System.out.println(scriptResult.toString());
-
}
-
}
3.运行测试结果为:
未找到对应的省份信息,province=henan1
文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。
原文链接:baocl.blog.csdn.net/article/details/107330548
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)