「java执行复杂js脚本」java调用js脚本

博主:adminadmin 2022-11-27 17:09:09 58

本篇文章给大家谈谈java执行复杂js脚本,以及java调用js脚本对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何在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

jsp页面上使用java调用js脚本

必须在head之间加入

head

script type="text/javascript" src="js/de.js"/script

/head

如何用java执行指定页面中的js代码

要在java中执行js代码,首先明白,java不支持浏览器本身的方法。支持自定义的js方法,否则会报错

先新建一个js文件:jsss.js

内容如下:

function aa(a,b){    return a+b;

}

然后在java中写代码:

public class ZipTest {

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

ScriptEngineManager manager = new ScriptEngineManager();

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

String jsFileName="G:\\javaPro\\zmwmcc\\WebRoot\\jsss.js";

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

if(engine instanceof Invocable) {

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

Double c = (Double)invoke.invokeFunction("aa", 2, 3); //调用了js的aa方法

System.out.println(c);

}

// engine.eval("alert(\"js alert\");");    // 不能调用浏览器中定义的js函数 // 错误,会抛出alert引用不    }

}

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

首先java和js是完全两码事

两个的运行是不相干的

java是后台程序 运行在服务器上 而js则是生存在客户端浏览器(如ie)

只能是js间接调用java

过程是:js在客户端浏览器上运行,然后js让浏览器发送请求到服务器,然后服务器上的中间件(如tomcat)来把浏览器的请求(httpRequest)转交给java程序来处理。 典型的例子就是用js执行submit()提交表单到服务器和js生成ajax对象然后通过ajax对象把信息发送给服务器。 即js借助浏览器来达到间接调用后台java程序的功能。

反过来就不行了

由于http协议是无状态的,不像java与数据库那样有保持着的连接,数据库是知道当前有谁再连接着自己的,而java程序所在的服务器是无法直接沟通客户端浏览器的,他压根就不知道客户端在哪,也因此无法去和运行在客户端的js联系。

你如果想调用这个EncodePwd(uin,psw), 只能是在客户端浏览器上触发这个方法(例如提交按钮)然后把信息发送到服务器端。

其实还有一种技术,即“服务器推送”,这个大概可以实现你的想法,这是个新兴技术,用于由服务器直接把数据发送给客户端,而不需要客户端不停的用ajax来访问服务器。但是我想这个应该不是你想要的东西。

关于java执行复杂js脚本和java调用js脚本的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-27,除非注明,否则均为首码项目网原创文章,转载请注明出处。