2013-03-10 150 views
0

servlet是一個對象,它從後獲取數據&得到,並且還傳遞數據到web應用程序的視圖部分由此可以被用作:這是從一個HTML表單提交使用servlet管理狀態?

  • 處理或存儲數據
  • 提供動態內容,如數據庫查詢

然而,在維基百科的結果,這也看出:

  • 管理不無狀態HTTP 協議存在,如填充物品進入 相應的客戶購物車中的狀態信息

那麼,什麼是平均這裏說填充物品放入購物車中的適當的客戶?

這是否意味着一個servlet是一個Session變量?有人可以解釋這種行爲,更好的舉一個例子嗎?謝謝。

+0

的Servlet *管理*較早投入HTTP會話,從而讓你的變量舉辦一些狀態,而會話存活。在這種情況下,一個用戶有一個會話,因此有一組有狀態數據。 – skuntsel 2013-03-10 18:11:24

+1

順便說一句,一個非常有啓發性的閱讀是BalusC的答案[如何做servlet?](http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading/3106909#3106909)。 – skuntsel 2013-03-10 18:36:22

回答

2

HTTP是無狀態的。這意味着服務器返回的數據不依賴於用戶以前的任何操作。 Cookie和其他非HTTP方法是使網絡顯示爲有狀態的原因,使用戶能夠登錄和登出網站。

退房: http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html

對於應用程序開發人員來說,它是無狀態始終。

對於最終用戶來說似乎是有狀態的

現在,在一個servlet的一個新的調用

每個HTTP請求的結果(即,一個線程調用servlet的服務和的doXXX方法),而不管連接是否保持活動狀態。

編輯:

HttpSession對象用於設置說與特定的會話信息,產品在當前會話的購物車的數量。請注意,如果瀏覽器關閉或者您清除了Cookie,會話將被關閉。

如何web服務器知道它的同一個會話?

網絡服務器發送的sessionId以cookie的形式的瀏覽器。並且,瀏覽器將具有sessionId的cookie發送回服務器以用於隨後的請求。

如何在瀏覽器識別爲一個鏈接/發送請求其餅乾?

它基於這些參數。如果請求這些參數相匹配的瀏覽器發送該特定的Cookie:

域:到作出請求的域名。

路徑:如果上下文根路徑名稱相同。

安全:如果要是能在該非安全通道

如果禁用Cookie發送給定的cookie,然後它使用URL重寫服務器發送。

是否可以保留會話後,即使關閉瀏覽器並打開? 是的。答案是餅乾+ DB +谷歌搜索:)

+0

對不起,你能否提倡最後一部分?要保留多個連接之間的狀態?不是Cookie,因爲會話在Web瀏覽器關閉後死亡?當你說多個連接時,你的意思是在瀏覽器重新啓動後建立連接嗎? – 2013-03-10 19:35:15

+0

做了編輯。希望清楚 – John 2013-03-10 19:50:13

+0

明確答案 – Dante 2016-09-09 09:29:02

0

HttpSession對象可訪問從HttpServletRequest對象傳遞作爲一個Servlet的的doXXX(方法ARG)method.This會話狀態

+0

對不起,你能解釋一下什麼是有狀態的嗎? – 2013-03-10 18:17:14

0

在的Java Servlet,

我們可以從GET /存儲變量的值發送請求參數

請求狀態或會話狀態。

對於請求狀態變量 -

request.setAttribute("requestvariable", "My Value"); 

將保存在一個完整的請求中的值 - 響應週期。

在會話狀態變量 -

request.getSession().setAttribute("sessionvariable", "My Value"); 

將保存在多個請求中的值 - 響應週期在同一瀏覽器會話。

還可以通過

request.getSession().removeAttribute("sessionvariable"); 

除去的變量的值。該會話變量值可以在多個JSP/servlet的送達在應用像在會話中用戶購物車信息。

所以Servlet在這裏作爲控制器工作,變量的狀態存儲在會話或請求中的框架中指定的api和變量。

0

一個servlet也有通過request.getSession()

使用會話一個servlet可以做一個會話管理就像在一個會話存儲車中的項目並使其從不同的請求訪問訪問由你的容器(appsrver)創建的會話客戶端。