5.1 其他內(nèi)置對(duì)象的講解

5.1.1 pageContext對(duì)象

九大內(nèi)置對(duì)象之一,pageContext對(duì)象提供了對(duì)" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > 大數(shù)據(jù)從入門(mén)到深入:JavaEE 之 動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)基礎(chǔ) JSP內(nèi)置對(duì)象與對(duì)象作用域

大數(shù)據(jù)從入門(mén)到深入:JavaEE 之 動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)基礎(chǔ) JSP內(nèi)置對(duì)象與對(duì)象作用域

時(shí)間:2023-09-26 03:42:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-09-26 03:42:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

大數(shù)據(jù)從入門(mén)到深入:JavaEE 之 動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)基礎(chǔ) JSP內(nèi)置對(duì)象與對(duì)象作用域:第五章 JSP拓展 : JSP內(nèi)置對(duì)象與對(duì)象作用域

5.1 其他內(nèi)置對(duì)象的講解

5.1.1 pageContext對(duì)象

九大內(nèi)置對(duì)象之一,pageContext對(duì)象提供了對(duì)JSP頁(yè)面內(nèi)所有的對(duì)象及名字空間的訪問(wèn),我們 可以使用這個(gè)對(duì)象在JSP頁(yè)面內(nèi)存儲(chǔ)各種各樣的數(shù)據(jù)和調(diào)用各種各樣的數(shù)據(jù)?

比如我們調(diào)用的 : ${pageContext.request.contextPath} 這個(gè)就是我們利用pageContext來(lái)獲取 現(xiàn)在訪問(wèn)的項(xiàng)目名稱,它能幫助我們絕對(duì)定位到項(xiàng)目的根目錄下,所以在配置一 些請(qǐng)求或者引入文件的位置的時(shí)候這個(gè)應(yīng)用還是非常多的?

${pageContext.request.contextPath}通過(guò)這個(gè)參數(shù)獲取項(xiàng)目的名稱,這樣就很方便的可以定位網(wǎng)站元素的位置了? pageContext 除了能夠幫助我們獲取對(duì)象數(shù)據(jù)之外,還能夠保存數(shù)據(jù)信息?

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>測(cè)試作用域</title></head><body><% pageContext.setAttribute("msg", "Hello,PageContext!");%><div> <h1>${msg}</h1></div></body></html>效果 :

當(dāng)然同樣可以保存數(shù)據(jù)的還有request,那么他們保存數(shù)據(jù)上有什么區(qū)別么?

如果在頁(yè)面范圍內(nèi)的話 request保存的數(shù)據(jù) pageContext保存的數(shù)據(jù),這個(gè)頁(yè)面都可以獲取 到,但是如果轉(zhuǎn)發(fā)到下一個(gè)頁(yè)面的話,request的值可以接收到但是pageContext就接收不到了?

這種現(xiàn)象叫做頁(yè)面存儲(chǔ)數(shù)據(jù)的作用域?

也就是說(shuō)

pageContext保存的數(shù)據(jù)只有在當(dāng)前頁(yè)面有效?

request保存的數(shù)據(jù)是在一次請(qǐng)求有效?

舉例說(shuō)明:

在同一個(gè)頁(yè)面兩個(gè)變量都可以獲取到

<% pageContext.setAttribute("msg", "Hello,PageContext!"); request.setAttribute("msg1", "Hello,Request!");%><div> <h1>${msg}</h1> <h1>${msg1}</h1></div>但是要是轉(zhuǎn)發(fā)到下一個(gè)頁(yè)面就只有request的值能獲取到了

<% pageContext.setAttribute("msg", "Hello,PageContext!"); request.setAttribute("msg1", "Hello,Request!"); request.getRequestDispatcher("page1.jsp").forward(request, response);%>page1.jsp:

<div> <h1>${msg}</h1> <h1>${msg1}</h1></div>通過(guò)上面的案例我們不難發(fā)現(xiàn),pageContext它的存值范圍只有當(dāng)前頁(yè)面,所以它的作用域是 非常小的?

而request能比它大一點(diǎn),request的作用域能夠維持在一次轉(zhuǎn)發(fā)鏈(轉(zhuǎn)發(fā)鏈:一次請(qǐng)求在多個(gè)頁(yè) 面進(jìn)行轉(zhuǎn)發(fā))的范圍內(nèi),

比如做個(gè)試驗(yàn),讓page1.jsp再轉(zhuǎn)發(fā)給page2.jsp,看下這個(gè)變量還能不能獲取到?

page1.jsp

<% request.getRequestDispatcher("page2.jsp").forward(request, response);%>page2.jsp

<div> <h1>${msg}</h1> <h1>${msg1}</h1></div>效果:

但是此處我們必須意識(shí)到一個(gè)問(wèn)題,如果page1.jsp是重定向給page2.jsp的話那么這個(gè)值就拿 不到了,那這個(gè)問(wèn)題怎么解決呢?

page1.jsp

<% // request.getRequestDispatcher("page2.jsp").forward(request, response); response.sendRedirect("page2.jsp");%>效果 :

面對(duì)以上的問(wèn)題,我們就應(yīng)該學(xué)習(xí)更大的作用域了! HttpSession

5.1.2 session 對(duì)象

1) 問(wèn)題分析 : 想要解決上面的問(wèn)題其實(shí)并不難,如果仔細(xì)思考其實(shí)還是能發(fā)現(xiàn)解決方案的,大家想不管是轉(zhuǎn)發(fā)和重定向,只是頁(yè)面之間跳轉(zhuǎn),我瀏覽器并沒(méi)有關(guān)閉重新打開(kāi)呀,所以

我們?nèi)绻阎荡嬖谠跒g覽器的一次打開(kāi)與關(guān)閉的范圍內(nèi),那不就能解決這個(gè)問(wèn)題了么;

2) 會(huì)話概述

一個(gè)會(huì)話就是在一段時(shí)間內(nèi),一個(gè)客戶端與Web服務(wù)器的一連串相關(guān)的交互過(guò)程

我們與tomcat的一次通信,其中會(huì)包含多個(gè)頁(yè)面的跳轉(zhuǎn)里面就包含轉(zhuǎn)發(fā)與重定向,而不管多少 次轉(zhuǎn)發(fā)與重定向其實(shí)tomcat就只給我們創(chuàng)建一個(gè)會(huì)話叫做session對(duì)象?

session對(duì)象也是jsp的內(nèi)置對(duì)象之一,是服務(wù)器創(chuàng)建用于與瀏覽器溝通的通道,類似我們數(shù)據(jù) 庫(kù)連接一樣,所以我們?nèi)绻阎荡娴竭@里那么肯定就能解決上面的問(wèn)題?

3) session對(duì)象的常用方法 :

4) 向session中保存數(shù)據(jù),在index.jsp頁(yè)面創(chuàng)建一個(gè)msg2 將其保存在session中

<% pageContext.setAttribute("msg", "Hello,PageContext!"); request.setAttribute("msg1", "Hello,Request!"); session.setAttribute("msg2", "Hello,Session!"); request.getRequestDispatcher("page1.jsp").forward(request, response);%>在page2.jsp獲取這幾個(gè)值,注意現(xiàn)在page1.jsp還是以重定向的方式向page2.jsp發(fā)起請(qǐng)求

page1.jsp

<% // request.getRequestDispatcher("page2.jsp").forward(request, response); response.sendRedirect("page2.jsp");%>page2.jsp

<div> <h1>${msg}</h1> <h1>${msg1}</h1> <h1>${msg2}</h1></div>效果

能到達(dá)page2的就只有session里保存的數(shù)據(jù)?但是需要注意一個(gè)問(wèn)題,session保存的數(shù)據(jù)也 是有作用范圍的,也就是說(shuō)它的數(shù)據(jù)作用做只能在本次瀏覽器的打開(kāi)與關(guān)閉之間,

比如我們?cè)俅蜷_(kāi)個(gè)網(wǎng)頁(yè),因?yàn)榇藭r(shí)第一個(gè)網(wǎng)頁(yè)已經(jīng)向session里保存了數(shù)據(jù),所以第二個(gè)網(wǎng)頁(yè)直 接訪問(wèn)page2.jsp依然能夠獲取信息?

但是如果瀏覽器關(guān)閉的話 你要是直接訪問(wèn)page2就什么也得不到了?

小結(jié) : 一般我們都會(huì)把自己的登錄信息保存在session中,這樣一次瀏覽器的打開(kāi)與關(guān)閉我們 就不用重復(fù)登錄了

5) 問(wèn)題引出 : 那么我們?cè)趺唇鉀Q打開(kāi)和關(guān)閉網(wǎng)頁(yè)都能訪問(wèn)數(shù)據(jù)的這種無(wú)(sang)與(xin)倫 (bing)比(kuang)的想法呢?




5.1.3 Application 對(duì)象

1) 概述 : application對(duì)象類似于系統(tǒng)的“全局變量”,在tomcat開(kāi)啟的時(shí)候,創(chuàng)建一個(gè)

application對(duì)象,然后整個(gè)項(xiàng)目不管打開(kāi)和關(guān)閉多少次都只有這一個(gè)對(duì)象

2) 常用方法:

3) 案例 :

通過(guò)application對(duì)象保存數(shù)據(jù)

index.jsp

<% pageContext.setAttribute("msg", "Hello,PageContext!"); request.setAttribute("msg1", "Hello,Request!"); session.setAttribute("msg2", "Hello,Session!"); application.setAttribute("msg3", "Hello,Application!"); request.getRequestDispatcher("page1.jsp").forward(request, response);%>page1.jsp

<% // request.getRequestDispatcher("page2.jsp").forward(request, response); response.sendRedirect("page2.jsp");%>page2.jsp

<div> <h1>${msg}</h1> <h1>${msg1}</h1> <h1>${msg2}</h1> <h1>${msg3}</h1></div>訪問(wèn)index.jsp 測(cè)試結(jié)果

關(guān)閉瀏覽器再訪問(wèn)page2.jsp 測(cè)試結(jié)果

小結(jié) : 我們可以使用application對(duì)象保存網(wǎng)站的登錄次數(shù),只要tomcat不重啟累計(jì)的登錄次數(shù) 都是有效的

5.1.5 內(nèi)置對(duì)象小結(jié)

內(nèi)置對(duì)象

作用域分類

說(shuō)明:

作用域之間的關(guān)系

問(wèn)題 : 如果關(guān)閉了tomcat 之后我還想獲取之前保存的信息那該怎么辦呢?

5.1.4 Cookie 對(duì)象

1) 概述 :

視頻網(wǎng)站查看觀看不同視頻,系統(tǒng)會(huì)自動(dòng)記錄已經(jīng)瀏覽過(guò)的視頻,歷史記錄 。

那么大家可以想一個(gè)問(wèn)題:網(wǎng)站用戶的瀏覽記錄是保存在哪里呢?

分析這波數(shù)據(jù)特點(diǎn) : 它不會(huì)隨著你瀏覽器打開(kāi)與關(guān)閉就沒(méi)有 也不會(huì)隨著你的tomcat開(kāi)啟與 關(guān)閉就清空.這個(gè)清空跟我們現(xiàn)在的需求特別吻合

那么這個(gè)數(shù)據(jù)應(yīng)該存在哪里呢?答案是存儲(chǔ)在cookie里的

概念 : cookie是Web服務(wù)器保存在客戶端的一系列文本信息

cookie的作用

對(duì)特定對(duì)象的追蹤

實(shí)現(xiàn)各種個(gè)性化服務(wù)

簡(jiǎn)化登錄

安全性能

容易泄露信息

也就是說(shuō)cookie是網(wǎng)站把一些信息保留在你本地的瀏覽器的一種操作,這樣不管服務(wù)器是否 關(guān)閉,只要你不手動(dòng)刪除cookie,cookie里的數(shù)據(jù)肯定都是有的

2) 語(yǔ)法結(jié)構(gòu):

根據(jù)語(yǔ)法規(guī)定,cookie中只能保存字符串,不能保存別的?

而且還需要說(shuō)明一點(diǎn)就是 cookie是脫離服務(wù)器管理的,所以一些敏感數(shù)據(jù)也不應(yīng)該放在 cookie里,如果真的想放也應(yīng)該是加密之后再放進(jìn)去

4) cookie對(duì)象的常用方法

3) 演示 :

index.jsp

<% pageContext.setAttribute("msg", "Hello,PageContext!"); request.setAttribute("msg1", "Hello,Request!"); session.setAttribute("msg2", "Hello,Session!"); application.setAttribute("msg3", "Hello,Application!"); Cookie c = new Cookie("msg4","Hello,Cookie!"); c.setMaxAge(3600); response.addCookie(c); request.getRequestDispatcher("page1.jsp").forward(request, response);%>此處注意設(shè)置cookie的有效期,如果不設(shè)置的話cookie瞬間就沒(méi)有了?

page1.jsp

<% // request.getRequestDispatcher("page2.jsp").forward(request, response); response.sendRedirect("page2.jsp");%>page2.jsp

<div> <% String val = ""; Cookie[] cookies = request.getCookies(); for(Cookie c : cookies){ if(c.getName().equals("msg4")){ val = c.getValue(); } } %> <h1>${msg}</h1> <h1>${msg1}</h1> <h1>${msg2}</h1> <h1>${msg3}</h1> <h1> <%=val %> </h1></div>訪問(wèn)效果 :

重啟tomcat:

注意此處我們?cè)O(shè)置了一個(gè)小時(shí)失效,所以在這一個(gè)小時(shí)的時(shí)間里,這個(gè)數(shù)據(jù)都會(huì)保存在cookie 中,不管服務(wù)器是否打開(kāi)與關(guān)閉,所以我們利用這個(gè)特性可以

做自動(dòng)登錄的效果

4) 總結(jié) : 面試的時(shí)候要注意對(duì)比session與cookie的區(qū)別









關(guān)鍵詞:對(duì)象,基礎(chǔ),作用,入門(mén),數(shù)據(jù),深入,動(dòng)態(tài)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉