1. 程式人生 > >淺談對於作用域的理解

淺談對於作用域的理解

    最近在學一個工作流框架JBPM的時候,又碰到了有關作用域的問題,也就是談到流程變數是存在於一個execution的作用域中。忽然回想到以前學servlet、學SSH的時候老是碰到這個名詞,當時也是似懂非懂的,不過這次反倒一些想通了,下面簡單談談對這個概念,希望對大家有用。

    所謂作用域,顧名思義就是你儲存的內容他能夠在哪個範圍起作用,說的通俗點就是在哪個範圍能用,出了這個範圍就不行了。這樣一想,以前學servlet的幾個常見的作用域物件PageContextRequestSessionApplication這些作用域也就容易理解了。

    PageContext是jsp頁面能用,所以他的作用域最小,也就是說儲存在它當中的變量出了這個jsp頁面就不能用,其實說到底跟類中的{}內定義的區域性變數何其相似。

    Request表示的是一個請求的過程,這個請求的過程是比較難理解的,是指從客戶端傳送請求到服務端收到並響應客戶端的過程。值得注意的是,如果在服務端進行了跳轉,也是算在這次請求內的,只有回到客戶端或服務端發出重定向請求(其實也是回到客戶端),這次請求才算斷,那麼你儲存在這個request中的變數會在這個期間都能引用,一旦request結束,他也會隨著request一起釋放掉。

    Session表示的是客戶的一次臨時訪問回話,訪問某網站時,會生成一個sessionID,這個id有一定的時效性,大概30分鐘左右,可以設定,過了時間你又會生成一個新的sessionId,好像是與原來的比較了以後不一致了,就失效了,有人就會問了,那我一直訪問也會失效嗎?放心,你訪問一次他就會重新計時。也就是說你儲存在session作用域中的變數,在這次會話的有效時期內都是可以引用的。

    Application就不多說了,儲存在這個作用域中變數在整個應用都可以用,所以說存放在它裡面的作用域是最大的。

    總的來說,不管以後遇到什麼有關作用域的問題,基本上可以這樣理解,你的變數放在某個作用域裡面,就只能在某個作用域起作用的範圍內起作用。出了這個範圍就不行了,還是很容易理解的吧。