1. 程式人生 > >四種會話跟蹤技術,JSP的四種範圍

四種會話跟蹤技術,JSP的四種範圍

都是 java 內部 inf hidden 可能 jsp 作用 服務

這兩個問題在網上搜答案是一樣的,但是我的寶典裏標明這是兩個問題,有不同的答案,所以在這裏註釋一下。

四種會話跟蹤技術

cookie,url重寫,session,隱藏域

Cookie:服務器在一個應答首部傳遞給瀏覽器的名稱/值對。瀏覽器保存的時間由cookie的過期時間屬性來指定。當瀏覽器向某個服務器發送一個請求時,它會檢查其保存的cookie,並在請求首部中包含從同一臺服務器上接收到的所有cookie。

首次都是通過URL傳遞的,即在URL後跟一個ID標識。然後會判斷客戶端是否接受cookie,接受的話,存放在cookie裏。不接受的話,仍然利用URL傳遞,即id保存在每次的URL裏。

Session tracking

:在瀏覽器和服務器之間不直接傳送所有的狀態信息,而只是傳遞表示符(session ID)。瀏覽器發送sessionID,服務器跟蹤與該會話相關聯的所有信息。傳遞sessionID可以通過cookie和URL復寫技術,大部分容器都支持這兩種技術。服務器無法分辨用戶是否關閉了瀏覽器,因此關閉瀏覽器意味著與先前的會話關聯的所有會話數據都保留在服務器上,直到會話超時,服務器銷毀會話對像。

?跟蹤同一會話中的請求的會話ID可以有多種方法,主要有cookie和url復寫。

URL復寫:把會話ID編碼在URL中。

例:counter.jjsp;jsessionnid=be8d697876787876befdbde898789098980

這樣,即使瀏覽器不支持cookie,也能夠實現會話跟蹤。

對於URL復寫,服務器從請求的URI中提取出會話ID,並把該請求與相應的會話關聯起來,然後在訪問會話數據的時候,JSP頁面所進行的處理方式就和使用cookie跟蹤會話id時所使用的方式完全相同。所以sesssion的實現要依靠cookie或URL復寫技術。

如果想為不支持cookie的瀏覽器提供會話跟蹤,就必須使用<c:url>行為對應用程序中的所有URL進行復寫。這意味著應用程序中的所有頁面(至少是那些帶有對其他頁面引用的頁面)都必須是JSP頁面,這樣頁面引用才能以動態方式進行編碼,如果遺漏了一個ur,那麽服務就會失去對會話的跟蹤。

隱藏表單域:隱藏表單域是將會話ID添加到HTML的隱藏表單中(類型為hidden的input)。

重定向和轉發

可以使用兩種方法來調用另一個頁面,重定向和轉發。

轉發:<jsp:forward page=”userInfo.jsp”/>

轉發,JSP容器將使用一個內部方法來調用目標頁面,新的頁面繼續處理同一個請求,而瀏覽器不會知道這個過程涉及到了多個頁面。瀏覽器URL會保持不變。

重定向:<c:redirect url=”userInfo.jsp”/>

重定向與轉發不同,重定向時,第一個頁面會通知瀏覽器發送一個新的目標頁面的請求。瀏覽器所顯示的URL會變成新頁面的URL。

重定向的速度比轉發要慢,因為瀏覽器得發出一個新的請求。

同時,由於重定向產生了一個新的請求,所以經過一次重定向之後請求作用域內的對象將無法再使用。

JSP的四種範圍

page,request,session,application

page否是代表與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面

request是是代表與 Web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件(由於 forward 指令和 include 動作的關系)

session是代表與用於某個 Web 客戶機的一個用戶體驗相關的對象和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求

application是是代表與整個 Web 應用程序相關的對象和屬性。這實質上是跨越整個 Web 應用程序,包括多個頁面、請求和會話的一個全局作用域

四種會話跟蹤技術,JSP的四種範圍