1 回答

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊
sitemesh3是通過(guò)一個(gè)filter來(lái)對(duì)response進(jìn)行攔截處理,在response提交之前,它會(huì)把response流里的數(shù)據(jù)備份起來(lái),清空流,然后用request.getRequestDispatcher(裝飾頁(yè)URI).forward()來(lái)取得渲染后的裝飾頁(yè),然后再把裝飾頁(yè)里的標(biāo)簽替換成之前備份的對(duì)應(yīng)內(nèi)容。
也就是說(shuō)sitemesh不關(guān)心你的頁(yè)面是如何生成的,它只是將兩者拼接起來(lái),不管你用的是JSP,Volocity, FreeMarker 還是 SpringMVC, Struts, wicket。
這樣一來(lái)你就可以靈活地控制頁(yè)面的生成方式。你可以把sitemesh3當(dāng)成一個(gè)中間瀏覽器,他使用用戶(hù)瀏覽器發(fā)送過(guò)來(lái)的request對(duì)象發(fā)送了兩次(或以上)請(qǐng)求,第一次是原來(lái)的請(qǐng)求, 第二次是對(duì)裝飾頁(yè)面的請(qǐng)求,然后把這兩個(gè)請(qǐng)求結(jié)果拼接起來(lái)返回給用戶(hù)瀏覽器。
- 1 回答
- 0 關(guān)注
- 727 瀏覽
添加回答
舉報(bào)