利用Stripes實(shí)現(xiàn)JavaWeb開(kāi)發(fā)

字號(hào):

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