谈起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
|
=======================================================================================================
转自:http://www.cnblogs.com/charlexu/p/3424963.html