1
import
javax.script.ScriptEngine;
2 import javax.script.ScriptEngineManager;
3 import javax.script.ScriptException;
4
5 public class JavaScriptEngineTest {
6 public static void main(String[] args) {
7 try {
8 JavaScriptEngineTest test = new JavaScriptEngineTest();
9 test.sayHello( " hermit " );
10 } catch (Exception se) {
11 se.printStackTrace();
12 }
13 }
14
15
16
17 public void sayHello(String name) {
18 ScriptEngineManager sem = new ScriptEngineManager();
19 ScriptEngine jsEngine = sem.getEngineByName( " js " );
20 try {
21 jsEngine.eval( " print('hello " + name + " ') " );
22 } catch (ScriptException e) {
23 e.printStackTrace();
24 }
25 }
26
27
28 }
2 import javax.script.ScriptEngineManager;
3 import javax.script.ScriptException;
4
5 public class JavaScriptEngineTest {
6 public static void main(String[] args) {
7 try {
8 JavaScriptEngineTest test = new JavaScriptEngineTest();
9 test.sayHello( " hermit " );
10 } catch (Exception se) {
11 se.printStackTrace();
12 }
13 }
14
15
16
17 public void sayHello(String name) {
18 ScriptEngineManager sem = new ScriptEngineManager();
19 ScriptEngine jsEngine = sem.getEngineByName( " js " );
20 try {
21 jsEngine.eval( " print('hello " + name + " ') " );
22 } catch (ScriptException e) {
23 e.printStackTrace();
24 }
25 }
26
27
28 }
输出:
hello hermit
1
import
javax.script.ScriptEngine;
2 import javax.script.ScriptEngineManager;
3 import javax.script.ScriptException;
4
5 public class JavaScriptEngineTest {
6 public static void main(String[] args) {
7 try {
8 JavaScriptEngineTest test = new JavaScriptEngineTest();
9 test.testObject( " a " , 7 );
10 } catch (Exception se) {
11 se.printStackTrace();
12 }
13 }
14
15 public void testObject(String key, int value) {
16 ScriptEngineManager manager = new ScriptEngineManager();
17 ScriptEngine engine = manager.getEngineByName( " js " );
18 engine.put(key, value);
19 try {
20 engine.eval( " print( " + key + " +1) " );
21 } catch (ScriptException e) {
22 e.printStackTrace();
23 }
24 }
25 }
2 import javax.script.ScriptEngineManager;
3 import javax.script.ScriptException;
4
5 public class JavaScriptEngineTest {
6 public static void main(String[] args) {
7 try {
8 JavaScriptEngineTest test = new JavaScriptEngineTest();
9 test.testObject( " a " , 7 );
10 } catch (Exception se) {
11 se.printStackTrace();
12 }
13 }
14
15 public void testObject(String key, int value) {
16 ScriptEngineManager manager = new ScriptEngineManager();
17 ScriptEngine engine = manager.getEngineByName( " js " );
18 engine.put(key, value);
19 try {
20 engine.eval( " print( " + key + " +1) " );
21 } catch (ScriptException e) {
22 e.printStackTrace();
23 }
24 }
25 }
输出:
8
调用js:
JavaScriptEngineTest.js,放在同一目录:
11.0
1
import
java.io.FileNotFoundException;
2 import java.io.FileReader;
3 import javax.script.Invocable;
4 import javax.script.ScriptEngine;
5 import javax.script.ScriptEngineManager;
6 import javax.script.ScriptException;
7
8 public class JavaScriptEngineTest {
9 public static void main(String[] args) {
10 try {
11 JavaScriptEngineTest test = new JavaScriptEngineTest();
12 test.testAdd( 5 , 6 );
13 } catch (Exception se) {
14 se.printStackTrace();
15 }
16 }
17
18 public String getPath() {
19 return this .getClass().getResource( " / " ).getPath();
20 }
21
22
23 public void testAdd( int a, int b) {
24 ScriptEngineManager sem = new ScriptEngineManager();
25 ScriptEngine jsEngine = sem.getEngineByName( " js " );
26 try {
27 jsEngine.eval( new FileReader(getPath() + " JavaScriptEngineTest.js " ));
28 } catch (FileNotFoundException e) {
29 e.printStackTrace();
30 } catch (ScriptException e) {
31 e.printStackTrace();
32 }
33 Invocable invocableEngine = (Invocable) jsEngine;
34 try {
35 Object ret = invocableEngine.invokeFunction( " add " , a, b);
36 System.out.println(ret);
37 } catch (ScriptException e) {
38 e.printStackTrace();
39 } catch (NoSuchMethodException e) {
40 e.printStackTrace();
41 }
42 }
43
44
45 }
2 import java.io.FileReader;
3 import javax.script.Invocable;
4 import javax.script.ScriptEngine;
5 import javax.script.ScriptEngineManager;
6 import javax.script.ScriptException;
7
8 public class JavaScriptEngineTest {
9 public static void main(String[] args) {
10 try {
11 JavaScriptEngineTest test = new JavaScriptEngineTest();
12 test.testAdd( 5 , 6 );
13 } catch (Exception se) {
14 se.printStackTrace();
15 }
16 }
17
18 public String getPath() {
19 return this .getClass().getResource( " / " ).getPath();
20 }
21
22
23 public void testAdd( int a, int b) {
24 ScriptEngineManager sem = new ScriptEngineManager();
25 ScriptEngine jsEngine = sem.getEngineByName( " js " );
26 try {
27 jsEngine.eval( new FileReader(getPath() + " JavaScriptEngineTest.js " ));
28 } catch (FileNotFoundException e) {
29 e.printStackTrace();
30 } catch (ScriptException e) {
31 e.printStackTrace();
32 }
33 Invocable invocableEngine = (Invocable) jsEngine;
34 try {
35 Object ret = invocableEngine.invokeFunction( " add " , a, b);
36 System.out.println(ret);
37 } catch (ScriptException e) {
38 e.printStackTrace();
39 } catch (NoSuchMethodException e) {
40 e.printStackTrace();
41 }
42 }
43
44
45 }
JavaScriptEngineTest.js,放在同一目录:
1
function
add(a,b) {
2 return a + b;
3 }
输出:
2 return a + b;
3 }
11.0
看了以上三个例子,我和大家一样有个疑问:what use?
一番思考,个人认为,脚本引擎对一般应用和开发没用什么太大用处,没人会用java能实现的功能非要绕个弯子去用js去实现。
那么是不是脚本引擎没用呢?也不是,我认为脚本引擎的作用在于开发产品。。。。。。。。
比如写个浏览器。。。。。。。。。。
比如写个报表工具。。。。。。。。
比如一个产品提供一些二次开发的接口给高级用户。
都可以用到脚本引擎。甚至可以扩展定义自己的脚本,不局限于JS。
这是我想到的脚本引擎的唯一用处。。。。。。
欢迎大家一起讨论。
一番思考,个人认为,脚本引擎对一般应用和开发没用什么太大用处,没人会用java能实现的功能非要绕个弯子去用js去实现。
那么是不是脚本引擎没用呢?也不是,我认为脚本引擎的作用在于开发产品。。。。。。。。
比如写个浏览器。。。。。。。。。。
比如写个报表工具。。。。。。。。
比如一个产品提供一些二次开发的接口给高级用户。
都可以用到脚本引擎。甚至可以扩展定义自己的脚本,不局限于JS。
这是我想到的脚本引擎的唯一用处。。。。。。
欢迎大家一起讨论。