Session和Cookie總結(jié)

小案例

?統(tǒng)計(jì)當(dāng)前頁面的第幾個(gè)訪問者

??注意事項(xiàng)

??1,防止線程安全問題

??2.使用同步代碼塊選擇鎖對(duì)象,通常會(huì)使用當(dāng)前servlet對(duì)象

ServletConfig對(duì)象

?作用:在xml文件中存放初始化數(shù)據(jù),在tomcat啟動(dòng)時(shí)就加載

?在web.xml文件中利用init-param標(biāo)簽來定義servlet初始化

參數(shù),包含兩個(gè)子標(biāo)簽param-name和value,是一個(gè)鍵值對(duì)形式

?執(zhí)行流程

??當(dāng)Tomcat啟動(dòng)時(shí),WEB容器在創(chuàng)建servlet時(shí),會(huì)把初始化參數(shù)

封裝到servletconfig對(duì)象中,這個(gè)對(duì)象作為init方法的參數(shù)傳遞

?web容器:相當(dāng)于一個(gè)web的xml文件,

里面存放了好多servlet的加載對(duì)象

?注意:一個(gè)servlet對(duì)應(yīng)一個(gè)serveltConfig

ServletContext對(duì)象

?作用:利用域?qū)ο罂梢源娣艛?shù)據(jù),在其他的

servlet中不用創(chuàng)建對(duì)象就能來獲取

?可以在xml中設(shè)置

來設(shè)置初始化參數(shù),實(shí)現(xiàn)數(shù)據(jù)的共享

?1.表示當(dāng)前整個(gè)WEB應(yīng)用,一個(gè)應(yīng)用對(duì)應(yīng)一個(gè)servletconfig

?2.是一個(gè)域?qū)ο?,可以跨域獲取值,實(shí)現(xiàn)數(shù)據(jù)的共享

?3.使用setAttribute("屬性名", "屬性值"),getAttribute("屬性名");

轉(zhuǎn)發(fā)和重定向

?Web服務(wù)器接收到服務(wù)器的請(qǐng)求后,去調(diào)用另一個(gè)web資源

,這叫轉(zhuǎn)發(fā),但轉(zhuǎn)發(fā)后還是使用的原地址路徑

?request域轉(zhuǎn)發(fā),req.setAttribute("name", "西施");

?req.getRequestDispatcher("/ForwardTest2")

.forward(req, resp);

?重定向resp.sendRedirect(req.getContextPath()

+ "/RedirectTest2");

?要獲取requst域?qū)ο笾械臄?shù)據(jù)必須使用轉(zhuǎn)發(fā)。

?區(qū)別

??轉(zhuǎn)發(fā)是帶有數(shù)據(jù),重定向只是一個(gè)地址

??轉(zhuǎn)發(fā)的路徑不變,重定向要跳轉(zhuǎn)到了另一個(gè)路徑,

因此重定向不能使用request域?qū)ο?/p>

??forward只需servlet路徑,redirect需要加項(xiàng)目名

Session會(huì)話

?生活中的會(huì)話:就是兩個(gè)人之間簡(jiǎn)單的對(duì)話

?程序中的會(huì)話:打開瀏覽器,訪問服務(wù)器上的內(nèi)容,關(guān)閉瀏覽器

?登錄業(yè)務(wù)流程:打開瀏覽器,訪問登錄頁面,輸入 用戶名 密碼 驗(yàn)證碼,發(fā)送給服務(wù)器,服務(wù)器驗(yàn)證消息,返回給瀏覽器,瀏覽器加載主頁

?發(fā)現(xiàn):在百度首頁登錄了用戶名,在所有的

百度服務(wù)的頁面下都是一個(gè)登錄的狀態(tài)

?購物車業(yè)務(wù)流程:淘寶上選擇一個(gè)商品,加入購物車。

打開瀏覽器,淘寶網(wǎng),登錄賬號(hào),查看購物車,也可以看到手機(jī)app添加的商品

?這里的購物車?yán)锩娴臄?shù)據(jù)在哪保存的?

?利用會(huì)話控制技術(shù):管理瀏覽器和服務(wù)器之間會(huì)話過程中產(chǎn)生的數(shù)據(jù)

會(huì)話控制技術(shù)

?1.Session技術(shù)

??特點(diǎn)

???會(huì)話數(shù)據(jù)保存在服務(wù)上,可以生成一個(gè)臨時(shí)或永久的temp文件

??HttpSession

???1.獲取Session對(duì)象

???停止使用Session對(duì)象:HttpSession getSession(false)

默認(rèn)為true

???2.設(shè)置Session對(duì)象

???獲取Session有效時(shí)間:void setMaxInactiveInterval(time);

???invalidate()銷毀Session,getId()獲取id

???3.Session域?qū)ο?/a>

????可以保存數(shù)據(jù)屬性到Session中

???set/get/removeAttribute("name")可以操作里面的數(shù)據(jù)

?2.Cookie技術(shù)

??核心方法:value值不能為中文

??1.創(chuàng)建對(duì)象:new Cookie("name","value")

??2.設(shè)置Cookie

??setValue("value")設(shè)置value值

??setPath(path)設(shè)置Cookie的有效范圍

??setMaxAge(time)設(shè)置Cookie的有效時(shí)間

??3.發(fā)送Cookie到瀏覽器

??resp.addCookie(cookie)發(fā)送Cookie給瀏覽器

??4.服務(wù)器接受瀏覽器發(fā)送過來的數(shù)據(jù)

??req.getCookies()返回cookie數(shù)組

??局限性

???1,限制數(shù)據(jù)類型必須是String

???2.cookie對(duì)象中不能保存中文,不然會(huì)報(bào)錯(cuò)

???IllegalArgumentException

???3.Cookie保存數(shù)據(jù)的容量較小,只有4KB

???要解決這些缺點(diǎn),就要使用Session,

但是如果瀏覽器沒打開Cookie,Session是不能使用的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容