1. 程式人生 > >request,response,session,application四者之間的作用域聯絡以及各自的執行機制

request,response,session,application四者之間的作用域聯絡以及各自的執行機制

request:伺服器獲取使用者請求;response:伺服器答覆使用者請求的資源;

session:使用者使用伺服器開始到結束的過程;application:網站伺服器啟動到停止的過程;

在asp中,作用域可分為四種:  
僅僅用於JSP中的page其作用域為在當前頁面有效  (這裡瞭解就好)
request其作用域為在當前http請求中有效 
session其作用域為在當前會話中有效  
application其作用域為在所有應用程式中有效,應用程式就是訪問的網站伺服器
在上面提到了四個的作用域,作用域詳細的說就是“資訊共享的範圍”,也就是一個資訊能夠在多大的範圍內有效。

當用戶通過瀏覽器客戶端向網站伺服器提出請求時,就是一個request過程,這個時候網站伺服器收到客戶端的request,網站伺服器通過servlet或者JSP對使用者傳送的request進行出理,處理完後伺服器通過response將處理完後的資源傳送給客戶端,客戶端收到資源在瀏覽器顯示出來。

request就是一個HTTP客戶端請求,處理request可能需要多個Servlet合作, 幾個Servlet之間可以通過某種方式傳遞資訊,但這個資訊在請求結束後就無效了

response就是一個HTTP伺服器答覆,將servlet處理結果答覆給客戶端

session與使用者是一對一關係,一個web應用程式可以同時有多個使用者線上,每個使用者都有對應唯一的session,一個session就是一個使用者從開始使用客戶端到結束使用客戶端的過程,這個過程可以有多個request和response

application與使用者是一對多關係,類似於一個web應用程式對應於多個使用者線上使用,每個web應用程式對應只有一個aaplication,在一起協同工作以完成某項任務的一組 ASP 檔案稱作應用程式(application)。

ASP 中的 Application 物件用於將這些檔案捆綁在一起。application就是網站伺服器從啟動到停止的過程。

session作用域比較容易理解,同一瀏覽器訪問多次,在這多次訪問之間傳遞資訊,就是session作用域。

session是通過HttpSession介面實現的。  

Object HttpSession.getAttribute(String name) 從session中獲取資訊  
void HttpSession.setAttribute(String name, Object value) 向session中儲存資訊  
而通過HttpServletRequest.getSession()方法可以獲得HttpSession物件。  


HttpSession HttpServletRequest.getSessio() 獲取當前請求所在的session的物件。  
session的開始容易判斷(瀏覽器發出第一個HTTP請求即可認為會話開始), 而結束就不好判斷了,因為客戶端瀏覽器結束會話時並不會告知伺服器,所以只能通過這種方法判斷:如果一定的時間內客戶端沒有反應,則認為會話結束。 Tomcat的預設值為120分鐘,但這個值也可以通過 HttpSession 的 setMaxInactiveInterval 方法來設定。  

void setMaxInactiveInterval(int interval) 設定繪畫的超時值。  
如果想主動讓會話結束,如使用者單擊“登出”的時候,可以使用 HttpSession 的 invalidate 方法:  

void invalidate() 強制結束當前session。  
application  
application作用域就是伺服器啟動到關閉的整段時間, 在這個作用域內設定的資訊可以被所有應用程式使用。 

application作用域上的資訊傳遞就是通過ServetContext實現的。  

Object getAttribute(String name) 從application中獲取資訊。  
void setAttribute(String name, Object value) 向application作用域中設定資訊。  
總結  

可以看到,每個作用域除了實現介面不同、意義不同之外,它們的使用方法和作用都是相同的, 都是通過 getAttribute 和 setAttribute 方法進行資訊傳遞。  

作用域 意義 實現介面  
request HTTP請求內 HttpServletRequest  
session HTTP會話內 HttpSession  
application 伺服器生命週期內 ServletContext