采用Rhino在JAVA中运行JavaScript
来源:互联网 发布:阿里云企业邮箱下载 编辑:程序博客网 时间:2024/05/25 23:28
由于有些网页采用的是swing技术实现(用swing也可以做出好看的界面),在其中使用JavaScript的话可以采用Rhino
对于Rhino的介绍和使用可以参看这篇文章——Rhino 使 JavaScript 应用程序更灵动 ,下面将简单对Rhino介绍一下
1、Rhino介绍
Rhino是开源的JavaScript引擎,可以在引入Rhino的jar包后,在JavaScript中使用Java的类函数,也可在Java中调用JavaScript函数
2、Rhino下载地址
Rhino下载地址:http://www.mozilla.org/rhino/
3、Rhino执行JavaScript编码的小程序
1)程序结构图
2)程序实现
RhinoTest.java类
package com.rhino.test;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.lang.reflect.InvocationTargetException;import org.mozilla.javascript.Context;import org.mozilla.javascript.ContextFactory;import org.mozilla.javascript.Function;import org.mozilla.javascript.Scriptable;import org.mozilla.javascript.ScriptableObject;import net.sf.json.JSONObject;public class RhinoTest {public static void main(String args[]) {Context cx = ContextFactory.getGlobal().enterContext();Scriptable scope = cx.initStandardObjects(null);cx.setOptimizationLevel(-1);cx.setLanguageVersion(Context.VERSION_1_8);try {ScriptableObject.defineClass(scope, ExtendUtil.class);} catch (IllegalAccessException e1) {e1.printStackTrace();} catch (InstantiationException e1) {e1.printStackTrace();} catch (InvocationTargetException e1) {e1.printStackTrace();}ExtendUtil util = (ExtendUtil) cx.newObject(scope, "util");scope.put("util", scope, util);String[] file = {"/env.rhino.1.2.js", "/jquery.js" ,"/batchExportWord.js"};for (String f : file) {try {FileReader in = null;in = new FileReader(System.getProperty("user.dir")+"/WebContent/"+f);cx.evaluateReader(scope, in, f, 1, null);if(f.equalsIgnoreCase("/batchExportWord.js")){String jsFunction = "exportWord";Object fObj = scope.get(jsFunction, scope); if (!(fObj instanceof Function)) { System.out.println("找不到方法" +jsFunction); } else { String jsonStr ="{name:'张三',sex:'男',birthday:'1981.10',age:46,faceImg:'./img/face.jpg',education:{academicQualification:'大学本科',degree:'工学学士',university:'清华大学',major:'科学社会主义与国际共产主义运动'}}"; JSONObject json = JSONObject.fromObject(jsonStr); Object functionArgs[] = {json}; Function fo = (Function)fObj; Object result = fo.call(cx, scope, scope, functionArgs); System.out.println("返回结果:"+Context.toString(result)); }}} catch (FileNotFoundException e1) {e1.printStackTrace();} catch (IOException e1) {e1.printStackTrace();}}}}ExtendUtil.java类
package com.rhino.test;import org.mozilla.javascript.Scriptable;import org.mozilla.javascript.ScriptableObject;public class ExtendUtil extends ScriptableObject {private static final long serialVersionUID = 1L;@Overridepublic String getClassName() {return "util";}public void jsFunction_log(Scriptable host) {System.out.println(host);}public String jsFunction_getContext(Scriptable host) {return host.toString();}}batchExportWord.js,该代码就不粘出了,导出函数同博客 JS导出Word——修正jquery.wordexport.js不支持IE8问题 所列代码一致
3)程序介绍
A、运行JavaScript基本环境设置
Context cx = ContextFactory.getGlobal().enterContext();Scriptable scope = cx.initStandardObjects(null);cx.setOptimizationLevel(-1);cx.setLanguageVersion(Context.VERSION_1_8);B、在JavaScript中设置Java类函数ExendUtil,对应JavaScript对象为 Util
ScriptableObject.defineClass(scope, ExtendUtil.class);ExtendUtil util = (ExtendUtil) cx.newObject(scope, "util");scope.put("util", scope, util);
对于ExtendUtil,JavaScript中调用方式为
util.log('导出word成功');C、执行JavaScript脚本
cx.evaluateReader(scope, in, f, 1, null);D、调用JavaScript中的函数,并将函数结果输出
String jsFunction = "exportWord";Object fObj = scope.get(jsFunction, scope);String jsonStr ="{.....}";JSONObject json = JSONObject.fromObject(jsonStr);Object functionArgs[] = {json};Function fo = (Function)fObj;Object result = fo.call(cx, scope, scope, functionArgs);System.out.println("返回结果:"+Context.toString(result));E、获取JavaScript输出第二种方式为:即在scope中设置Java的对象在JavaScript中赋值
scope.put("arr", scope, new ArrayList());在JavaScript中直接使用arr作为数组接收值即可,在Java中调用JavaScript函数的方法后,即可在Java中使用arr中的值了
4)程序输出结果如下图
4、问题
已Java类的形式 运行上述的JavaScript当中的脚步程序成功,但是servlet类,在执行代码cx.evaluateReader(scope, in, f, 1, null) 执行env.rhino.1.2.js脚步时报数组越界错误,如下图,如若有大牛看到这篇文章,请指点,至今未找出解决方法,谢谢。
0 0
- 采用Rhino在JAVA中运行JavaScript
- 在java中利用rhino执行javascript
- Servlet中实现通过Rhino在Java中调用JavaScript
- java中使用javascript Rhino 引擎
- java调用Rhino(javascript)
- Rhino在java中的用法
- [Java][Js]利用Rhino在服务器端执行JavaScript、并实现Java与JavaScript相互调用
- java,javascript,groovy和Rhino 的运行效率到底相差的有多远?
- 在Java中运行javascript脚本示例
- 纯java 的javascript引擎:rhino
- 纯java 的javascript引擎:rhino
- 纯java 的javascript引擎:rhino .
- java调用javascript :js引擎rhino
- Rhino -- 基于java的javascript实现
- Mozilla Rhino: implementation of JavaScript in Java
- Rhino -- 基于java的javascript实现
- 【WSO2】【jaggery】【javascript解释器】【java】【Rhino】
- Rhino——一个可以在Java中操作和执行JS的框架
- 对php中的二维数组进行排序
- 配置FTP服务,内网可以访问到,外网访问不到的解决办法(win 2008)
- Spring事务管理(详解+实例)
- 加密技术(android开发经常用到的加密技术)
- JS正则表达式验证账号、手机号、电话和邮箱
- 采用Rhino在JAVA中运行JavaScript
- js 去掉字符串最后一个逗号 “,”
- tcp三次握手及其必要性
- 模板引擎
- HDU 5289 Assignment (线段树)
- MySQL数据库 范式
- 算法竞赛——入门经典p35
- JSON的语法
- JAVA:JDBC连接MySQL数据库