`
裴小星
  • 浏览: 265786 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
8ccf5db2-0d60-335f-a337-3c30d2feabdb
Java NIO翻译
浏览量:27848
F3e939f0-dc16-3d6e-8c0b-3315c810fb91
PureJS开发过程详解
浏览量:74359
07a6d496-dc19-3c71-92cf-92edb5203cef
MongoDB Java ...
浏览量:63071
社区版块
存档分类
最新评论

Pure JS (6.1):使用 Rhino Shell 和 Debugger 运行和调试 JS

阅读更多
Pure JS (6.1):使用 Rhino Shell 和 Debugger 运行和调试 JS

  之前一直使用 java 7 自带的 ScriptEngine 执行服务器端 JS,然而,一个重要的缺陷是无法进行调试。
  因此我将之前的一些 Java 代码改为 JavaScript 代码,并尝试着使用 Rhino Debugger。
  本文就是介绍这方面的探索成果的。

1. Rhino Shell 和 Debugger 介绍

  Rhino Shell 可以用于执行 JS,与之前直接通过 Run As Java Application 方式运行没有太大区别。
  Rhino Debugger 是一个可以用于调试的 GUI 工具。

  为了使用 Rhino Shell 和 Debugger ,首先需要下载 js.jar ,并将其添加到 Build Path 中。
  js.jar 的下载地址:http://www.mozilla.org/rhino/download.html

  Rhino 官网关于 Shell 和 Debugger 的介绍:
  http://www.mozilla.org/rhino/shell.html
  http://www.mozilla.org/rhino/debugger.html

2. Java 代码转为 JavaScript 代码

  为了更方便地使用 Rhino Debugger 进行调试,我将之前的一些 Java 代码转换成了 JavaScript 代码。
  以下是 script/server.js 的内容,用于代替之前的 JSServer 类(http://xxing22657-yahoo-com-cn.iteye.com/blog/1052485):

(function() {
	var imp, dirs, defaults, server, context;

	try {
		importer();
		consts();
		loadScripts();
		startMonit();
		startServer();
	} catch (e) {
		print(e);
	}

	function importer() {
		imp = JavaImporter(
			java.io,
			org.eclipse.jetty.server,
			org.eclipse.jetty.servlet,
			com.purejs.lib);
	}

	function consts() {
		dirs = ["scripts/lib", "webapp/js/both", "scripts/app"];
		defaults = "*.js,*.css,*.ico,*.txt,*.png,*.jpg,*.gif,*.htm,*.html,*.swf";
	}

	function loadScripts() {
		print("Loading Scripts ...");
		load("scripts/config.js");
		loadDirs(dirs);
	}

	function startMonit() {
		print("Starting Monit ...");
		pure.each = each;
		pure.monit(dirs, function(file){
			file = imp.File(file);
			if(file.exists() && file.file) {
				load(file);
			}
		});
	}

	function startServer() {
		print("Starting Server ...");
		createServer();
		server.start();
		server.join();
	}

	// 以下省略...
}());


  scripts/lib/pure/apiServlet.js 的内容如下,用于代替之前的 JSServlet:
(function() {
	var servlet = javax.servlet.http.HttpServlet;
	pure.apiServlet = servlet({ service: service });

	function service(req, res) {
		var result;

		try {
			result = run(req, res);
		} catch (e) {
			print(e);
			result = { error: e.toString(), success: false }
		}

		if (result != null) {
			res.setContentType("text/html; charset=UTF8");
			res.getWriter().write(JSON.stringify(result));
		}
	}

	function run(req, res) {
		// 省略 ...
	}
}());

  其他几个类也进行了替换,请下载附件并查看。

3. Run Configurations 设置,运行与调试效果

  将 js.jar 添加到项目中之后,我们还需要在 Run Configurations 窗口中设置:
  如图,首先需要选择 菜单中的 Run Configurations ...,并创建新的 Configuration:




  我们需要分别为 shell 和 debugger 进行设置。
  Rhino Shell 的设置如下:




  Rhio Debugger 的设置如下:




  第一次运行时需要点击窗口右下角的“Run”按钮,之后就可以在快捷菜单中选择 PureJS 和 PureJS_debug 进行启动了:


  以下是调试的效果:








  当然,仅仅有 debugger 还是不够的,我们还需要测试、日志、编译等等。
  以下是近期的研究列表:

  使用 Rhino Unit 进行测试 (http://xxing22657-yahoo-com-cn.iteye.com/blog/1131612)
  日志和 proxy 对象 (http://xxing22657-yahoo-com-cn.iteye.com/blog/1136195)
  权限控制、数据验证 (http://xxing22657-yahoo-com-cn.iteye.com/blog/1136987)
  增强可配置性 (http://xxing22657-yahoo-com-cn.iteye.com/blog/1137790)
  配置 Spket 智能感知
  使用 Rhino Compliler 编译项目

  完成这些研究之后,我们就有一个基本的 Server-side JS 框架了。
11
6
分享到:
评论

相关推荐

    Pure JS (6.2):结合 Rhino 和 Junit GUI 测试 JS

    标题 "Pure JS (6.2):结合 Rhino 和 Junit GUI 测试 JS" 提到的是一个关于使用纯JavaScript(Pure JS)与Rhino JavaScript引擎以及JUnit进行图形用户界面(GUI)测试的实践方法。Rhino是Mozilla基金会开发的一个...

    Pure JS (4.3): pure.db.js 的实现(基于 MongoDB Rhino Driver)

    《纯JavaScript实现:pure.db.js基于MongoDB Rhino Driver详解》 在JavaScript的世界里,数据库操作通常依赖于服务器端的语言支持,如PHP、Python或Node.js等。然而,有一种另辟蹊径的方式,即通过Rhino JavaScript...

    Rhino_Debugger(Rhino引擎的JS调试工具)

    Rhino_Debugger Rhino引擎的JS调试工具 直接可运行Jar

    PureJS (6.3):Rhino 中的日志与 proxy 对象

    《PureJS (6.3):Rhino 中的日志与 Proxy 对象》 在JavaScript的世界里,Rhino是一个非常特别的存在。它是由Mozilla开发的一个开源的JavaScript引擎,它允许JavaScript代码运行在Java平台上,提供了丰富的Java对象...

    深入浅出Rhino:Java与JS互操作

    《深入浅出Rhino:Java与JS互操作》是一本专注于探讨如何在Java环境中使用Rhino JavaScript引擎进行交互的书籍。Rhino是Mozilla基金会开发的一个开源JavaScript解释器,它完全用Java编写,使得JavaScript能够在Java...

    rhino+javafx实现js脚本调试

    Rhino还提供了一些用于调试的功能,如错误处理、源代码映射和步进执行,这些都为开发和调试JavaScript代码提供了便利。 JavaFX则可以用来构建调试器的用户界面,展示代码、设置断点、控制执行流程等。通过JavaFX,...

    Pure JS (1): 在 jetty 上运行 JavaScript

    标题中的“Pure JS (1): 在 jetty 上运行 JavaScript”表明了本文主要关注的是如何在Jetty服务器上执行JavaScript代码,而不用依赖于其他非JavaScript的框架或库,如Node.js。Jetty是一个轻量级的Java Web容器,它...

    3D建模软件:Rhino二次开发-Rhino二次开发基础+几何形状创建+3D建模核心+3D打印等全套教程

    3D建模软件:Rhino二次开发.docx 3D建模软件:Rhino二次开发all.docx 3D建模软件:Rhino二次开发_3D建模核心概念.docx 3D建模软件:Rhino二次开发_3D打印与Rhino二次开发.docx 3D建模软件:Rhino二次开发_...

    java js引擎调试js代码

    如果你只是想快速测试和调试小块代码,JShell是一个不错的选择。 **使用Java Debug Interface (JDI)** 对于更复杂的调试需求,可以利用Java Debug Interface (JDI)。JDI是Java虚拟机工具接口的一部分,允许开发者...

    Rhino教程:用Rhino制作一把螺丝刀.doc

    【Rhino教程:用Rhino制作一把螺丝刀】 在3D建模软件Rhino中创建一个复杂的对象,如螺丝刀,需要对软件的基本操作有深入理解。本教程将引导初学者通过实际操作学习Rhino的基本建模技术。Rhino 2.0版本被用于这个...

    FF的js引擎rhino源码,java编写

    6. **Rhino的API**:Rhino提供了一系列API供开发者使用,包括Context、Scriptable、ScriptableObject、Function等类,它们分别用于管理JavaScript执行上下文、表示JavaScript对象、定义JavaScript对象的行为以及表示...

    Boot_debugger_

    总的来说,"Boot_debugger_"主题涵盖的内容广泛,涉及Windows调试器的使用、启动调试的配置和执行、以及特定问题的排查。通过熟练掌握这些技能,开发者可以有效地解决系统启动过程中遇到的各种疑难杂症。

    java运行js脚本引擎-----rhino

    Java运行JavaScript脚本引擎——Rhino,是一种在Java平台上执行JavaScript代码的重要工具。Rhino是Mozilla基金会的一个开源项目,它实现了ECMAScript标准,也就是JavaScript的标准化版本。Rhino以其高性能和深度集成...

    使用Rhino让java执行javascript的方法实例

    在Java中运行JavaScript代码的能力是开发跨平台应用时的一个强大工具,这使得Java开发者能够利用JavaScript的灵活性和库资源。Rhino,由Mozilla基金会开发,就是这样一个JavaScript引擎,它允许Java程序直接执行...

    rhino-bytearray:在Rhino JavaScript引擎中使用字节数组

    在Rhino JavaScript引擎中使用字节数组 注意 由该代码制成的字节数组可以与Java中的字节数组不同,但它似乎可以像Java字节数组一样完美地工作。 用 let b = ( new ByteArray ( size ) ) . init ( ) ;

    Java直接运行JS代码

    以下是一个简单的示例,展示如何使用Nashorn引擎在Java中运行JavaScript代码: ```java import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public ...

    embedded-rhino-debugger-1.2.jar

    jar包,官方版本,自测可用

Global site tag (gtag.js) - Google Analytics