JSP頁面定義了如下幾個作用域:
頁面作用域(page scope)、請求作用域(request scope)、會話作用域(session scope)、應(yīng)用程序作用域(application scope)
頁面作用域中的對象僅在當(dāng)前頁面可用;請求作用域中的對象在所有處理同一請求的頁面中都可用;會話作用域中的對象用于同一瀏覽器發(fā)出的所有請求;應(yīng)用程序作用域中的對象被應(yīng)用程序的所有用戶共享。
通過設(shè)置<jsp:useBean>行為的scope屬性,制定bean應(yīng)該放在哪個作用域中,例如:
<jsp:useBean id="test" scope="request" class="com.testBean" />
會話跟蹤過程解釋:由于HTTP是一種無狀態(tài)協(xié)議,即服務(wù)器處理完瀏覽器的請求后將忘掉所發(fā)生的事務(wù),當(dāng)瀏覽器再次發(fā)出請求時,Web服務(wù)器并不知道新的請求與之前的請求有何關(guān)系。解決這個問題主要有兩種方法:
1、服務(wù)器在應(yīng)答中返回與該用戶有關(guān)的所有信息,并讓瀏覽器將其作為下一個請求的一部分發(fā)回去
2、在服務(wù)器的任何位置保存狀態(tài)信息,并且發(fā)回一個標識符,瀏覽器在下一請求中返回該標識符,然后借由該標識符定位服務(wù)器上的狀態(tài)信息
在這兩種情況下,可以用以下三種方式將狀態(tài)信息發(fā)送給瀏覽器:
1、作為cookie
2、嵌入HTML表單作為隱藏字段
3、進行編碼,編入應(yīng)答主體的URL中,一般作為連接到其它應(yīng)用程序的鏈接(也稱作URL復(fù)寫,URL rewriting)
在瀏覽器和服務(wù)器間來回發(fā)送所有狀態(tài)信息的效率是極低的,所以大多數(shù)現(xiàn)代服務(wù)器都將信息保留在服務(wù)器上,只在瀏覽器和服務(wù)器間傳遞標識符,這就是會話跟蹤(session tracking),JSP隱藏了cookie會話跟蹤的所以細節(jié),并實現(xiàn)了對URL復(fù)寫的支持,此外,JSP規(guī)范允許使用安全套接字協(xié)議層(Secure Socket Layer,SSL)內(nèi)置的會話機制。在會話的生命周期中,保存在會話作用域中的信息可被同一瀏覽器的所有頁面所用。
在線購物(P179):
內(nèi)存使用策略:
1、只把那些真正需要被每個會話單獨擁有的對象放在會話作用域中
2、將會話的有效期設(shè)成比默認值更短
3、提供一種顯示的結(jié)束會話的方法。一個好的示例就是注銷功能,或者是當(dāng)某件事務(wù)完成時,使會話失效。在servlet和其他自定義代碼中,可以使用HttpSession invalidate()方法。
posted on 2012-05-21 00:35
Jimi 閱讀(1855)
評論(1) 編輯 收藏 所屬分類:
JSP與servlet