[導(dǎo)入]sitemesh-頁(yè)面IOC容器(頁(yè)面設(shè)計(jì)層面的Spring)
IOC容器大家都經(jīng)常用了,但是不知道有沒(méi)有人注意到在web層我們也可以使用很好的“IOC容器”,就是可愛(ài)的sitemesh了,在使用sitemesh之前我們都是直接使用include來(lái)包裝頁(yè)面,把一個(gè)普通的頁(yè)面include head.jsp menu.jsp footer.jsp這樣就組裝好了一個(gè)頁(yè)面,但是這里這三個(gè)文件就和所有的這些使用他們的jsp硬編碼放在一起了,這就像我們?cè)谙到y(tǒng)里面用new來(lái)生成一個(gè)instance,這樣頁(yè)面也一樣造成了很高的耦合度。這樣在頁(yè)面級(jí)別如果出現(xiàn)需要更改就非常的麻煩了,比如客戶說(shuō)你這個(gè)頁(yè)腳我不想要這個(gè),需要另外一個(gè),或者菜單不放在左邊,我要放到右邊去了,這樣你就暈倒了,由于include到處都是,你要一個(gè)個(gè)找出來(lái)修改,也許你會(huì)說(shuō)可以把它們變成空的文件就可以,當(dāng)然可以,但是這畢竟不是最好的解決方式。
這時(shí)候你就可以看看sitemesh了,他和spring一樣,在配置文件里面配置頁(yè)面之間的關(guān)系,比如很多的前臺(tái)頁(yè)面都需要一個(gè)頁(yè)頭,一個(gè)菜單,一個(gè)頁(yè)腳,那么你就可以作一個(gè)頁(yè)面的模板,包括這些元素,但是在需要插入的地方作一個(gè)插入占位標(biāo)簽,這樣sitemesh就會(huì)把被修飾的頁(yè)面的body部分抽取出來(lái)無(wú)縫地插入到頁(yè)面模板里面去。sitemesh理解html,這樣它就可以抽取指定的標(biāo)簽到模板相應(yīng)位置,比如title,比如body里面的onload事件還有head里面的javascript代碼。你不用擔(dān)心它會(huì)插錯(cuò)位置。
這樣你就可以獨(dú)立的進(jìn)行頁(yè)面的編寫(xiě),每個(gè)頁(yè)面只需要維護(hù)它自己的功能,至于它需要和哪些頁(yè)面來(lái)組合一概不知,這樣就把頁(yè)面級(jí)別的耦合全部去除,非常符合DRY(Don't Repeat Youself)原則。
如果sitemesh+web標(biāo)準(zhǔn)的css和無(wú)table的方式來(lái)設(shè)計(jì)頁(yè)面,就可以完完全全做到頁(yè)面的干干凈凈,而且顯示和內(nèi)容完全分開(kāi),對(duì)于直接接觸到j(luò)sp源碼的程序員是一種享受了:)
文章來(lái)源:http://blog.donews.com/crabhn/archive/2006/03/02/750132.aspx
posted on 2006-03-03 00:27 crabhn's blog 閱讀(339) 評(píng)論(0) 編輯 收藏