亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

servlet如何工作?實例化,會話,共享變量和多線程

servlet如何工作?實例化,會話,共享變量和多線程

泛舟湖上清波郎朗 2019-05-21 16:52:17
servlet如何工作?實例化,會話,共享變量和多線程假設,我有一個擁有大量servlet的Web服務器。對于在這些servlet之間傳遞的信息,我正在設置會話和實例變量?,F在,如果有2個或更多用戶向此服務器發送請求,那么會話變量會發生什么?它們對所有用戶都是通用的,或者對于每個用戶而言都是不同的。如果它們不同,那么服務器如何區分不同的用戶?還有一個類似的問題,如果有n用戶訪問特定的servlet,那么這個servlet只在第一個用戶第一次訪問它時實例化,或者是否為所有用戶單獨實例化?換句話說,實例變量會發生什么?
查看完整描述

5 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

Java servlet中的會話與其他語言(如PHP)中的會話相同。它對用戶來說是獨一無二的。服務器可以用不同的方式跟蹤它,例如cookie,url重寫等。這篇Java doc文章在Java servlet的上下文中解釋它,并指出會話的確切維護是服務器設計者留下的實現細節。規范僅規定必須通過與服務器的多個連接將其維護為對用戶唯一。有關這兩個問題的詳細信息,請查看Oracle的這篇文章。

查看完整回答
反對 回復 2019-05-21
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

當servlet容器(如Apache Tomcat)啟動時,如果出現任何問題或者在容器側控制臺出現錯使用web.xml的應用程序(將其命名為部署描述符)。

在servlet的實例化階段,servlet實例已準備就緒,但它無法為客戶端請求提供服務,因為它缺少兩條信息:
1:上下文信息
2:初始配置信息

Servlet引擎創建servletConfig接口對象,將上面缺少的信息封裝到servlet引擎中,通過提供servletConfig對象引用作為參數來調用servlet的init()。一旦init()完全執行,servlet就可以為客戶端請求提供服務。

Q)在servlet的生命周期中實例化和初始化發生了多少次?

A)只有一次(對于每個客戶端請求創建一個新線程),只有一個servlet實例服務于任意數量的客戶端請求,即在服務一個客戶端請求服務器之后不會死亡。它等待其他客戶端請求,即使用servlet(內部servlet引擎創建線程)克服了CGI(為每個客戶端請求創建新進程)的限制。

問)會話概念如何運作?

A)每當在HttpServletRequest對象上調用getSession()時

步驟1:評估請求對象的傳入會話ID。

步驟2:如果ID不可用,則創建全新的HttpSession對象并生成其對應的會話ID(即HashTable)會話ID存儲到httpservlet響應對象中,并將HttpSession對象的引用返回給servlet(doGet / doPost) 。

步驟3:如果未創建ID可用的全新會話對象,則從請求對象中拾取會話ID,通過使用會話ID作為密鑰在會話集合中進行搜索。

搜索成功后,會話ID將存儲到HttpServletResponse中,現有的會話對象引用將返回給UserDefineservlet的doGet()或doPost()。

注意:

1)當控制從servlet代碼離開到客戶端時,不要忘記servlet容器正在保存會話對象,即servlet引擎

2)多線程留給servlet開發人員實現ie。,處理客戶端的多個請求無需擔心多線程代碼

簡短形式:

在應用程序啟動時(它部署在servlet容器上)或首次訪問時(取決于啟動時加載設置),在實例化servlet時創建servlet,調用servlet的init()方法然后servlet(它的唯一實例)處理所有請求(由多個線程調用其service()方法)。這就是為什么不建議在其中進行任何同步,并且在取消部署應用程序(servlet容器停止)時應該避免servlet的實例變量,調用destroy()方法。


查看完整回答
反對 回復 2019-05-21
  • 5 回答
  • 0 關注
  • 833 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號