會(huì)話管理

1.加載web應(yīng)用資源文件

this.getServletContext().getRequestDispatcher(path);
req.getRequestDispatcher(path);

這兩句在Servlet中是等價(jià)的。

在servlet中,只要是路徑就要寫/却汉。

思考:目標(biāo)資源是給誰(shuí)使用的。
1)給服務(wù)器使用的荷并。
/表示在當(dāng)前web應(yīng)用的根目錄合砂。
2)給瀏覽器使用的。
/表示在webapps的目錄下。

    /**
     * 1.轉(zhuǎn)發(fā)翩伪。給服務(wù)器使用
     */
    this.getServletContext().getRequestDispatcher(path);
    req.getRequestDispatcher(path);

    /**
     * 2.請(qǐng)求的重定向微猖。給瀏覽器使用
     */

    resp.sendRedirect(path);

    /**
     * 3.html的超鏈接。給瀏覽器使用缘屹。
     */

    resp.getWriter().write(
              "<html>"
                    +"<body>"
                       +"<a href='path'>超鏈接</a>"
                    +"</body>"
                 +"</html>"
    );

    /**
     * 4.html頁(yè)面中的form表單提交地址凛剥。給瀏覽器使用。
     */

    resp.getWriter().write(
            "<html>"
                  +"<body>"
                    +"<form action=''path></form>"
                  +"</body>"
              +"</html>"
    );

注意:
.代表當(dāng)前路徑轻姿。相對(duì)于java命令運(yùn)行的目錄犁珠。
..代表上一級(jí)路徑。

使用web應(yīng)用下加載資源文件的方法

1)getRealPath讀取
this.getServletontext().getRealPath("/");

2.cookie入門

會(huì)話管理入門:
軟件中的一次會(huì)話:打開(kāi)瀏覽器->訪問(wèn)一些服務(wù)器內(nèi)容->關(guān)閉瀏覽器

登錄場(chǎng)景:
打開(kāi)瀏覽器->瀏覽到登錄頁(yè)面->輸入用戶名和密碼->訪問(wèn)到用戶主頁(yè)->修改密碼互亮,修改收貨地址...

在此處登錄會(huì)話過(guò)程中產(chǎn)生的數(shù)據(jù)(用戶會(huì)話數(shù)據(jù))如何保存下來(lái)呢犁享?

購(gòu)物場(chǎng)景:
打開(kāi)瀏覽器->瀏覽商品列表->加入購(gòu)物車(把商品的信息保存下來(lái))->關(guān)閉瀏覽器

打開(kāi)瀏覽器->直接進(jìn)入購(gòu)物車->查看到上次加入購(gòu)物車的商品->下訂單

問(wèn)題:在購(gòu)物會(huì)話過(guò)程中,如何保存商品信息豹休?炊昆?

會(huì)話管理:管理瀏覽器客戶端 和 服務(wù)器端之間會(huì)話過(guò)程中產(chǎn)生的數(shù)據(jù)。

域?qū)ο螅簩?shí)現(xiàn)資源之間的數(shù)據(jù)共享威根。

request,context

context是所有用戶公有的資源凤巨,會(huì)覆蓋數(shù)據(jù)。
request來(lái)保存數(shù)據(jù)的話洛搀,要使用轉(zhuǎn)發(fā)技術(shù)來(lái)跳轉(zhuǎn)頁(yè)面敢茁,那么久只有整個(gè)網(wǎng)站都使用轉(zhuǎn)發(fā)技術(shù)了,這個(gè)不可以留美。

解決方法彰檬,可以使用session的域?qū)ο髞?lái)保存會(huì)話數(shù)據(jù)。

3.會(huì)話技術(shù)

1)Cookie技術(shù): 會(huì)話數(shù)據(jù)保存在瀏覽器客戶端独榴。
2)Session技術(shù): 會(huì)話數(shù)據(jù)保存在服務(wù)器端僧叉。

Cookie技術(shù)

特點(diǎn):會(huì)話數(shù)據(jù)保存在瀏覽器客戶端。

技術(shù)核心:Cookie類棺榔,用于存儲(chǔ)會(huì)話數(shù)據(jù)瓶堕。
a) 構(gòu)造Cookie對(duì)象
Cookie(name, value)
b)
setPath(uri) 設(shè)置cookie的有效訪問(wèn)路徑
setMaxAge(expiry) 設(shè)置cookie 的有效時(shí)間
setValue(newValue) 設(shè)置cookie的值
c) 發(fā)送cookie到瀏覽器端(cookie是保存在瀏覽器的)
response.addCookie(Cookie cookie): 發(fā)送cookie
d) 服務(wù)器接受cookie
request.getCookie(): 接受cookie

在Servlet中:

    // 1.創(chuàng)建cookie對(duì)象
    Cookie cookie = new Cookie("name","eric");
    Cookie cookie1 = new Cookie("email", "liao.malin@youpude.cn");

    // 2.把cookie數(shù)據(jù)發(fā)送到瀏覽器(通過(guò)響應(yīng)頭發(fā)送: set-cookie名稱)
    resp.addCookie(cookie);
    resp.addCookie(cookie1);

    // 3.接受瀏覽器發(fā)送的cookie信息
    Cookie[] cookies = req.getCookies();

瀏覽器發(fā)送到服務(wù)器的數(shù)據(jù)叫請(qǐng)求。

請(qǐng)求頭:Set-Cookie
響應(yīng)頭:Cookie

Cookie原理
1)服務(wù)器創(chuàng)建cookie對(duì)象症歇,吧會(huì)話數(shù)據(jù)存儲(chǔ)到cookie對(duì)象中郎笆。
new Cookie("name", "value");
2)服務(wù)器發(fā)送cookie信息到瀏覽器
response.addCookie(cookie);
舉例:set-cookie=name=eric(隱藏發(fā)送了一個(gè)set-cookie名稱的響應(yīng)頭)
3)瀏覽器得到服務(wù)器發(fā)送的cookie,然后保存在瀏覽器端。
4)瀏覽器在下次訪問(wèn)服務(wù)器時(shí)忘晤,會(huì)帶著cookie的信息宛蚓。
舉例:cookie:name=eric(隱藏帶著一個(gè)叫cookie名稱的請(qǐng)求頭)
5)服務(wù)器接受到瀏覽器帶來(lái)的cookie信息。
request.getCookies();

Cookie的細(xì)節(jié)

1)setPath(url)
設(shè)置cookie的有效訪問(wèn)路徑设塔。有效路徑值得是cookie的于曉路徑保存在哪兒凄吏,那么瀏覽器在有效路徑下訪問(wèn)服務(wù)器時(shí),就會(huì)帶著cookie信息,否者則不帶cookie信息痕钢。

默認(rèn)情況图柏,也就是不設(shè)置,那么任连,有效路徑在當(dāng)前web應(yīng)用目錄下蚤吹。

  1. setMaxAge(int expiry)
    設(shè)置cookie 的有效時(shí)間
    正整數(shù):表示cookie數(shù)據(jù)保存瀏覽器的緩存目錄(硬盤中),數(shù)值表示保存的時(shí)間随抠。
    負(fù)整數(shù):表示cookie數(shù)據(jù)保存瀏覽器的內(nèi)存中裁着。瀏覽器關(guān)閉cookie就丟失了。
    零:表示刪除同名的cookie數(shù)據(jù)拱她。

    cookie1.setMaxAge(20); // 20秒后過(guò)期
    時(shí)間從不去調(diào)用這個(gè)cookie開(kāi)始算二驰。

    cookie1.setMaxAge(-1); // cookie保存在瀏覽器內(nèi)存中。只有關(guān)閉瀏覽器椭懊,才會(huì)沒(méi)有诸蚕。也叫作會(huì)話cookie步势。-1和-1000都一樣氧猬。

    cookie1.setMaxAge(0); // 刪除同名的cookie

Cookie數(shù)據(jù)類型

都是字符串。局限性就是只能保存字符串類型坏瘩。
可以保存多個(gè)cookie盅抚,不是無(wú)限制的。瀏覽器只能存放300個(gè)cookie倔矾,每個(gè)站點(diǎn)最多存放20個(gè)cookie妄均,每個(gè)Cookie的大小限制為4kb.

cookie不能保存中文,只能保存英文的哪自。

cookie是在客戶端保存的丰包。

客戶端和服務(wù)端通過(guò):resp.addCookie(cookie)req.getCookies(); 交互數(shù)據(jù),完成對(duì)話壤巷。

cookie.setValue(lastTime);  // cookie更新value

4.Session技術(shù)

session引入的原因
Cookie的局限:

  1. Cookie只能存字符串類型邑彪,不能保存對(duì)象
    2)只能存英文
    3)1個(gè)cookie的容量不能超過(guò)4KB
    如果要保存非字符串,超過(guò)4KB內(nèi)容胧华,只能使用session技術(shù)寄症。

Session特點(diǎn):
會(huì)話數(shù)據(jù)存在服務(wù)器端.(內(nèi)存中)

Session技術(shù)核心

我們學(xué)HttpSession這個(gè)類就足夠了。
用于保存會(huì)話數(shù)據(jù)矩动。

HttpSession是一個(gè)接口有巧。

創(chuàng)建或者得到session對(duì)象:

getSession()
getSession(boolean create)

設(shè)置session對(duì)象:

setmaxInactieInterval(Int interval) 設(shè)置session的有效時(shí)間
invalidate()  銷毀session對(duì)象
getId() 得到session編號(hào)

保存會(huì)話數(shù)據(jù)到session對(duì)象

setAttribute(name, value)  保存數(shù)據(jù)。 HttpSession也是一個(gè)域?qū)ο蟆?
getAttribute()  獲取數(shù)據(jù)
removeAttribute() 清除數(shù)據(jù)

Session原理

問(wèn)題:服務(wù)器能夠識(shí)別不同的瀏覽者悲没。
前提:在哪個(gè)session域?qū)ο蟊4鏀?shù)據(jù)篮迎,就必須從哪個(gè)域?qū)ο笕〕觥?/p>

代碼解讀:

HttpSession session = request.getSession();

1)創(chuàng)建session對(duì)象,給session對(duì)象分配一個(gè)唯一的ID,叫作JSESSIONID

new HttpSession();

2)把JSESSIONID作為Cookie的值發(fā)送給瀏覽器保存

Cookie cookie = new Cookie("JSESSIONID", sessionID);
response.addCookie(cookie);

3)第二次訪問(wèn)的時(shí)候,瀏覽器帶著JSESSIONID的cookie訪問(wèn)服務(wù)器

4)服務(wù)器得到JSESSIONID甜橱,在服務(wù)器的內(nèi)存中搜索是否存放對(duì)應(yīng)編號(hào)的session對(duì)象享言。

if(找到){
    return map.get(sessionID);
}
Map<String, HttpSession>
<"s001", s1>
<"s002", s2>

5)如果找到對(duì)應(yīng)編號(hào)的session對(duì)象,直接返回該對(duì)象渗鬼。
6)如果找不到對(duì)應(yīng)編號(hào)的session對(duì)象览露,就會(huì)創(chuàng)建新的session對(duì)象。繼續(xù)走1)的流程譬胎。

結(jié)論:通過(guò)JSESSION的cookie值在服務(wù)器找session對(duì)象差牛。

Session的技術(shù)也需要通過(guò)Cookie來(lái)輔助。

cookie三句代碼堰乔,session只有一句核心代碼response.getSession()偏化。

req.getSession(true); 等價(jià)于 req.getSession();

Session細(xì)節(jié)

getId()  // 得到編號(hào)

setMaxinactiveInterval(int Interval):設(shè)置session的有效時(shí)間。

默認(rèn)是30Min镐侯。如果是負(fù)數(shù)侦讨,那么就是銷毀。

web.xml中:

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

配置session的過(guò)期時(shí)間:以min為單位的苟翻。

總結(jié):
1)會(huì)話管理:瀏覽器和服務(wù)器會(huì)話過(guò)程中的產(chǎn)生的會(huì)話數(shù)據(jù)的管理韵卤。
2)Cookie技術(shù):

new Cookie("name", "value")
response.addCookie(cookie)
request.getCookies();
  1. Session技術(shù):

    request.getSession();
    setAttribute(name, value)
    geAttribute(name)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市崇猫,隨后出現(xiàn)的幾起案子沈条,更是在濱河造成了極大的恐慌,老刑警劉巖诅炉,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜡歹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡涕烧,警方通過(guò)查閱死者的電腦和手機(jī)月而,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)议纯,“玉大人父款,你說(shuō)我怎么就攤上這事”陨龋” “怎么了铛漓?”我有些...
    開(kāi)封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鲫构。 經(jīng)常有香客問(wèn)我浓恶,道長(zhǎng),這世上最難降的妖魔是什么结笨? 我笑而不...
    開(kāi)封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任包晰,我火速辦了婚禮湿镀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伐憾。我一直安慰自己勉痴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布树肃。 她就那樣靜靜地躺著蒸矛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胸嘴。 梳的紋絲不亂的頭發(fā)上雏掠,一...
    開(kāi)封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音劣像,去河邊找鬼乡话。 笑死,一個(gè)胖子當(dāng)著我的面吹牛耳奕,可吹牛的內(nèi)容都是我干的绑青。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼屋群,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼闸婴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起谓晌,我...
    開(kāi)封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掠拳,失蹤者是張志新(化名)和其女友劉穎癞揉,沒(méi)想到半個(gè)月后纸肉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喊熟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年柏肪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芥牌。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烦味,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出壁拉,到底是詐尸還是另有隱情谬俄,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布弃理,位于F島的核電站溃论,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏痘昌。R本人自食惡果不足惜钥勋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一炬转、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧算灸,春花似錦扼劈、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至赊瞬,卻和暖如春捍靠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背森逮。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工榨婆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人褒侧。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓良风,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親闷供。 傳聞我的和親對(duì)象是個(gè)殘疾皇子烟央,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 2.1 軟件中的會(huì)話 一次會(huì)話: 打開(kāi)瀏覽器 -> 訪問(wèn)一些服務(wù)器內(nèi)容 -> 關(guān)閉瀏覽器 登錄場(chǎng)景: 打開(kāi)瀏覽器 ...
    yangliangliang閱讀 379評(píng)論 0 0
  • 1課程回顧 Servlet編程 1)Servlet生命周期(重點(diǎn)) 構(gòu)造方法:創(chuàng)建servlet對(duì)象。默認(rèn)情況下歪脏,...
    守亭翁閱讀 213評(píng)論 0 0
  • 會(huì)話管理入門 軟件中的會(huì)話:一次會(huì)話: 打開(kāi)瀏覽器 -> 訪問(wèn)一些服務(wù)器內(nèi)容 -> 關(guān)閉瀏覽器登錄場(chǎng)景:打開(kāi)瀏覽器...
    奮斗的老王閱讀 1,431評(píng)論 4 53
  • 從三月份找實(shí)習(xí)到現(xiàn)在疑俭,面了一些公司,掛了不少婿失,但最終還是拿到小米钞艇、百度、阿里豪硅、京東哩照、新浪、CVTE懒浮、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,253評(píng)論 11 349
  • 昨天飘弧,是老公公七十七歲生日,我們老家有個(gè)風(fēng)俗砚著,老人年齡大了次伶,一定要大過(guò)六十六歲和七十七歲的生日。 很早我們就和姐姐...
    紫色人生閱讀 379評(píng)論 0 3