扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
; 本例子使用了JDK 以上的javax script包 通过Invocable接口实现JAVA调用JS脚本里的方法 本例中调用分为内部执行脚本和外部执行脚本 外部执行脚本分为不带参数调用和带参数调用 主要采用invokeFunction方法调用 ObjectinvokeFunction(String name Object… args) 用于调用脚本中定义的顶层程序和函数 ObjectinvokeMethod(Object thiz String name Object… args) 对以前的脚本执行中已经编译的脚本对象(以 ScriptEngine 的状态保持)调用某一方法 package de javase; import javax script Invocable; import javax script ScriptEngineManager; import javax script ScriptEngine; import java io File; import java io Reader; import java io FileReader; public class AjavaInvokingFunction { public static void main(String[] args) { // 获得一个JavaScript脚本引擎 也可以是ECMAScript脚本引擎 ScriptEngineManager manager = new ScriptEngineManager() ScriptEngine engine = manager getEngineByName( JavaScript ) String titlescript = function sayTitle() { + println( 源码实例 使用javax script调用JS脚本里的方法 ) + println( ) + } ; try {
成都网站建设、做网站服务团队是一支充满着热情的团队,执着、敏锐、追求更好,是创新互联的标准与要求,同时竭诚为客户提供服务是我们的理念。成都创新互联公司把每个网站当做一个产品来开发,精雕细琢,追求一名工匠心中的细致,我们更用心!
// 调用内部脚本执行 engine eval(titlescript) // 转换为Invocable Invocable invocableEngine = (Invocable) engine; // 不带参数调用sayTitle方法 invocableEngine invokeFunction( sayTitle ) // 调用外部脚本执行 // 创建JS文件的File对象 并读入流 File functionscript = new File( ajava js ) Reader reader = new FileReader(functionscript) // 开始执行ajava js里的程序 engine eval(reader) // 不带参数调用sayHello方法 invocableEngine invokeFunction( sayHello ) // 带参数调用sayHello方法 invocableEngine invokeFunction( sayHello mark ) } catch (Exception e) { e printStackTrace() } } } ajava js文件 function sayHello(){ sayHello(null) } function sayHello(name){ if(name==null){ println( 欢迎你!请注册Ajava会员 ) }else{ println(name+ 独立JAVA社区欢迎你 ) } } 运行结果(控制台) 源码实例 使用javax script调用JS脚本里的方法 lishixinzhi/Article/program/Java/hx/201311/26436
JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码。
在Java中直接调用js代码
不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert” is not defined。
package com.sinaapp.manjushri;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException; /** * 直接调用js代码 */
public class ScriptEngineTest {
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
try{
engine.eval("var a=3; var b=4;print (a+b);");
// engine.eval("alert(\"js alert\");"); // 不能调用浏览器中定义的js函数 // 错误,会抛出alert引用不存在的异常
}catch(ScriptException e){
e.printStackTrace();
}
}
}
nodejs 运行代码可以在命令行中使用命令“ node /path/xxx.js ”来执行
所以我们可以借助 java 的 Runtime 类,可以执行系统本地的命令, 例如:
Linux系统下:Runtime.getRuntime().exec("node /path/xxx.js");
Window系统下:Runtime.getRuntime().exec("cmd /c node /path/xxx.js");
当然推荐使用 Apache-Commons-Exec 工具类,可以屏蔽不同系统命令差异,并且获取结果更简单
工具类使用可以参考此文: 网页链接
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流