小编典典

require.js在rhino上运行良好。最近,我在一个项目中使用了它。

您必须确保使用r.js(不是require.js),犀牛的require.js的修改版本。

您必须扩展ScritableObject类才能实现load和print运行。调用时require(["a"]),将调用此类中的load函数,您可以调整此函数以从任何位置加载js文件。在以下示例中,我从加载classpath。

您必须arguments在sharedscope中定义属性,如下面的示例代码所示

(可选)您可以使用配置子路径require.config,以指定classpath内js文件所在的子目录。

JsRuntime支持

public class JsRuntimeSupport extends ScriptableObject {

private static final long serialVersionUID = 1L;

private static Logger logger = Logger.getLogger(JsRuntimeSupport.class);

private static final boolean silent = false;

@Override

public String getClassName() {

return "test";

}

public static void print(Context cx, Scriptable thisObj, Object[] args,

Function funObj) {

if (silent)

return;

for (int i = 0; i < args.length; i++)

logger.info(Context.toString(args[i]));

}

public static void load(Context cx, Scriptable thisObj, Object[] args,

Function funObj) throws FileNotFoundException, IOException {

JsRuntimeSupport shell = (JsRuntimeSupport) getTopLevelScope(thisObj);

for (int i = 0; i < args.length; i++) {

logger.info("Loading file " + Context.toString(args[i]));

shell.processSource(cx, Context.toString(args[i]));

}

}

private void processSource(Context cx, String filename)

throws FileNotFoundException, IOException {

cx.evaluateReader(this, new InputStreamReader(getInputStream(filename)), filename, 1, null);

}

private InputStream getInputStream(String file) throws IOException {

return new ClassPathResource(file).getInputStream();

}

}

样例代码

public class RJsDemo {

@Test

public void simpleRhinoTest() throws FileNotFoundException, IOException {

Context cx = Context.enter();

final JsRuntimeSupport browserSupport = new JsRuntimeSupport();

final ScriptableObject sharedScope = cx.initStandardObjects(browserSupport, true);

String[] names = { "print", "load" };

sharedScope.defineFunctionProperties(names, sharedScope.getClass(), ScriptableObject.DONTENUM);

Scriptable argsObj = cx.newArray(sharedScope, new Object[] {});

sharedScope.defineProperty("arguments", argsObj, ScriptableObject.DONTENUM);

cx.evaluateReader(sharedScope, new FileReader("./r.js"), "require", 1, null);

cx.evaluateReader(sharedScope, new FileReader("./loader.js"), "loader", 1, null);

Context.exit();

}

}

loader.js

require.config({

baseUrl: "js/app"

});

require (["a", "b"], function(a, b) {

print('modules loaded');

});

js/app 目录应该在您的类路径中。

2020-11-13

java中rhino什么用_使用require.js和Java / Rhino解析模块相关推荐

  1. java中execution的作用_一文初步了解Java虚拟机

    大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 什么是JVM? JVM(Java Virtual Machin ...

  2. java中方法的具体化_我为什么要关心Java没有具体化的泛型?

    问题 这是我最近在一次采访中提出的一个问题,即候选人希望看到添加到Java语言中的问题.它通常被认为是Java没有的痛苦reified generics但是,当被推动时,候选人实际上无法告诉我他在那里 ...

  3. java中 先进后出的集合_程序猿的日常——Java中的集合列表

    列表对于日常开发来说实在是太常见了,以至于很多开发者习惯性的用到数组,就来一个ArrayList,根本不做过多的思考.其实列表里面还是有很多玩法的,有时候玩不好,搞出来bug还得定位半天.所以这里就再 ...

  4. java中compile函数用法_【转】关于java中Pattern.compile函数的相关解释

    Pattern.compile函数:Pattern Pattern.compile(String regex, int flag) flag的取值范围如下: Pattern.CANON_EQ,当且仅当 ...

  5. java中strictfp么意思_什么时候应该在java中使用“strictfp”关键字?

    Strictfp确保您从每个平台上的浮点计算获得完全相同的结果.如果不使用strictfp,JVM实现可以在可用的地方使用额外的精度. Within an FP-strict expression, ...

  6. java中抽象类继承抽象类_用Java中的抽象类扩展抽象类

    java中抽象类继承抽象类 示例问题 当我创建Java :: Geci抽象类AbstractFieldsGenerator和AbstractFilteredFieldsGenerator我遇到了一个不 ...

  7. 在java中如何输入角度_在Java中获取角度的反余弦

    为了获得Java中给定值的反余弦,我们使用java.lang.Math.acos()方法.该acos()方法接受需要计算角度的双精度值.返回的角度范围在0到pi之间.如果参数为NaN或大于1或小于-1 ...

  8. java中的进制输出转换_Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  9. java实现次方的运算_【技术干货】Java 面试宝典:Java 基础部分(1)

    海牛学院的 | 第 616 期 本文预计阅读 |18 分钟 Java 基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法, ...

最新文章

  1. php控制器和路由机制,自制PHP框架之路由与控制器
  2. lofter 爬虫_200627 | Lofter格兰芬多标签日榜
  3. sca60c使用程序_第3部分:SCA应用程序的工作负载平衡的WebSphere MQ客户端连接
  4. linux 添加raid0驱动,网众linux添加新raid驱动.doc
  5. 普鸥知识产权|如何申请美国外观专利?申请费用、时间、流程?
  6. 百度AI开放平台学习——EasyDL经典版-图像分类模型训练与验证
  7. 计算机中插入背景图片怎样操作,如何将图片设置为Word页面背景?
  8. 快速识别图中文字的操作方法
  9. 解决方案:Browserslist:caniuse-lite is outdated. Please run next command `npm update`
  10. org.w3c.dom。 XML解析 练习
  11. SpringBoot项目中华为云 内容审核的使用(内附代码)
  12. 如何给深度学习加速——模型压缩、推理加速
  13. 今天和几个朋友交流个人品牌的看法
  14. java判断输入回车符_Java编程:获取用户是否输入回车符
  15. IT应届实习能不加班?如何逃离996?
  16. 网络摄像头python_Python OpenCV 调用网络摄像头
  17. 慕课离线下载视频支持电脑播放
  18. 哈工大计算机学院软件工程硕士,哈尔滨工业大学 2015年示范性软件学院软件工程硕士招生简章...
  19. 类与对象(中) 构造函数和析构函数
  20. 他从锅盔小贩到拉闸大亨,举步维艰终于发家致富

热门文章

  1. warning: control reaches end of non-void function:错误解决
  2. 基于typescript的rtsp客户端实现
  3. UE4之vs2019IntelliSense错误
  4. 深度学习自学(十七):caffe-sphereface-编译matcaffe遇到的问题
  5. 商务高端、CPU要求高-笔记本选型
  6. WordPress如何开启用户注册功能
  7. python都有哪些变量_Python变量作用域有哪些
  8. windows系统bat批处理 开机一键多个程序
  9. CSDN写博客图片的放大、缩小、去水印、居中
  10. mysql导出不带注释的sql语句_MySQL mysqlbinlog解析出的SQL语句被注释是怎么回事