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


原文:  http://xxing22657-yahoo-com-cn.iteye.com/blog/1121314
  之前一直使用 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): 

Javascript代码   收藏代码
  1. (function() {  
  2.     var imp, dirs, defaults, server, context;  
  3.   
  4.     try {  
  5.         importer();  
  6.         consts();  
  7.         loadScripts();  
  8.         startMonit();  
  9.         startServer();  
  10.     } catch (e) {  
  11.         print(e);  
  12.     }  
  13.   
  14.     function importer() {  
  15.         imp = JavaImporter(  
  16.             java.io,  
  17.             org.eclipse.jetty.server,  
  18.             org.eclipse.jetty.servlet,  
  19.             com.purejs.lib);  
  20.     }  
  21.   
  22.     function consts() {  
  23.         dirs = ["scripts/lib""webapp/js/both""scripts/app"];  
  24.         defaults = "*.js,*.css,*.ico,*.txt,*.png,*.jpg,*.gif,*.htm,*.html,*.swf";  
  25.     }  
  26.   
  27.     function loadScripts() {  
  28.         print("Loading Scripts ...");  
  29.         load("scripts/config.js");  
  30.         loadDirs(dirs);  
  31.     }  
  32.   
  33.     function startMonit() {  
  34.         print("Starting Monit ...");  
  35.         pure.each = each;  
  36.         pure.monit(dirs, function(file){  
  37.             file = imp.File(file);  
  38.             if(file.exists() && file.file) {  
  39.                 load(file);  
  40.             }  
  41.         });  
  42.     }  
  43.   
  44.     function startServer() {  
  45.         print("Starting Server ...");  
  46.         createServer();  
  47.         server.start();  
  48.         server.join();  
  49.     }  
  50.   
  51.     // 以下省略...  
  52. }());  


  scripts/lib/pure/apiServlet.js 的内容如下,用于代替之前的 JSServlet: 
Javascript代码   收藏代码
  1. (function() {  
  2.     var servlet = javax.servlet.http.HttpServlet;  
  3.     pure.apiServlet = servlet({ service: service });  
  4.   
  5.     function service(req, res) {  
  6.         var result;  
  7.   
  8.         try {  
  9.             result = run(req, res);  
  10.         } catch (e) {  
  11.             print(e);  
  12.             result = { error: e.toString(), success: false }  
  13.         }  
  14.   
  15.         if (result != null) {  
  16.             res.setContentType("text/html; charset=UTF8");  
  17.             res.getWriter().write(JSON.stringify(result));  
  18.         }  
  19.     }  
  20.   
  21.     function run(req, res) {  
  22.         // 省略 ...  
  23.     }  
  24. }());  

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

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 框架了。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值