网站营销的分类有哪些seo网站排名优化软件是什么
在JAVA中调用JavaScript代码
有些时候,我们在执行JAVA代码的时候,希望能够通过执行其他脚本语言(如js, 修改脚本新逻辑立即生效,不需要重新加载)根据其结果来进行逻辑判断,自java SE 8开始已经集成了Nashorn JavaScript引擎作为JDK的一部分。
1.使用nashorn引擎
1.1直接执行脚本
1.1.1查询引擎使用nashorn
public static void main(String[] args) throws Exception {ScriptEngineManager scriptEngineManager = new ScriptEngineManager();ScriptEngine scriptEngine =scriptEngineManager.getEngineByName("nashorn");//执行脚本scriptEngine.eval("print('Hello,World')");
}
1.1.2查询引擎使用JavaScript
public static void main(String[] args) throws Exception {
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
//执行脚本
scriptEngine.eval("print('Hello,World')");
}
1.2 执行脚本指定函数
1.2.1查询引擎使用nashorn
public static void main(String[] args) throws Exception {ScriptEngineManager scriptEngineManager = new ScriptEngineManager();ScriptEngine scriptEngine =scriptEngineManager.getEngineByName("nashorn");//传入脚本scriptEngine.eval("function hello(name){print('Hello,'+ name )}");//ScriptEngine强转为InvocableInvocable inv = (Invocable) scriptEngine;//调用函数,传入参数inv.invokeFunction("hello", "javaScript");}
1.2.2查询引擎使用JavaScript
public static void main(String[] args) throws Exception {ScriptEngineManager scriptEngineManager = new ScriptEngineManager();ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn");//传入脚本scriptEngine.eval("function hello(param) {\n" +" if(param == '123') {\n" +" return true;\n" +" }\n" +" return false;\n" +"}");//ScriptEngine强转为InvocableInvocable inv = (Invocable) scriptEngine;//调用函数,传入参数boolean result = (Boolean) inv.invokeFunction("hello", "12");System.out.println(result);
1.3 获取的都是nashorn引擎
//获取的都是nashorn引擎scriptEngineManager.getEngineByName("nashorn");scriptEngineManager.getEngineByName("JavaScript");
2. 使用脚本语言的优点
- 脚本语言可以直接运行,不需要编译为字节码,如果修改了逻辑不需要重新启动应用,立刻生效
- 动态类型,创建变量不需要创建及声明类型,可以重复使用变量
参考
https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/about.html#sthref8
https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/api.html#CDEGJDJF