頁面是特殊的組件,按照組成,它有一個規(guī)范,嵌入的組件,assets,和HTML模板。
?
頁面沒有參數(shù),因?yàn)樗麄兪墙M件的最外層。
?
所有的組件,不管他們嵌套多深,都有一個頁面參數(shù)指向他們所依賴的頁面組件。頁面有一個引擎參數(shù)指向當(dāng)前所依賴的引擎。
?
頁面在一個池中被共享,所以在同一個web程序下頁面的單個的實(shí)例能提供給多個會話使用。甚至大量的客戶端會話請求時,池也會產(chǎn)生少量頁面實(shí)例的來處理請求。池機(jī)制使得頁面實(shí)例化的數(shù)量在處理并發(fā)的情況下實(shí)例化最少頁面。
?
頁面可能有持久狀態(tài),對于不同的用戶,參數(shù)在請求周期內(nèi)保持特定的值,這些參數(shù)駐留在HttpSession中。頁面狀態(tài)和頁面實(shí)例是完全分離的。為了處理并發(fā)的請求,一個不同的Page從池內(nèi)被創(chuàng)建來處理請求,事實(shí)上,in a clustering environment, the request may be serviced by an entirely different server.
Tapestry有效的明顯的隱藏了這些細(xì)節(jié);當(dāng)程序的任何一部分請求一個頁面,池收回一個實(shí)例,這個實(shí)例保持先前被一個用戶已經(jīng)賦值并持久化。
?
“持久”,從語文的角度來講,我理解為在某段時間內(nèi)不變就是持久。在這里應(yīng)該指的是HttpSession周期。
?
事實(shí)上,任何組件可能有持久狀態(tài),使用Pages意味著記錄那個狀態(tài)。
?
引擎是一個session持久化對象。
?
visit對象是引擎對象的一個屬性,序列化。
?
Pages不是session持久化的,它們只存在java VM的內(nèi)存中,第一次創(chuàng)建,Pages和組件不需要實(shí)現(xiàn)java.io.Serializable接口。
?
The application engine 可以總是實(shí)例化一個新的頁面實(shí)例并別重置它之前記錄的狀態(tài)(被記錄的狀態(tài)信息被序列化到引擎上了)。
?