由于有些网页采用的是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脚步时报数组越界错误,如下图,如若有大牛看到这篇文章,请指点,至今未找出解决方法,谢谢。

采用Rhino在JAVA中运行JavaScript相关推荐

  1. java rhino 运行 js_使用Rhino在Java中调用Javascript脚本

    转自:http://www.iteye.com/topic/87423 前段时间,在浏览javaeye论坛,看见有人征集如何在java中运行数学表达式. 结果方案五花八门: 1.jakarta com ...

  2. java暂停脚本_用Rhino解析Java中的JavaScript:暂停/恢复脚本

    我正在使用JDK的javax.script.*包.具体来说,我使用的是JavaScript引擎,据我所读,它似乎是基于Mozilla开发的名为Rhino的JavaScript- in-Java解释器. ...

  3. 在 .NET Core 中运行 JavaScript

    一.前言 在 .NET Framework 时,我们可以通过V8.NET等组件来运行 JavaScript,不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core ,我们如何在 . ...

  4. java 执行js selenium_如何在Selenium WebDriver Java中使用JavaScript

    根据您之前的问题,我想您想要从Java的WebDriver运行JavaScript代码段.如果我错了,请纠正我. WebDriverJs实际上是"只是"另一种WebDriver语言 ...

  5. linux钟java运行命令,在java中运行linux命令

    我想在java中运行"ls"命令,我的代码是- 注意: - 我正在使用WINDOWS.在java中运行linux命令 import java.io.IOException; pub ...

  6. 在 .NET 应用程序中运行 JavaScript

    前几天我在做一个副业,意识到我需要使用一些 JavaScript 功能.一想到要再次处理 Node.js 和 npm,我就完全放弃了,所以我决定研究一下在 .NET 应用程序中运行 JavaScrip ...

  7. php运行js代码,如何在PHP中运行JavaScript代码?(代码示例)

    JavaScript是客户端脚本语言,PHP是用于与数据库交互的服务器端脚本语言.那么如何如何在PHP中运行JavaScript?本篇文章就来给大家介绍几种在PHP中运行JavaScript的方法,希 ...

  8. java 执行javascript_说说如何在 Java 中执行 JavaScript 脚本

    Java 是强类型的静态语言,即所有的代码在运行之前都必须先进行严格的类型检查并编译为 JVM 字节码.这样做虽然保证了安全与性能,但却牺牲了灵活性.而那些动态语言(JavaScript .Pytho ...

  9. java获取vm运行参数_如何获取在Java中运行Java VM的版本?

    java获取vm运行参数 To get the version of running VM (Virtual Machine) in Java, we use the getProperties() ...

最新文章

  1. hashlib模块使用详情
  2. JS 获取指定时间的时间戳(兼容各个浏览器)
  3. 自绘列表框控件显示略缩图----再稍微改进点点。。
  4. 在java中为什么_属性绑定到类型_方法绑定到对象_13. Java基础之类型信息(RTTI和反射)...
  5. 安装git之后,桌面出现蓝色问号的解决方法
  6. linux任务计划不执行时间,Linux任务计划、周期性任务执行
  7. SHOPEX网店系统测试 50万家网站的安全令人担忧
  8. 微信支付计算机,微信电脑版怎么支付?怎么开通微信支付?
  9. 菊花是哪个城市的市花1_2.html,菊花的季节作文
  10. BT-3の蓝牙技术原理のBT协议の蓝牙核心协议の链路管理协议(LMP)
  11. ClickHouse----单击安装 引擎
  12. 《地球概论》(第3版)笔记 第三章 地球的运动
  13. MySQL笔记:第06章_多表查询
  14. Slider Revolution 轮播滑块Wordpress插件下载
  15. CVE-2018-0802个人浅析
  16. 将AAB(Android App Bundle)转换为APK
  17. filebrowser + frp搭建一个公网+局域网访问的网盘(Windows内网+阿里云服务器)
  18. Android Bitmap转换
  19. 基于java的围棋游戏设计
  20. 串行LCM12864驱动程序

热门文章

  1. Linux之用户授权及权限安全
  2. python实现图像添加噪声、噪声处理、滤波器代码实现
  3. 如何在Mac上下载并安装macOS Catalina
  4. 2022年4月28日 复盘计划
  5. 文本聚类(一)—— LDA 主题模型
  6. 高斯随机信号matlab,高斯随机信号生成初探.ppt
  7. iNode客户端使用教程(中山大学)
  8. 福昕阅读器PDF文件不能标记不能高亮的原因与解决方案
  9. matlab生成word模板
  10. The APK file does not exist on disk