About Seppia

    Seppia 是一个精巧的结合java与javascrit的管理与发布java应用的框架。按照作者的意思:Seppia 是意大利语中的章鱼,作者看来对章鱼很感兴趣,用了“most fascinating(最迷人)”这样的形容词。他一定也想用章鱼来体现 Seppia 的目的:一个将java应用模块化的尝试,正如章鱼的每支独立的脚(后来知道叫触腕)一样。但这些脚可以协同工作,让章鱼在海洋里横行霸道。横行霸道是《章鱼传奇》里对章鱼的形容,看完这篇科普文章,我开始明白为什么作者会使用那样的形容词。
    Seppia 是一个叫 Lorenzo 的伦敦程序员编写的,并发布到sourceforge 上。它的网址是 http://www.seppia.org/。最近不久刚发布最新的1.0版本。作者提到时下针对java的快速开发,推出了很多脚本语言,比如 : jython、beanshell、groovy 和 rhino。Seppia正是基于rhino的结合java与javascript一个框架。这些脚本语言或多或少我都有些了解。特别是 groovy。前不久看到一篇文章说,j2sdk以后的版本有意集成一个脚本语言,而最后可能的就是 groovy。我于是赶紧去研究了一下,确实groovy功能够完善,代码也够简练,可我总觉得有些不习惯。尤其其强烈推荐的 Closures。我想一个常常因为晚回家而遭受女友或者老婆唾骂的java程序员理论上是排斥学习一种与java有较大不同的语法的。Lorenzo 的一番话确实深入我心:

We like javascript 1.5 (ECMAScript).  We think it is a powerful language that well combines its strength and features with java. Unfortunately too often people associate javascript with web-development and that does not help javascript popularity within the java community.
As for the other scripting languages we could not find in any of them any particular feature to win our passion for javascript
.

    我对javascript 是亲切的,事实上我正是从 HTML 的 <SCRIPT> 标记开始我的程序人生之旅。Lorenzo 的话也是有道理的,javascript已经是一门成熟的语言,相信有不少人在编程尤其是web编程中时有接触。虽然也有不少文章苦口婆心的告诉我们javascript和java是不同的,netscape当年命名javascript是商业考虑上的操作。但不可否认两者的语法确实非常类似。Seppia还尝试性的加入了当下时兴的面向模块的设计。从Seppia 的目录结构可以直白的看出它的设计思路:

 seppia
      +-----+
            |-+ jars
            |-+ modules ...
                  |
                 
                         + jars
                         + javascripts

    modules 目录下,每个目录是一个模块,目录名是模块的package的名字。模块目录下的 jars目录存放 java的实现和相关的类库。而javascripts目录则很明显是一个个.js文件,由它们调用 java 实现简单的应用。

    Seppia 的网站上文档有较为详细的文档,很容易明白。我决定把前两天的那个 “RSS 新闻提取” 的测试范例移植到 Seppia 上。步骤如下:
    1) 从 sourceforge 下载 seppia-1.0.zip,解压到安装目录。
    2) 在 modules 目录下创建一个 test.rss 目录,这便是我的测试模块。
    3) 在模块目录下创建 jars 目录,复制 rsslib4j-0.2.jar 文件到该目录下。
    4) 在模块目录下创建 javascripts 目录,新建 Fetcher.js和Main.js 两个脚本文件。代码如下:

Fetcher.js


 var URL = java.net.URL;
 var System = java.lang.System;
 var RSSChannel = Packages.org.gnu.stealthp.rsslib.RSSChannel;
 var RSSHandler = Packages.org.gnu.stealthp.rsslib.RSSHandler;
 var RSSItem = Packages.org.gnu.stealthp.rsslib.RSSItem;
 var RSSParser = Packages.org.gnu.stealthp.rsslib.RSSParser;

 function main() {
    var obj = new Object();
    obj.fetch = fetch;
    return obj;
 }

 function fetch(url) {
  var handler = new RSSHandler();
  RSSParser.parseXmlFile(new URL(url), handler, true);
  var channel = handler.getRSSChannel();
  System.out.println(channel.toString());
  var items = handler.getRSSChannel().getItems();
  for (var i = 0; i < items.size(); i++) {
   var item = items.get(i);
   System.out.println(item.toString());
  }
 }

Main.js


function main() {
   var fetcher = run("test.rss","Fetcher");
   fetcher.fetch(" http://news.baidu.com/n?cmd=4&class=internews&pn=1&tn=rss");
}

    5) 修改 modules/org.seppia.bootstrap/javascripts/StartUp.js 文件,内容修改为:
function main() {
    run("test.rss","Main");
}

    6) 在安装目录下执行 java -cp . StartUp。

    移植很成功,从原来java中copy过来的代码我只修改了很少部分,主要是将用到的类在js文件头声明,另外将 for(int i=0...) 修改为 for(var i=0...),除去上面这一点,fetch方法的代码和java几乎一模一样。
    不过 Seppia 仍然还是很有改进的空间,比如第五步修改StartUp.js 文件有点烦琐,再比如应该丰富一些内置的模块,或者提供 sh和bat 的脚本来启动应用。

    作完上面的测试,我问自己,Seppia对我将来工作和开发是否有意义?答案是不知道。因为我还没有遇到一个很有耐心的客户愿意为快速原型开发而消耗的项目工作日付费,而我本身也主要从事web方面的开发,如果Seppia 能将 javascript 应用到 web 上,我可能会更激动。

    Seppia 真的很精巧,精巧到源代码也只有11K,Lorenzo 共享的精神也让我敬佩。不管怎么说,Seppia给了我一个提示:原来一个项目也可以这么简单的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值