看原始碼學習Session的內容是如何儲存的?

來源:互聯網
上載者:User

 這個是tomcat6.x的原始碼,

org.apache.catalina.session.StandardSession

使用如下的結構來儲存session的值

    protected Map attributes = new ConcurrentHashMap();



public void setAttribute(String name, Object value)

裡,實際調用了

 setAttribute(name,value,true);



public void setAttribute(String name, Object value, boolean notify)

裡,如果value是0,則調用removeAttrbute方法,將屬性移除

if (value == null) {

  removeAttribute(name);

  return;

}

否則調用

 Object unbound = attributes.put(name, value);

將數值儲存到裡面,同時拿到以前的值

我們來看看

public void removeAttribute(String name, boolean notify)

調用了

protected void removeAttributeInternal(String name, boolean notify)

// Avoid NPE = NullPointerException 呵呵,就是null 指標

if (name == null) return;

// Remove this attribute from our collection

// 就是簡單的從Map裡面刪除

Object value = attributes.remove(name);

// 後面還有一些事件通知的方法調用

可見在Session裡,我們常用的操作就是這麼實現的,沒有什麼高深的東西。

只要我們能拿到屬於我們的session對象,就可以拿到我們儲存在裡面的東西了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.