java调用js脚本,用js写脚本

http://www.itjxue.com  2023-01-05 10:28  来源:未知  点击次数: 

java程序中运行js脚本

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

public class ExecJs {

/**

* 记录日志类

*/

private Logger log = Logger.getLogger(ExecJs.class);

/**

* 后置处理,执行js脚本

* @param js

* @throws Exception

*/

public void execJs(String js, MapString,Object map) throws Exception {

if (log.isDebugEnabled()) {

log.debug("execJs js : " + js);

IteratorEntryString, Object it = map.entrySet().iterator();

while (it.hasNext()) {

EntryString, Object entry = (EntryString, Object) it.next();

log.info("EXECJS MAP : " + entry.getKey() + "---" + entry.getValue());

}// end while

}// end if

if ("".equals(js) || js == null) {

log.info("EXECJS ERROR : JAVASCRIPT CONTENT IS NULL");

} else if(map == null || map.size()=0){

log.info("EXECJS ERROR : MAP CONTENT IS NULL");

} else {

// 获取脚本引擎

ScriptEngineManager mgr = new ScriptEngineManager();

ScriptEngine engine = mgr.getEngineByName("javascript");

// 绑定数据

ScriptContext newContext = new SimpleScriptContext();

Bindings bind = newContext.getBindings(ScriptContext.ENGINE_SCOPE);

bind.putAll(map);

try {

engine.setBindings(bind, ScriptContext.ENGINE_SCOPE);

engine.eval(js);

} catch (Exception e) {

log.info("EXECJS EXCEPTION : EXECUTE JAVASCRIPT EXCEPTION", e);

throw (e);

}// end try

}// end if

}

}

如何通过java代码调用js

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();

}

}

}

java怎么调用javascript

可参考:

package javaIjs;

/**

* @param args

*/

import java.io.FileReader;

import javax.script.Invocable;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

/**

* Java调用并执行js文件,传递参数,并活动返回值

*

* @author manjushri

*/

public class ScriptEngineTest {

public static void main(String[] args) throws Exception {

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("javascript");

String jsFileName = System.getProperty("user.dir")+"/src/javaIjs/expression.js";

// 读取js文件

FileReader reader = new FileReader(jsFileName);

// 执行指定脚本

System.out.println(engine.getContext().getReader());

engine.eval(reader);

if (engine instanceof Invocable) {

Invocable invoke = (Invocable) engine;

// 调用merge方法,并传入两个参数

// c = merge(2, 3);

Double c = (Double) invoke.invokeFunction("merge1", 21, 3);

System.out.println("c = " + c);

}

reader.close();

}

}

Java调用JS脚本里的方法

;?? 本例子使用了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

如何在java中调用js方法

在Java中调用js文件中的function,传入调用参数,并获取返回值

js文件中的merge函数将两个参数a,b相加,并返回c。

// expression.js

function merge(a, b) {

c = a * b;

return c;

}

在Java代码中读取js文件,并参数两个参数,然后回去返回值。

package com.sinaapp.manjushri;

import java.io.FileReader;

import javax.script.Invocable;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

/** * Java调用并执行js文件,传递参数,并活动返回值 * * @author manjushri */

public class ScriptEngineTest {

public static void main(String[] args) throws Exception {

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("javascript");

String jsFileName = "expression.js"; // 读取js文件

FileReader reader = new FileReader(jsFileName); // 执行指定脚本

engine.eval(reader);

if(engine instanceof Invocable) {

Invocable invoke = (Invocable)engine; // 调用merge方法,并传入两个参数

// c = merge(2, 3);

Double c = (Double)invoke.invokeFunction("merge", 2, 3);

System.out.println("c = " + c);

}

reader.close();

}

}

输出结果:

c = 5.0

(责任编辑:IT教学网)

更多

推荐java认证文章