`
abruzzi
  • 浏览: 454246 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Javascript执行器(Rhino)

阅读更多

引言

前一段时间用swing开发了sTodo(http://code.google.com/p/stodo/ ),对swing开发GUI的基本流程算是熟悉了,所以也常用swing来写些小东西。在实际的开发或者学习中,经常遇到这样的场景:想要执行一段javascript脚本,验证一些想法,这可能需要你打开编辑器,建立一个新的html页面,然后写一堆标签,然后用script标签将脚本包起来,执行以下,整个过程比较麻烦。

 

其实javascript在web中的应用只是一部分,它最为一个语言,可以完全独立出来完成其他的工作,比如脚本化java应用等(上边提到的sTodo就内嵌了一个javascript的执行环境,用户可以自己定制或者扩展sTodo的部分功能)。JDK6中,SUN对其加入了对脚本的支持,Rhino (Google公司的Norris Boyd开发的)为纯java实现的一个javascript引擎。

 

有天在学习别人关于javascript中作用域链的文章的时候,看到作者举的例子,想自己尝试一下。于是就打开编辑器,新建了一个html文档,突然就想到为什么不设计一个小工具,直接将脚本内容(一般是与DOM无关的逻辑)写入一个输入区域,然后点击一个按钮,就可以得到自己想要的结果,这样就方便多了,于是有了se(script executor ),也就是今天要分享的东西。

 

效果

 

上边的这个编辑器,用来输入脚本,然后点击eval按钮,可以在下边的结果框中看到结果,本例中就是计算:

x*2 + y*3 (x = 5, y = 6)

这个表达式的值


在第七行,故意引入了一个DOM中的函数alert, 然后脚本引擎rhino会检测到错误,并指定行号:


 

设计思路

主要思路很简单,将编辑器中的文本整个复制起来,传输给JDK的javascript脚本引擎解释,然后重定向System.out和System.err到显示结果的JTextArea。其中比较关键的代码是,解释脚本的部分:

 

    private Object evalScript(String script){
    	Object result = new Object();
    	ScriptEngineManager manager = new ScriptEngineManager();
    	ScriptEngine engine = manager.getEngineByName("JavaScript");
    	try {
    	    result = engine.eval(script);
    	} catch (ScriptException e) {
    	    e.printStackTrace();
    	}
        return result;
    }
 

代码很简单,这里就不写出来了,需要的可以看看附件中的代码。

 

其他

se中主要用到的其他开源包有:

  • RSyntaxTextArea , 用以高亮显示文本,显得界面更友好
  • Console, 用以重定向System.out和System.err到JTextArea

界面很简单,主要的功能有了,不过还需要进一步实现,抽时间把load, save等完成,就比较好用了。

 

运行方式:

java -jar se.jar //需要注意的是resource目录需要和se.jar在同一级目录下。

  • 大小: 17.2 KB
  • 大小: 15.3 KB
  • se.zip (498.5 KB)
  • 下载次数: 375
分享到:
评论
18 楼 abruzzi 2009-12-08  
lenky0401 写道
LZ要实现的是firebug的console简化功能?

支持一下。


差不多吧,不过也仅仅跟firebug的console相似,其他的地方无相似之处。
17 楼 lenky0401 2009-12-07  
LZ要实现的是firebug的console简化功能?

支持一下。
16 楼 whaosoft 2009-12-06  
不错,做成javascript调试器就更好啦
15 楼 yza0088 2009-12-06  
不错,看了很受启发
14 楼 abruzzi 2009-12-06  
alosin 写道
对于排除DOM过后的JavaScript,应该没得调试的需求吧

当然有了,JavaScript是一门语言,不是只能在脚本化DOM的,作为Server端的脚本或者App的脚本,肯定需要调试。
13 楼 alosin 2009-12-05  
对于排除DOM过后的JavaScript,应该没得调试的需求吧
12 楼 abruzzi 2009-12-05  
foy 写道
楼主是准备做一个JavaScript得集成开发环境?
貌似为这种动态语言做这种环境比较麻烦


不打算开发一个完整的IDE,只是一个执行器,方便验证一些代码片段而已,呵呵。其实rhino的作者提供了一个rhino的调试器,可以步进,打断点,watch等,可以参考,不过不打算做成那样。
11 楼 ted0928 2009-12-05  
zj1211 写道
支持字体平滑的, 不信你到它的官网上看一下它的applet 示例,view菜单上有“Anti-Aliasing"选项

谢  我看了源代码  问题解决了
10 楼 zj1211 2009-12-05  
支持字体平滑的, 不信你到它的官网上看一下它的applet 示例,view菜单上有“Anti-Aliasing"选项
9 楼 ted0928 2009-12-05  
请问LZ  编辑器为什么不支持字体平滑效果呢,或者需要怎么设置一下?
8 楼 foy 2009-12-05  
楼主是准备做一个JavaScript得集成开发环境?
貌似为这种动态语言做这种环境比较麻烦
7 楼 liu78778 2009-12-05  
不错, LZ可以参考EditPlus, 我平时都是用它调试
6 楼 abruzzi 2009-12-04  
ry.china 写道
前几天我看见有人想在java中使用jquery解析采集到html,而不想用java的htmlparser包,看了楼主的东东好像离实现那个目的不远了

jQuery的作者john就用rhino在java上实现了一个parser了,叫env.js,你可以到他的网站上看看,呵呵。
5 楼 ry.china 2009-12-04  
前几天我看见有人想在java中使用jquery解析采集到html,而不想用java的htmlparser包,看了楼主的东东好像离实现那个目的不远了
4 楼 abruzzi 2009-12-04  
ziyu_1 写道
alert(x),这个为什么会报错?

rhino是一个纯java的javascript引擎,不包含DOM中的函数。alert是DOM中的window的一个函数,因此没有包含在rhino中,如果需要调试,可以使用print或者println。
3 楼 ziyu_1 2009-12-04  
alert(x),这个为什么会报错?
2 楼 abruzzi 2009-12-04  
yangsheng 写道
LZ思路很好但是这个工具目前不太好使经常爆异常希望LZ继续完善

不好意思,目前只是一个原型,有时间就整理一下
1 楼 yangsheng 2009-12-04  
LZ思路很好但是这个工具目前不太好使经常爆异常希望LZ继续完善

相关推荐

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

    Java运行JavaScript脚本引擎Rhino是一个强大的工具,它允许Java应用程序执行JavaScript代码并利用JavaScript的灵活性和动态性。Rhino是Mozilla基金会开发的一个开源项目,它完全用Java编写,因此可以无缝集成到Java...

    org.mozilla.javascript-1.7.2.jar.zip

    1. 高性能:Rhino采用了高效的字节码解释器,能快速执行JavaScript代码,且与Java环境高度兼容,使得在服务器端和桌面应用中使用JavaScript成为可能。 2. 兼容性:Rhino对ECMAScript 3的全面支持保证了与主流浏览器...

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

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

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

    Rhino是Mozilla基金会开发的一个开源JavaScript解释器,它完全用Java编写,使得JavaScript能够在Java平台上运行,并且能够与Java代码进行深度交互。这本书主要涉及以下几个关键知识点: 1. **Rhino引擎介绍**:...

    rhino+javafx实现js脚本调试

    1. **集成Rhino引擎**:在JavaFX应用中,我们需要先引入Rhino库,然后创建一个Rhino的Context对象,这是执行JavaScript代码的上下文。 2. **加载和解析脚本**:使用Rhino的API读取并解析JavaScript源文件,将其转化...

    Mozilla Rhino 介绍

    最初,Rhino通过将JavaScript编译成Java字节码的方式来获得最佳性能,但由于这种方式在垃圾回收、编译和加载方面的开销较大,无法满足某些场景下的需求,Rhino随后提供了动态解释执行模式。 随着Rhino的开源,...

    org.mozilla.javascript-1.7.2.jar

    Rhino是一个开源的JavaScript解释器,由Mozilla基金会维护,它允许JavaScript代码在Java平台上运行。Rhino以其高效的性能和强大的功能,成为Java开发者在服务器端执行JavaScript脚本的首选工具。 Rhino的核心特性...

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

    3. **JavaScript调试** - 探讨Rhino的内置调试器,如何设置断点、单步执行代码、查看变量值、跟踪调用堆栈以及处理异常。 4. **代码运行** - 分析如何在Rhino Shell中运行JavaScript代码,包括基本的语法、数据类型...

    Mozilla Rhino rhino1_7R5.zip

    java中执行javascript脚本需要用到的引擎工具,jdk1.6已自带,但1.5及以下还是需要的

    使用 Rhino 存储文件方法

    Rhino提供了一个`org.mozilla.javascript.Context`类,它是JavaScript执行环境的核心。通过创建`Context`实例,我们可以将JavaScript代码与Java环境连接起来。例如: ```java import org.mozilla.javascript.*; ...

    JavaScript Jar包

    在早期的Java版本中,Mozilla的Rhino JavaScript引擎是Java中默认的JavaScript执行环境。Rhino是一个开源的JavaScript解释器,完全用Java编写,能够直接运行在Java虚拟机(JVM)上。Rhino提供了将JavaScript代码...

    加载JavaScript脚本的包

    在Java 8之前,Java提供了Nashorn JavaScript引擎,这是一个内置的JavaScript解释器,允许Java应用程序直接执行JavaScript代码。通过`javax.script`包中的接口,如`ScriptEngineManager`和`ScriptEngine`,开发者...

    BeanShell和Mozilla Rhino详细介绍和例子

    而Mozilla Rhino则是一个JavaScript解释器,它是用Java实现的,完全符合Ecma-262标准,使得JavaScript可以直接在Java环境中运行。Rhino的主要用途包括: 1. **应用程序扩展和定制**:Rhino可以用来扩展Java应用的...

    一个java的jar包可以集成到IDE中做JAVASCRIPT的测试。

    这是因为Java提供了一个名为Rhino或Nashorn的JavaScript引擎,它们允许Java代码执行JavaScript脚本。Rhino是早期的JavaScript引擎,而Nashorn是Java 8引入的一个更现代的选项,尽管在Java 11中已被废弃。这些引擎为...

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

    Rhino的独特之处在于,它不仅是一个解释器,还提供了一个完整的Java API,使得JavaScript能够与Java对象进行交互,这为JavaScript在服务器端的应用提供了可能。通过Rhino,开发者可以使用JavaScript编写复杂的服务器...

    JavaScript权威指南(第6版)

    13.3 JavaScript程序的执行 13.4 兼容性和互用性 13.5 可访问性 13.6 安全性 13.7 客户端框架 第14章 Window对象 14.1 计时器 14.2 浏览器定位和导航 14.3 浏览历史 14.4 浏览器和屏幕信息 14.5 对话框 14.6 错误...

    JavaScript权威指南(第6版)(附源码)

    13.3 JavaScript程序的执行 13.4 兼容性和互用性 13.5 可访问性 13.6 安全性 13.7 客户端框架 第14章 Window对象 14.1 计时器 14.2 浏览器定位和导航 14.3 浏览历史 14.4 浏览器和屏幕信息 14.5 对话框 14.6 错误...

    JavaScript 权威指南(第四版).pdf

     13.3 JavaScript程序的执行319  13.4 兼容性和互用性326  13.5 可访问性333  13.6 安全性334  13.7 客户端框架339  第14章 Window对象341  14.1 计时器342  14.2 浏览器定位和导航343  14.3 浏览历史345 ...

    JavaScript权威指南(第6版)(中文版)

    13.3 JavaScript程序的执行 13.4 兼容性和互用性 13.5 可访问性 13.6 安全性 13.7 客户端框架 第14章 Window对象 14.1 计时器 14.2 浏览器定位和导航 14.3 浏览历史 14.4 浏览器和屏幕信息 14.5 对话框 14.6 错误...

Global site tag (gtag.js) - Google Analytics