Java 6 中也可以运行 javascript 喽 (转)
给 Java SE 注入脚本语言的活力
Mustang 的脚本语言新特性
文档选项
将此页作为电子邮件发送
将此页作为电子邮件发送
级别: 中级
吴 玥颢 (wuyuehao@cn.ibm.com), 软件工程师, IBM
2006 年 10 月 30 日
在即将发布的 Java SE6(Mustang)中,增加了对脚本语言的支持。通过对脚本语言的调用,使得一些通常用 Java 比较难于实现的功能变得简单和轻便。脚本语言与 Java 之间的互操作将变得优雅而直接。
脚本语言与 Java
假设我们有一个简单的需求,察看一份文档中 5 个字母组成的单词的个数。用 Java 一般实现如下:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Find5Words {
public static void main(String[] args) throws IOException {
String result = "";
String line = null;
int num = 0;
FileReader fr = new FileReader("filename");
BufferedReader br = new BufferedReader(fr);
while ((line = br.readLine()) != null) {
result += line;
}
br.close();
fr.close();
String[] s = result.split(" ");
for (int i = 0; i < s.length; i++) {
if (s[i].matches("^\\w{5}$")) {
num++;
}
}
System.out.println(num);
}
}
再看看 Perl 语言实现同样功能的代码:
open FILE, "<filename ";
while (<FILE>) {
for (split) {
$num++ if /^\w{5}$/
}
}
print $num;
那么有没有一种优雅的方式将 Java 与脚本语言结合呢,在今年秋季即将发布的 Java SE6(代号 Mustang)中,这将成为现实。
回页首
Mustang 的脚本引擎
JSR 233 为 Java 设计了一套脚本语言 API。这一套 API 提供了在 Java 程序中调用各种脚本语言引擎的接口。任何实现了这一接口的脚本语言引擎都可以在 Java 程序中被调用。在 Mustang 的发行版本中包括了一个基于 Mozilla Rhino 的 JavaScript 脚本引擎。
Mozilla Rhino
Rhino 是一个纯 Java 的开源的 JavaScript 实现。他的名字来源于 O'Reilly 关于 JavaScript 的书的封面:
Rhino 项目可以追朔到 1997 年,当时 Netscape 计划开发一个纯 Java 实现的
相关文档:
自从 Google 推出含 V8 JavaScript 引擎的 Chrome 以来,公众对 JavaScript
引擎执行效率的胃口又一次被提高,众多浏览器的开发者们绞尽脑汁提升他们的 JavaScript 性能,Opera 最新的10.50 版的 Carakan
引擎据称已经超过 V8,而 Firefox 的开发者们也不甘示弱。
最近升级到 Firefox 3.6 的用户已经发现他们的 Java ......
重写的主要优点是能够定义某个子类特有的特征:
如:
public class Father
{
public void speak()
&nb ......
在DWR中需要用到session,request等这些东西的时候,可以用以下方法获取:
1. 使用DWR的API (很多人都不推荐这种做法,经测试,使用起来肯定没问题)
import uk.ltd.getahead.dwr.WebContext;
import uk.ltd.getahead.dwr.WebContextFactory;
WebContext ctx = WebContextFactory.get();
ctx.getSession()
ctx.getHttp ......
Java在JDK1.3之后加入了可协助开发动态代理功能的API.使用动态代理,可以使一个处理者(代理)服务于各个对象。创建一个动态代理类只需实现java.lang.reflect.InvocationHandler接口。
下面创建一个处理日志的动态代理类LogHandler去代理HelloSpeaker类
首先创建HelloSpeaker的接口
pa ......