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

[size=large][align=center][b]Pure JS (6.1):使用 Rhino Shell 和 Debugger 运行和调试 JS[/b][/align][/size]
  之前一直使用 java 7 自带的 ScriptEngine 执行服务器端 JS,然而,一个重要的缺陷是无法进行调试。
  因此我将之前的一些 Java 代码改为 JavaScript 代码,并尝试着使用 Rhino Debugger。
  本文就是介绍这方面的探索成果的。

[size=medium][align=center][b]1. Rhino Shell 和 Debugger 介绍[/b][/align][/size]
  Rhino Shell 可以用于执行 JS,与之前直接通过 Run As Java Application 方式运行没有太大区别。
  Rhino Debugger 是一个可以用于调试的 GUI 工具。

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

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

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


(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) {
// 省略 ...
}
}());

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

[size=medium][align=center][b]3. Run Configurations 设置,运行与调试效果[/b][/align][/size]
  将 js.jar 添加到项目中之后,我们还需要在 Run Configurations 窗口中设置:
  如图,首先需要选择 菜单中的 Run Configurations ...,并创建新的 Configuration:

[align=center][img]http://dl.iteye.com/upload/picture/pic/94067/397ff6af-77d2-3180-9938-789f536462ad.png[/img][/align]
[align=center][img]http://dl.iteye.com/upload/picture/pic/94069/1cc3d34c-6433-3cfd-827d-4d1a2f01b47e.png[/img][/align]

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

[align=center][img]http://dl.iteye.com/upload/picture/pic/94071/d89ffe91-9e28-3eea-9f59-d5c8cef669b9.png[/img][/align]

[align=center][img]http://dl.iteye.com/upload/picture/pic/94073/d7350804-1651-37a5-afe3-24df078dcd4f.png[/img][/align]
  Rhio Debugger 的设置如下:

[align=center][img]http://dl.iteye.com/upload/picture/pic/94075/a84dd142-eab9-317a-8dea-028dcce88614.png[/img][/align]

[align=center][img]http://dl.iteye.com/upload/picture/pic/94077/0380c542-e4e8-3749-b70a-71c3c32ac5c0.png[/img][/align]
  第一次运行时需要点击窗口右下角的“Run”按钮,之后就可以在快捷菜单中选择 PureJS 和 PureJS_debug 进行启动了:

[align=center][img]http://dl.iteye.com/upload/picture/pic/94079/6b9ddf53-1c46-329e-82a5-f58a43e367b5.png[/img][/align]
  以下是调试的效果:

[align=center][img]http://dl.iteye.com/upload/picture/pic/94081/f4f745e4-f887-3937-90b8-72ffc878b0cf.png[/img][/align]

[align=center][img]http://dl.iteye.com/upload/picture/pic/94085/354c8177-2ae3-34ec-b566-e73cd0ec1519.png[/img][/align]

[align=center][img]http://dl.iteye.com/upload/picture/pic/94089/22c3da21-ff55-3104-9370-78ccb43ff18d.png[/img][/align]


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

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

  完成这些研究之后,我们就有一个基本的 Server-side JS 框架了。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值