利用Stripes實現(xiàn)JavaWeb開發(fā)

字號:

Stripes是一個以讓程序員的web開發(fā)簡單而高效為準(zhǔn)則來設(shè)計的基于動作的開源Java web框架。本文將介紹Stripes與其它如Struts之類基于動作的框架的區(qū)別和其提供的一些存在于Ruby on Rails之中的簡單性。
    Stripes是一個以讓程序員的web開發(fā)簡單而高效為準(zhǔn)則來設(shè)計的基于動作的開源Java web框架。傳統(tǒng)的Java web開發(fā)著眼于借去耦(Decoupling)來實現(xiàn)其靈活性,但導(dǎo)致多個的配置文件,額外的對象,和其他資源的分散。這些困難造成相當(dāng)多的程序員的更高的學(xué)習(xí)時間和低下的效率。其結(jié)果是有些Java程序員被一些非Java的框架所吸引去了:Ruby on Rails或者Django。一些Java web框架,如Stripes,正在開始從這些非Java框架中汲取其成功經(jīng)驗:簡單而高效的開發(fā)。本文將介紹Stripes與其它如Struts之類基于動作的框架的區(qū)別和其提供的一些存在于Ruby on Rails之中的簡單性。
    圖1是典型的用Stripes寫的應(yīng)用程序中的正常事件流程和組件。
    圖 1 典型Stripes流程
    如你所見,其流程基本上就是一個MVC框架。Stripes和其他的基于動作的框架的一個主要的區(qū)別是沒有一個外部的配置文件。我們隨后將看到,Stripes用annotation和約定而非配置來提高產(chǎn)出和減少雜亂。
    編寫你的第一個Stripe動作(Action)
    讓我們現(xiàn)在就開始通過創(chuàng)建Hello World例程來了解Stripes框架和理解其運作。HelloWorldAction類將提示用戶輸入姓氏和名字然后在另一個View里面顯示,首先我們來編寫controller類。
    public class HelloWorldAction implements ActionBean
    {
    @ValidateNestedProperties(
    {
    @Validate(field = "firstName", required = true, on = {"hello"}),
    @Validate(field = "age", required = true, minvalue = 13, on = {"hello"})
    })
    private Person person;
    private ActionBeanContext context;
    @DefaultHandler public Resolution index()
    {
    return new ForwardResolution("Hello.jsp");
    }
    public Resolution hello()
    {
    return new ForwardResolution("SayHello.jsp");
    }
    public void setPerson(String person) {this.person = person;}
    public String getPerson() { return person;}
    public void setContext(ActionBeanContext c) {this.context = c; }
    public ActionBeanContext getContext() {return context; }}
    Controller類是一個實現(xiàn)了Stripes特有接口ActionBean的POJO(Plain Old Java Object,譯注:讀破粥)。所有的Stripes動作類都要實現(xiàn)這一接口以讓StripesDispatcher servlet在運行服務(wù)時為其注入一個ActionBeanContext對象。ActionBeanContext對象可以讓你存取的對象如request、response、和servlet context等servlet API。大多數(shù)時候在Stripes應(yīng)用中是不用讀取這些底層API對象的。
    ActionBeanContext類還提供當(dāng)前動作的狀態(tài)并可以添加信息消息和錯誤消息到當(dāng)前動作中。ActionBeanContext的變量和其讀寫方法可以放在一個基類里面,因為所有的Stripes動作都要實現(xiàn)之。
    Controller類的其他部分對于任何Java程序員來說都是很面熟的。有一個Person對象和其讀寫方法是用來讀寫用戶的姓名給view的。雖然這僅僅是一個簡單的嵌套對象,Stripes可以通過Java集合、泛型支持、和下標(biāo)化的屬性來實現(xiàn)更復(fù)雜完善的數(shù)據(jù)捆綁。因為Stripes可以處理復(fù)雜數(shù)據(jù)捆綁,你的領(lǐng)域?qū)ο螅―omain Object)可以在其他需要它們的層重用。例如:通過Stripes你可以很容易的收集一個領(lǐng)域?qū)ο蟮男畔?,然后用其他的POJO框架,如Hibernate或者EJB3來對其進(jìn)行持久化。