大家好,我是IT修真院鄭州分院第6期的學(xué)員李亞衡,一枚正直純潔善良的JAVA程序員
今天給大家分享一下,修真院官網(wǎng)JAVA任務(wù)四,深度思考中的知識(shí)點(diǎn)——Tiles框架
1.背景介紹
什么是Tiles
Tiles 是一種JSP布局框架,主要目的是為了將復(fù)雜的jsp頁(yè)面作為一個(gè)的頁(yè)面的部分機(jī)能,
然后用來(lái)組合成一個(gè)最終表示用頁(yè)面用的,這樣的話,便于對(duì)頁(yè)面的各個(gè)機(jī)能的變更及維護(hù)。
Tiles使得struts在頁(yè)面的處理方面多了一種選擇。并且更容易實(shí)現(xiàn)代碼的重用。(百度百科)
Tiles起源
最早的Tiles是組裝在Struts1.1里面的,主要目的是為了將復(fù)數(shù)的jsp頁(yè)面作為一個(gè)的頁(yè)面的部分機(jī)能,
然后用來(lái)組合成一個(gè)最終表示用頁(yè)面用的,這樣的話,便于對(duì)頁(yè)面的各個(gè)機(jī)能的變更及維護(hù)。
現(xiàn)在Tiles已經(jīng)作為一個(gè)Apache獨(dú)立的開源項(xiàng)目維護(hù)著。
Tiles作用
Tiles允許作者??定義頁(yè)面片段,這些片段可以在運(yùn)行時(shí)被組合成一個(gè)完整的頁(yè)面。
這些片段或片可以被簡(jiǎn)單的包括在內(nèi),以便減少常見的頁(yè)面元素的重復(fù)或者嵌入在其他的片中以開發(fā)一系列可重復(fù)使用的模板。
這些模板簡(jiǎn)化了整個(gè)應(yīng)用程序中一致的外觀和風(fēng)格的開發(fā)。(Tiles官方文檔)
2.知識(shí)剖析
Tiles用來(lái)作什么
所有的網(wǎng)站都有一些共通的東西:所有的網(wǎng)站都是有網(wǎng)頁(yè)構(gòu)成,而且它們彼此分享著共通的結(jié)構(gòu)。這些頁(yè)面有著共通的布局,但是頁(yè)面和頁(yè)面之間又有不同的地方,而且不同的地方通常都在同樣的位置。
為了理解這種模式,我們來(lái)看一個(gè)例子。 下面這個(gè)圖就是一個(gè)比較經(jīng)典的網(wǎng)頁(yè)結(jié)構(gòu)。

假如Body塊里有一個(gè)鏈接,通過(guò)它可以遷移到類似Page2這樣的一個(gè)頁(yè)面。就如下圖描述的這樣。

正如我們看到的, 這兩個(gè)頁(yè)面是不同的,但是不同的地方僅僅是Body這部分區(qū)域。于是我們想,有沒有好的辦法能夠把共通的地方復(fù)用起來(lái),讓我們維護(hù)的頁(yè)面盡可能的少。Tiles就是用來(lái)幫助我們解決這個(gè)問(wèn)題的
如何使用tiles
依賴和配置文件

Spring-servlet.xml

拆分Jsp頁(yè)面

3.常見問(wèn)題
剛接觸Java Web開發(fā)的人都知道,JSP中可以通過(guò)include標(biāo)簽動(dòng)態(tài)插入一個(gè)JSP頁(yè)面。在了解這個(gè)功能后可能會(huì)興奮不已,因?yàn)檫@樣可以實(shí)現(xiàn)多個(gè)JSP頁(yè)面共用一個(gè)JSP的內(nèi)容。
現(xiàn)在,假如有一個(gè)超級(jí)大的電子商務(wù)網(wǎng)站,網(wǎng)站擁有10萬(wàn)個(gè)JSP頁(yè)面(悄悄告訴你,這僅僅是一個(gè)假設(shè)),并且每個(gè)JSP都引用了同一個(gè)JSP(我們稱這個(gè)JSP頁(yè)面為A吧)?,F(xiàn)在你就是這個(gè)網(wǎng)站的開發(fā)人員,有一天老板跑到你面前說(shuō):“大量用戶反饋?lái)?yè)面A設(shè)計(jì)得太丑,嚴(yán)重影響用戶體驗(yàn),如果不在今天之內(nèi)改進(jìn),他們就集體去競(jìng)爭(zhēng)對(duì)手那里購(gòu)物,所以你今天必須要讓頁(yè)面A從網(wǎng)站上消失,否則炒魷魚走人”,這個(gè)兇神惡霸的老板說(shuō)完就甩手走出去了,你沒有任何辯解的機(jī)會(huì)。這時(shí),恐怕你不會(huì)覺得自己一人能夠搞定,那怎么辦?程序員都有很多好基友,找一百個(gè)基友來(lái)一起改,每人只需要改1000個(gè)頁(yè)面。不然,只有垂頭喪氣地收拾好東西離職了。
那么,要是有一天老板又跑過(guò)來(lái)找你,讓你為每個(gè)JSP頁(yè)面的底部加一個(gè)跳舞的小黃人,又該怎么辦呢?先找前端工程師設(shè)計(jì)好跳舞的小黃人,然后用include標(biāo)簽插入到10萬(wàn)個(gè)JSP頁(yè)面。10萬(wàn)個(gè)啊,又得請(qǐng)一百個(gè)好基友幫忙了!要是老板后面又要在網(wǎng)站頂端加一只唱歌的小鳥、在網(wǎng)站右邊加一個(gè)工具欄…估計(jì)你的好基友要用磚頭來(lái)砸你了。
那有沒有一種方法,可以不用請(qǐng)一百個(gè)好基友幫忙,就可以在十分鐘之內(nèi)完成老板交給你的任務(wù)?也許你會(huì)覺得這簡(jiǎn)直是胡說(shuō)八道,在十分鐘內(nèi)改完10萬(wàn)個(gè)JSP頁(yè)面就是一種瘋狂的想法。也許這是對(duì)的,就是一個(gè)瘋狂的想法,不清楚Tiles的設(shè)計(jì)者當(dāng)初也是否受到過(guò)這種老板的虐待,所以才設(shè)計(jì)出了這樣一個(gè)瘋狂的產(chǎn)品——Tiles。
沒錯(cuò),Tiles就是為你遇到的這種需求服務(wù)的。一旦你在網(wǎng)站系統(tǒng)中使用了Tiles技術(shù),若老板讓你刪除10萬(wàn)個(gè)頁(yè)面所引用的一個(gè)JSP,如果你的速度快的話,你可以在10秒鐘之內(nèi)解決。那要想再讓這10萬(wàn)個(gè)頁(yè)面去引用一個(gè)JSP呢?也是一樣的操作,非常簡(jiǎn)單。
4.解決方案
SSM中使用Tiles
5.編碼實(shí)戰(zhàn)
6.擴(kuò)展思考
Tiles中使用正則表達(dá)式
7.參考文獻(xiàn)
百度百科
Apache Tiles官方文檔:http://tiles.apache.org/
http://blog.sina.com.cn/s/blog_a123d4d50101792d.html
http://www.tuicool.com/articles/ZbMn2a
8.更多討論
Q:現(xiàn)在基本上都是前后端分離,那為什么還要用tiles?
A:后端使用tiles可以減小項(xiàng)目體量
Q:除了tiles,還有沒有其他框架
A:thymleaf
更多信息請(qǐng)參考視頻:
PPT鏈接:PPT
9.鳴謝
劉佳義,姚遠(yuǎn)。茹程遠(yuǎn)