Sun, Jun 21st, 2009
Rhino: Javascript for Java
好几天没更新了,过去的一周里忙着补作业(一个学期根本没上课,自然作业也就……),半夜送室友去120(室友哮喘发作),下周则要开始考试,整个人也有点疲劳也没时间顾及这儿 orz
那么今次要介绍的东西是Mozilla旗下的一个名为Rhino的项目,纯Java实现的Javascript解释器,很适合希望在自己的Java程序中内嵌Scripting功能的同学。当然了,也可以用它在J2EE中实现用Javascript作为后台语言的功能。
官方网站为:http://www.mozilla.org/rhino/
PS: Mozilla旗下还有一个更知名的C写的Spider Monkey,被广泛应用于Mozilla的产品中,比如Firefox的Javascript引擎就是它,官方网站为:http://www.mozilla.org/js/spidermonkey/
下面是一个简单的执行js文件的示例代码。
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import org.mozilla.javascript.Context; import org.mozilla.javascript.Scriptable; public class RhinoTest { public static void main(String[] args) { /* 创建一个Javascript的上下文环境,用来存储Javascript的环境信息 */ Context cx = Context.enter(); try { /* 初始化Javascript标准对象(例如Object, Function, Array等) */ Scriptable scope = cx.initStandardObjects(); /* 读取一个.js文件 */ String script = ""; File file = null; if(args.length > 0) { file = new File(args[0]); // 如果有参数,则读入第一个参数中指定的js文件 } else { file = new File("script.js"); // 如果没有参数,则读入script.js } BufferedReader in = new BufferedReader(new FileReader(file)); String s = ""; while((s = in.readLine()) != null) { script += s + "\n"; } /* 执行代码 */ cx.evaluateString(scope, script, "[" + file.getName() + "]", 1, null); } catch (Exception ex) { ex.printStackTrace(); } finally { Context.exit(); } } }
测试用的script.js文件:
var lang = new JavaImporter(); lang.importPackage(java.lang); lang.System.out.println("Hello, World!~"); var swing = new JavaImporter(); swing.importPackage(javax.swing); with(swing) { var frame = new JFrame("Swing Application"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); var button = new JButton("Hello, Rhino!"); button.addActionListener(function() { lang.System.out.println("This is a text from swing button"); }); frame.add(button); frame.pack(); frame.setResizable(false); frame.setVisible(true); }
Categories: Coding
Tags: Java, Javascript

世界上不会的东西太多了啊= =
终于不用在JSP里一行一行写out.println了么,泪目
嘛,不想写out.println的方法很多啊,比如说~Jython, JRuby或者甚至用Quercus运行PHP~
用Java解释js么?那个js文件中看来是Java和js混合了- -?
话说JSP中不推荐也不需要使用out.println,js代码直接嵌在head中吧…
另外js某些时候貌似不能取代服务器端的验证,不如验证用户名是否已经存在…
Javascript的功能取决于它是什么宿主,在浏览器中,Javascript确实只能做做一些界面特效,响应一下用户点击,调用一下AJAX,但那是因为浏览器本身的Javascript宿主只提供这些功能。如果在ASP中,Javascript也可以用来作为服务器端语言,在Windows Script Host里面,Javascript又可以干类似于bat或者Shell脚本类似的事情,而Rhino可以让开发者在JEE中干类似ASP那样用Javascript来写的事情,但个人认为它最主要的应用领域应该还只是单纯的给Java应用增加脚本功能(例如:游戏)
最近完全忙在作业里的人来一句:长期欠作业最后是很痛苦的wwwww
至于文章内容,最近有时间翻php的官方文档看,权当作消遣了
话说我虽然拖欠作业不少但是结果还是蒙混过去大半就是了……影像这种东西造假起来果然很容易,嗯(拖……
嘛,光看文档不让写代码的话是很痛苦的……(话说怎么变成提到PHP了?……
我们正在找人做动态网页解析.联系email/msn:lgjut@sina.com