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