一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - Tomcat中session的管理機(jī)制

Tomcat中session的管理機(jī)制

2020-06-18 11:02銳洋智能 JAVA教程

這篇文章主要為大家詳細(xì)介紹了Tomcat中session的管理機(jī)制 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下

詳細(xì)描述Tomcatsession的管理機(jī)制:

1.       請求過程中的session操作:

簡述:在請求過程中首先要解析請求中的sessionId信息,然后將sessionId存儲到request的參數(shù)列表中。然后再從 request獲取session的時候,如果存在sessionId那么就根據(jù)Id從session池中獲取session,如果sessionId不 存在或者session失效,那么則新建session并且將session信息放入session池,供下次使用。

(1)    SessionId解析過程時序圖:

Tomcat中session的管理機(jī)制

                   概述:首先用戶發(fā)送一個http請求傳遞給Http11Processor,經(jīng)由Http11Processor解析封裝在 org.apache.coyote.Request然后傳遞給CoyoteAdapter,coyoteAdapter是一個適配器,將coyote框 架封裝的org.apache.coyote.Request適配給org.apache.catalina.connector.Request(這個 流程不多說,之前都有總結(jié)過),轉(zhuǎn)換完之后會調(diào)用parsePathParameters方法去解析路徑參數(shù)中的cookie信息(因?yàn)楫?dāng)cookie被 瀏覽器禁用時,會將cookie信息重寫進(jìn)url),先嘗試從url中嘗試解析出sessionId. 然后會調(diào)用parseSessionCookiesId,這個就是從cookie中解析sessionId存到 request(parsePathParameters和parseSessionCookiesId方法,在調(diào)用過程中,沒有看到明顯的異或邏輯,即 兩者都執(zhí)行了,但這樣不是就有問題了嗎?想想其實(shí)沒有問題的,URL重寫設(shè)置sessionId或者放到cookie中傳遞過來,兩者方式只會用一個,想 到這點(diǎn)就知道沒有問題了)解析到sessionId就放到了request里面。解析SessionId的邏輯就ok了。下面貼出關(guān)鍵代碼:

         ParsePathParameters方法(從重寫URL中解析):

Tomcat中session的管理機(jī)制

Tomcat中session的管理機(jī)制

Ps: 標(biāo)記出來的部分分別是從URL解析出變量,然后放到request參數(shù)列表里面。

parseSessionCookiesId方法(從cookie中解析出sessionId):

Tomcat中session的管理機(jī)制

Ps: 上面的標(biāo)記就是從cookie中獲取sessionId.看第一個標(biāo)記有個 SessionConfig.getSessionCookieName(context)的調(diào)用,這里會獲取到一個默認(rèn)的sessionId的key, 這個key是定義在SessionConfig中的,其值為jsessionId:Tomcat中session的管理機(jī)制

         (2) 從請求中獲取session的流程基本就是上文描述的這樣。那么再看一下Servlet獲取session的流程:

   Tomcat中session的管理機(jī)制

概述:appServlet是我們自己定義的一個Servlet,在通過Reqest獲取session的時候,其實(shí)調(diào)用的這個 HttpServletRequest(是一個接口)其實(shí)是RequestFacade(封裝了 org.apache.catalina.connector.Request的一個門面),然后RequestFacade會調(diào)用真實(shí)的Request 的getSession方法。Request具體的邏輯是調(diào)用Context容器的getManger方法獲取Session管理器(session管理 器詳情下文介紹),然后如果SessionId如果已經(jīng)被解析出來了,那么則會調(diào)用findSession方法從session對象池中獲取對應(yīng)的 session,反之如果sessionId不存在,則需要重新創(chuàng)建一個Session,并放入session對象池中。

下面貼出關(guān)鍵代碼:

類RequestFacade的getSession方法:

Tomcat中session的管理機(jī)制

類Request的getSession方法:

Tomcat中session的管理機(jī)制

類Request的doGetSession方法:

Tomcat中session的管理機(jī)制

Tomcat中session的管理機(jī)制

Ps:第一個標(biāo)記就是根據(jù)SessionId從session對象池中獲取session信息,第二標(biāo)記就是在沒有解析到sessionId的情況下創(chuàng)建一個新的Session對象。

         這個創(chuàng)建一個新的session這里點(diǎn)涉及到新的sessionId的生成,生成sessionId的邏輯關(guān)鍵代碼是在類SessionIdGenerator中的generateSessionId方法中定義:

        Tomcat中session的管理機(jī)制

以上即是Servlet獲取session的流程,下文具體總結(jié)一下tomcat是怎么來管理Session的,即session管理器的知識。

 

2.       Session的管理機(jī)制

Session管理器定義:Session管理器組件負(fù)責(zé)管理Session對象,例如,創(chuàng)建和銷毀Session對象。

首先看一張Session管理器的類繼承結(jié)構(gòu)圖(這個是tocmat7.x的圖,tomcat5的類繼承機(jī)構(gòu)和這個有很大不同):

Tomcat中session的管理機(jī)制

         簡述:下面依次總結(jié)下每個類(參考官網(wǎng)信息):

(1)    Manager:定義了關(guān)聯(lián)到某一個容器的用來管理session池的基本接口。

(2)    ManagerBase:實(shí)現(xiàn)了Manager接口,該類提供了Session管理器的常見功能的實(shí)現(xiàn)。

(3)    StandardManager:繼承自ManagerBase,tomcat的默認(rèn)Session管理器(不指定配置,默認(rèn)使用這 個),是tomcat處理session的非集群實(shí)現(xiàn)(也就說是單機(jī)版的),tomcat關(guān)閉時,內(nèi)存session信息會持久化到磁盤保存為 SESSION.ser,再次啟動時恢復(fù)。

(4)    PersistentManagerBase:繼承自ManagerBase,實(shí)現(xiàn)了和定義了session管理器持久化的基礎(chǔ)功能。

(5)    PersistentManager:繼承自PersistentManagerBase,主要實(shí)現(xiàn)的功能是會把空閑的會話對象(通過設(shè)定超時時間)交換到磁盤上。

(6)    ClusterManager:實(shí)現(xiàn)了Manager接口,通過類名應(yīng)該能猜到,這個就是管理集群session的管理器和上面那個 StandardManager單機(jī)版的session管理器是相對的概念。這個類定義類集群間session的復(fù)制共享接口。

(7)    ClusterManagerBase:實(shí)現(xiàn)了ClusterManager接口,繼承自ManagerBase。該類實(shí)現(xiàn)了session復(fù)制的基本操作。

(8)    BackupManager:繼承自ClusterManagerBase,        集群間session復(fù)制策略的一種實(shí)現(xiàn),會話數(shù)據(jù)只有一個備份節(jié)點(diǎn),這個備份節(jié)點(diǎn)的位置集群中所有節(jié)點(diǎn)都可見。這種設(shè)計使它有個優(yōu)勢就是支持異構(gòu)部署。

(9)    DeltaManager:繼承自ClusterManagerBase,集群建session復(fù)制策略的一種實(shí)現(xiàn),和BackupManager不同的是,會話數(shù)據(jù)會復(fù)制到集群中所有的成員節(jié)點(diǎn),這也就要求集群中所有節(jié)點(diǎn)必須同構(gòu),必須部署相同的應(yīng)用。

    補(bǔ)充:下面再具體總結(jié)一點(diǎn)就是在PersistentManagerBase類中有個成員變量Store:

Tomcat中session的管理機(jī)制

持久化session管理器的存儲策略就是有這個Store對象定義的,這個Store的類繼承結(jié)構(gòu)如下:

Tomcat中session的管理機(jī)制

簡述:接口Store及其實(shí)例是為session管理器提供了一套存儲策略,store定義了基本的接口,而StoreBase提供了基本的實(shí)現(xiàn)。 其中FileStore類實(shí)現(xiàn)的策略是將session存儲在以setDirectory()指定目錄并以.session結(jié)尾的文件中的。 JDBCStore類是將Session通過JDBC存入數(shù)據(jù)庫中,因此需要使用JDBCStore,需要分別調(diào)用setDriverName()方法和 setConnectionURL()方法來設(shè)置驅(qū)動程序名稱和連接URL。

 

3.       Tomcat session相關(guān)的配置

從兩個層面總結(jié)一下session相關(guān)的配置和設(shè)置。首先是從配置文件層面,session是有過期時間的,這個默認(rèn)的過期時間是 在$catalina_home/conf/web.xml有定義的。具體的默認(rèn)配置如下(默認(rèn)的過期時間是30min,即30min沒有訪 問,session就過期了):

Tomcat中session的管理機(jī)制

還有一點(diǎn)就是session管理如果不配置就默認(rèn)使用StandardManager,但如果要配置的話可以 在$catalina_home/conf/context.xml當(dāng)中指定(其中從這個配置當(dāng)中可以看到session管理器是和context容器關(guān) 聯(lián)的,也就說每個web應(yīng)用都會有一個session管理器)具體的配置如下:

Tomcat中session的管理機(jī)制

Tomcat7.x默認(rèn)這個manager的配置是注釋掉的。如果要指定的PersistentManager為默認(rèn)管理器的話可以這么指定:

Tomcat中session的管理機(jī)制

其實(shí)看到這也就發(fā)現(xiàn)了,其實(shí)session管理器或者Store存儲策略,只要實(shí)現(xiàn)了相關(guān)的接口,都是可以自定義的。自己寫一個配置在這里就ok了。

另外在從代碼層面總結(jié)一下:session的一些配置信息是寫死在代碼里的,比如SessionConfig這個類就定義了一些session的設(shè) 置信息。Session在cookie中的名字是JSESSION. Session通過URL重寫的方式放在path里時,鍵值的名字是jsessionids,具體的代碼如下:

Tomcat中session的管理機(jī)制

還有一點(diǎn)就是sessionId默認(rèn)指定的長度是16個字節(jié),這個在SessionIdGenerator當(dāng)中指定:

Tomcat中session的管理機(jī)制

好了,有關(guān)默認(rèn)配置的就先總結(jié)這么多。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费看h片的网站 | 欧美性4khd720 | 逼逼毛片| 女性全身裸露无遮挡 | 日处女b| 国产成+人+综合+欧美 亚洲 | 秋葵污视频 | 欧美激情精品久久久久久不卡 | 女娃开嫩苞经历小说 | 日本视频免费在线观看 | 嫩模被黑人粗大挺进 | 午夜免费无码福利视频麻豆 | 99色亚洲 | lubuntu网页版在线 | 羞羞私人影院可以直接免费观影吗 | 日本一区二区三区在线 观看网站 | 91午夜剧场 | 午夜在线观看免费完整直播网页 | 美女天天色 | 国内老司机精品视频在线播出 | 黑人巨大和日本娇小中出 | 国产盗摄wc女厕所 | 俄罗斯美女尿尿 | 天堂成人在线观看 | 国产欧美一区二区精品久久久 | 免费一级欧美片在线观免看 | 日本加勒比无码av | 国产999在线观看 | 国产在线91 | 色综合欧美色综合七久久 | 末代皇帝无删减版在线观看 | 日本狠狠操 | 亚洲福利天堂网福利在线观看 | 成人国产网站v片免费观看 成人国产精品视频 | 亚洲精品久久久久AV无码 | 爆操萝莉 | 新影音先锋男人色资源网 | 脱女学小内内摸出水网站免费 | 亚洲国产成人久久77 | 东北恋哥在线播放免费播放 | 日本十大顶级绝伦推理片 |