設計REST風格的Java MVC架構

來源:互聯網
上載者:User

是否對傳統的Java MVC架構如Struts,WebWork感到失望?大量的XML設定檔,*.do的映射方式導致不得不編寫很多FormBean來傳遞頁面參數?強迫實現的Action介面導致一個類只能處理一個請求,十分不便。

 

流行的Web網站早已實現了REST風格的URL,例如豆瓣的URL,顯示一本書不是subject.do?id=xxx,而是很自然的http://www.douban.com/subject/2129650/之類。

 

也許你會說,通過Apache的RewriteMod或者自己寫一個UrlRewriteFilter也能實現這個目標,不過,為什麼不能從MVC架構設計本身就實現這種模式呢?

 

Express-Wind架構的設計目標就是提供一種非常自然的URL映射,並且不限定處理URL的方法介面。

 

你可以通過一個簡單的@Mapping告訴架構一個方法需要處理的URL:

 

 

public class MyPage {


    @Mapping("/hello")

    public String hello() {

        return "<h1>Hello, world</h1>";

    }


    @Mapping("/hello/$1")

    public String hello(String name) {

        return "<h1>Hello, " + name + "</h1>";

    }

}

 

 

URL中的參數通過$1,$2……指定,並且會自動傳入到方法參數中。

 

你會得到以下顯示效果,根據URL的不同而不同:

 

 

方法的傳回值可以是String,例如一小段HTML,可以是void,表示你已經自己處理了HttpServletResponse對象,作為DEMO,用來示範時,以上代碼工作地很好,不過,作為實際應用,我們需要一個模板系統來渲染頁面,此時,應當返回一個TemplateRenderer對象:

 

@Mapping("/")

public Renderer index() {

    Map<String, Object> model = new HashMap<String, Object>();

    return new TemplateRenderer("/index.jsp", model);

}

 

你不需要知道頁面是如何渲染的,只需傳入模板檔案路徑和一個Map作為Model即可。無需任何配置,Express-Wind預設使用JSP作為模板,當然,還可以配置Velocity作為模板。

 

如何與IoC框架組成?

 

現在,幾乎沒有項目不使用IoC架構的,Express-Wind支援並且只支援與IoC框架組成使用,也就是說,不使用IoC架構就無法使用Express-Wind。你需要做的是兩件事:

 

1. 把包含@Mapping的class放到IoC架構裡(Spring的XML設定檔或Guice的Module)

 

2. 告訴Express-Wind你使用的是Spring還是Guice還是其他IoC容器,然後Express-Wind自動掃描IoC容器中所有的Bean,取出那些標記有@Mapping的bean的方法,因此,整個URL是0配置。如果一個URL映射沒有起作用,多半是因為你忘記了把這個Bean放到IoC容器裡了。

 

如果你想瞭解關於Express-Wind的更多資訊,請參考:

 

http://code.google.com/p/express-me/wiki/ExpressWind

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.