首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用 continuation 开发复杂的 Web 应用程序(9)

用 continuation 开发复杂的 Web 应用程序(9)

JavaScript vs. Java 语言现在我来到了用 JavaScript 开发的基于 continuation 的示例应用程序的末尾。还可以用另一个在纯 Java 语言上工作的 Cocoon 流解释器开发相同的应用程序,这样您就可以把整个应用程序逻辑编写成一个单独的 Java 程序。我将立即向您演示 Java 解释器的工作方式,但是首先我想讨论一下支持和反对用 Java 语言编写程序的争论。
关于用 JavaScript 代替 Java 语言最常见的争论是 Java 语言是更有名、使用更广的语言,有丰富的 IDE 支持,有丰富的设计模式等等。而支持 JavaScript 的一方认为,它是动态类型化的,使得进行快速原型设计(编写 / 更新 - 部署 - 测试周期更快)成为可能。作为语言,众所周知有大量的 Java 开发人员在客户机浏览器端使用它,而且非常容易掌握。JavaScript 是面向对象语言,而 Rhino 的实现则与 Java 平台有非常好的集成。可能访问、重用应用程序中已经存在的 Java 类或对象。所以,即使核心流是用 JavaScript 实现的,也有可能用 Java 语言实现实际的业务逻辑(因为可以在适当的位置在 JavaScript 流内访问 Java 类)。
简而言之,在两个选项中,没有任何一项比另外一项有非常明显的优势,具体采用哪种语言进行开发则基于 continuation 的应用程序,完全取决于您的个人偏好。而幸运的是,Cocoon 让您可以选择其中任何一个选项。
用 Java 代码实现的 ContinuationCocoon 更新的发行版提供了对 Flowscript 的纯 Java 解释器的支持。清单 7 显示了用于纯 Java 解释器的源代码:
清单 7. 用 Java 代码实现的应用流
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import org.apache.cocoon.components.flow.java.AbstractContinuable;
import org.apache.cocoon.components.flow.java.VarMap;
public class PosFlow extends AbstractContinuable
{
public void doSellItem()
{
    double rate, amount, total, savings;
    double discount, discrate;
    int qty, delCost;
    String zone, delOpt;
            
    String url = "page/getRateAmt";
    sendPageAndWait(url);
    rate = Float.parseFloat(getRequest().getParameter("rate"));
    qty = Integer.parseInt(getRequest().getParameter("qty"));
    amount = rate*qty;
        
    url="page/getZone";
    sendPageAndWait(url, new VarMap().add("rate",rate).add("qty",qty));
    zone = getRequest().getParameter("zone");
   
    discount=0.02;
        
    if (zone.equals("A"))
    {
     if (qty >= 100)
     {
        discount=0.1;
     }
    }
    else if (zone.equals("B"))
    {
     if (qty >= 200)
     {
        discount=0.2;
     }
    }
        
    discrate = 100*discount;
    savings = discount*amount;
   
    delCost=0;
    delOpt = getRequest().getParameter("delOpt");
    if (delOpt.equals("S"))
    {
     url="page/getShipOpt";
     sendPageAndWait(url);
     delCost = Integer.parseInt(getRequest().getParameter("delCost"));
    }
        
    total = amount + delCost - savings;
    url="page/displayResult";
    sendPageAndWait(url, new VarMap()
       .add("discrate",discrate)
       .add("total",total)
       .add("savings",savings)
       .add("delCost",delCost)
        .add("amount", amount)
        .add("discount", discount)
        .add("zone", zone));
    }
}




如清单 7 所示,Cocoon 提供了一个叫做
AbstractContinuable的抽象类,以及
sendPage和sendPageAndWait函数的实现。
PosFlow类扩展了这个抽象类,并在叫做
doSellItem的方法中包含业务逻辑。这个方法的实现与清单 4 中
sellItem的 JavaScript 实现一样。
返回列表