服务端调用js:javax.script
来源:互联网 发布:淘宝上的中药能买吗 编辑:程序博客网 时间:2024/06/05 16:57
谈起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
- 服务端调用js:javax.script
- 服务端调用js:javax.script
- js调用服务端代码
- 客户端js服务端互相调用
- android调用服务端的js
- javax.script package
- javax.script详解
- javax.script包
- JS调用服务端显示查询数据
- asp.net服务端调用客户端的JS
- jdk 1.6 javax.script使用
- asp.net中js调用服务端方法,服务端调用JS,实现无刷新的倒计时
- Ajax客户端异步调用服务端方法(js调用cs文件)
- JS跨域调用之JSONP--动态Script标…
- C++通过Microsoft Script Control控件调用JS脚本
- 学习Altas 笔记[JS简单调用服务端方法]
- 使用DWR实现JS调用服务端Java代码
- 使用DWR实现JS调用服务端Java代码
- Linux ramdisk启动
- Gradle Android 工程开启 multiDex
- socket.io实践篇(1)
- 符号表之List 实现
- tasklet原理
- 服务端调用js:javax.script
- C3P0连接池配置
- 不需要存盘直接下载EXCEL文件
- spring3.0就是这么简单(百度网盘地址) Hibernate3.0完整中文版教程
- Linux安装中文man手册
- 发布分布式版本的spider了[hispider]
- redhat-5.6-x86_64、gcc-4.9.2 编译 Qt-4.8.6 备记
- 一元二次方程求解C++实现
- android开发之Launcher icon(启动图标)的设计