Tomcat伺服器session持久化

來源:互聯網
上載者:User

簡介
Jakarta Tomcat伺服器是一種Servlet/JSP容器,經曆了3.x到4.0.x到4.1.x的變遷,現在最新的版本為5.0.x,支援 Servlet2.4和JSP2.0規範,從apache網站上下載Tomcat 5,在環境變數中配置一下JAVA_HOME,小貓就能生靈活現的跑起來了。若小貓啟動失敗,DOS視窗會自動關閉,若運行catalina run命令DOS視窗是不會自動關閉的。

tomcat中有三個放置java庫的地方,分別是/server/lib、/shared/lib和/common/lib。
區別:/server/lib - 其中的jar檔案只能被tomcat伺服器訪問。
/shared/lib - 其中的jar檔案可以被所有的Web應用訪問,但不能被tomcat伺服器訪問到。
/common/lib - Web服務和tomcat伺服器都可以訪問的到。

server.xml檔案解析 - 檔案位置是<%CATALINA_HOME%>/conf/server.xml

配置虛擬機器主機
Host元素代表虛擬機器主機,在同一個Engine元素下可以配置多個虛擬機器主機。開啟server.xml檔案可以發現Engine元素下已經有一個名為localhost的Host元素了,可以在它後面加入下列代碼:

<Host name="www.myname.com" debug="0" appBase="c:/myname" unpackWar="true" autoDeploy="true">
    <alias>www.myname1.com</alias>
    <alias>www.myname2.com</alias>
    <Context pathh="/helloapp" docBase="helloapp" debug="0" reloadable="true"/>
</Host> 

Session的使用
Session 是一種用來跟蹤使用者狀態的機制,那它是怎麼實現的呢?Servlet容器通過在用戶端瀏覽器中儲存一個Session ID來跟蹤Session,調用session.getID()可以看到你的Session ID是多少。如果用戶端支援Cookie,就把Session ID作為Cookie保持在瀏覽器中,現在絕大多數瀏覽器都會把Cookie功能開啟,但如果使用者禁止了Cookie呢?Java Servlet API中提出了另外一種機制,Servlet容器可以重寫客戶requst的URL,把Session ID添加到URL資訊中,HttpServletResponse介面提供了這樣的方法:public String encodeURL(String url)-先判斷如果沒有啟用Session,例如jsp中<%@ page session="false"%>或執行了session.invalideate(),那麼直接返回url,在判斷用戶端師父支援 Cookie,如果不支援,就在url中加入Session ID的資訊,然後返回修改後的url。

Session的管理
當一個sesson開始時,Servlet容器會建立一個HttpSession對象,在某些情況下把這些Httpsession對象從記憶體中轉移到檔案系統中或資料庫中,需要訪問的時候在把它們載入到記憶體中來。這樣做的好處有兩點:節約了記憶體的消耗,當web伺服器產生故障時,還可以從檔案系統或資料庫中恢複Session的資料。
對於Session的管理,小貓提供了兩個實作類別:org.apache.catalina.session.StandardManager和org.apache.catalina.session.PersistentManager。
StandardManager -是預設的方法,當Tomcat伺服器重啟或重載的時候,會把Session對象儲存到
<%CATALINA_HOME%>/work/Catalina/honstname/applicatonname/SESSIONS.ser(預設值)檔案中,每個對象對應一個檔案,以Session ID為檔案名稱,例如:

<Context path="/helloapp" docBase="helloapp" debug="0" reloadable="true">
    <Manager className="org.apache.catalina.session.StandardManager" debug="0" 
      maxActiveSessions="-1" checkInterval="60" />
</Context>

參數說明:checkInterval-檢查session是否到期的時間間隔,以秒為單位,預設值是60秒;
maxActiveSessions-可處於活動狀態的session數。

PersistentManager -提供了更加靈活的管理方式,具有容錯能力,可以及時把Session備份到Session Store中,可以控制記憶體中Session的數量。
小貓還提供了實現持久化Session Store的介面,org.apache.catalina.Store,目前提供了兩個具體實作類別:org.apache.catalina.FileStore和org.apache.catalina.JDBCStore。
server.xml中的配置File Store -

<Context path="/helloapp" docBase="helloapp" debug="0" reloadable="true">
    <Manager className="org.apache.catalina.session.PersistentManager" debug="0" saveOnRestart="true" 
          maxActiveSessions="-1" minIdleSwap="-1" maxIdleSwap="-1" maxIdleBackup="-1" >
    <Store className="org.apache.catalina.session.FileStore" directory="mydir"/>
    </Manager>
</Context>

參數說明:saveOnRestart-伺服器關閉時,是否將所有的session儲存到檔案中;
maxActiveSessions-可處於活動狀態的session數;
minIdleSwap/maxIdleSwap-session處於不活動狀態最短/長時間(s),sesson對象轉移到File Store中;
maxIdleBackup-超過這一時間,將session備份。(-1表示沒有限制)

JDBCStore配置的區別:

<Store calssName="org.apache.catalina.JDBCStore" driverName="com.mysql.jdbc.Driver" 
    connectionURL="jdbc:mysql://localhost/tomsessionDB?user=root&password=" 
    sessionTable="tomcat_session" sessionIdCol="session_id" sessionDataCol="session_data" 
    sessionValidCol="session_valid" sessionMaxInactiveCol="max_inactive" 
    sessionLastAccessedCol="last_access" sessionAppCol="app_name" checkInterval="60" debug="99" />

Session失效時間的設定
在web.xml檔案中,位於<servlet-mapping>和<welcome-file-list>元素之間加入如下代碼,單位為分鐘:

<session-config>   
    <session-timeout>60</session-timeout>
</session-config>

Tomcat的admin平台和manager平台
這是Tomcat中內建的兩個Web應用,位於<%CATALINA_HOME%>/server/webapps /admin(manager),訪問地址是http://localhsot:8080/admin(manager)。要訪問這兩個Web應用,需要在
<%CATALINA_HOME%>/conf/tomcat-users.xml中添加如下內容:
<user username="admin" password="1234" role="admin"/>           //對應admin Web應用
<user username="manager" password="1234" role="manager"/>   //對應manager Web應用

admin平台把所有可配置的資訊分為三類:Tomcat Server、Resources、User Definition。
Tomcat Server-相當於server.xml中的<Server>元素及其子項目,<Service>、<Host>、<Context>、<Resources>、<Date Source>。
Resources-相當於server.xml中的<GlobalNamingResources>,共有四種資源:Date Source(JNDI資料來源)、Mail Sessioin(JNDI Mail Session資源)、Environment Entry(環境變數)、User Database(安全域中的使用者資料庫)。
User Definition-與tomcat-users.xml相對應。

manager平台-列出來所有Web應用和狀態,並提供了Start、Stop、Reload、 Undeploy命令,還發行就緒
<%CATALINA_HOME%>/webapps目錄下的Web應用或系統檔案任意位置的WAR檔案。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.