java代码中调用js
来源:互联网 发布:想找个网络兼职 编辑:程序博客网 时间:2024/06/05 11:28
谈起js在服务端的应用,大部分人的第一反应都是node.js。node.js作为一套服务器端的 JavaScript 运行环境,有自己的独到之处,但不是所有的地方都需要使用它。
例如在已有的服务端代码上增加一个业务,而这个业务使用的却是js编写。如果用node.js处理的话,会很麻烦。而且另一方面对于很多服务端程序员来说,觉得js的对象模型很奇怪,不太喜欢用js处理问题。
对于上面这种情况,有一种简单的处理方法:javax.script API
javax.script加入了对部分脚本语言的支持,它的原意是为了针对关于业务在客户端和服务端中,逻辑相同而语言不同导致实现不同的问题。但是这种处理方法由于前后端的分工和一些缺陷,很少在实际应用中用到。
javax.script
实现起来很简单。
一:得到一个ScriptEngine对象
1
2
ScriptEngineManager maneger =
new
ScriptEngineManager();
ScriptEngine engine = maneger.getEngineByName(
"JavaScript"
);
二:读js文件
1
2
Reader scriptReader =
new
InputStreamReader(
JsInServer.
class
.getResourceAsStream(
"js文件"
));
三:解析文件
1
engine.eval(scriptReader);
四:调用js方法,得到的结果以Object对象返回
1
Object result = invocable.invokeFunction(
"js方法"
, js方法参数
1
, js方法参数
2
...);
测试例子:
java
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
import
java.io.IOException;
import
java.io.InputStreamReader;
import
java.io.Reader;
import
javax.script.Invocable;
import
javax.script.ScriptEngine;
import
javax.script.ScriptEngineManager;
import
javax.script.ScriptException;
public
class
JsInServer {
public
static
void
main(String[] arg)
throws
IOException {
ScriptEngineManager maneger =
new
ScriptEngineManager();
ScriptEngine engine = maneger.getEngineByName(
"JavaScript"
);
Reader scriptReader =
new
InputStreamReader(
JsInServer.
class
.getResourceAsStream(
"TestAdd.js"
));
if
(engine !=
null
) {
try
{
// JS引擎解析文件
engine.eval(scriptReader);
if
(engine
instanceof
Invocable) {
Invocable invocable = (Invocable) engine;
// JS引擎调用方法
Object result = invocable.invokeFunction(
"add"
,
1
,
2
);
System.out.println(
"The result is: "
+ result);
}
}
catch
(ScriptException e) {
e.printStackTrace();
}
catch
(NoSuchMethodException e) {
e.printStackTrace();
}
finally
{
scriptReader.close();
}
}
else
{
System.out.println(
"ScriptEngine create error!"
);
}
}
}
js:
1
2
3
4
5
6
7
function add(a,b){
println(
"The first parameter is: "
+ a);
println(
"The second parameter is: "
+ b);
return
a+b;
}
println(
"js perform success"
);
执行结果:
1
2
3
4
js perform success
The first parameter is:
1
The second parameter is:
2
The result is:
3.0
0 0
- Java中调用js代码
- java代码中调用js
- 在Java中直接调用js代码
- 在Java中直接调用js代码
- 在Java中直接调用js代码
- 在Java中直接调用js代码
- 在Java中直接调用js代码
- 在Java中直接调用js代码
- 在Java中直接调用js代码
- 在Java中直接调用js代码
- 在Java中直接调用js代码
- Android Java中调用js代码,js中调用Java代码
- JS调用Java代码
- Android中Java代码和Js代码相互调用
- js页面调用WebView中java代码初步
- Android的WebView中js与java代码相互调用
- Android的WebView中js与java代码相互调用
- Android WebView的js中调用java代码
- Android开发在路上:少去踩坑,多走捷径
- Material Design 入门
- A - A+B for Input-Output Practice (V) Time Limit:1000MS Memory Limit:32768KB 64bit IO Form
- Mini-project #6 - Blackjack
- The Mathematics of Machine Learning
- java代码中调用js
- 一些 Android 重要知识点解析整理
- 虚拟机网络不通:
- 企业支付宝账号开发接口教程SpringMVC+JSP)
- lseek详解
- 图标神器1.1更新
- Ubuntu系统vi编辑器上下左右键变ABCD的解决方法
- 编程之美 - 只考加法的算术题
- python 获取 中国证券网 的公告