JSP九大內(nèi)置對(duì)象及四個(gè)作用域

轉(zhuǎn)載自:http://www.233.com/Java/jichu/20100329/091644792-3.html

九大對(duì)象:

內(nèi)置對(duì)象(又叫隱含對(duì)象死陆,有9個(gè)內(nèi)置對(duì)象):不需要預(yù)先聲明就可以在腳本代碼和表達(dá)式中隨意使用

1-out:

javax.servlet.jsp.JspWriter類型瑰排,代表輸出流的對(duì)象。作用域?yàn)閜age(頁(yè)面執(zhí)行期)

request:javax.servlet.ServletRequest的子類型炊昆,此對(duì)象封裝了由WEB瀏覽器或其它客戶端生成地HTTP

請(qǐng)求的細(xì)節(jié)(參數(shù),屬性,頭標(biāo)和數(shù)據(jù))官边。作用域?yàn)閞equest(用戶請(qǐng)求期)。

方法由可查看API

response:javax.servlet.ServletResponse的子類型外遇,此對(duì)象封裝了返回到HTTP客戶端的輸出注簿,向頁(yè)面作者提供設(shè)置響應(yīng)頭標(biāo)和狀態(tài)碼的方式。經(jīng)常用來(lái)設(shè)置HTTP標(biāo)題臀规,添加cookie滩援,設(shè)置響應(yīng)內(nèi)容的類型和狀態(tài),發(fā)送HTTP重定向和編碼URL塔嬉。作用域?yàn)閜age(頁(yè)面執(zhí)行期)玩徊。

pageContext:javax.servlet.jsp.PageContext(抽象類)類型,作用域?yàn)閜age(頁(yè)面執(zhí)行期)谨究。此對(duì)象提供所有四個(gè)作用域?qū)哟蔚膶傩圆樵兒托薷哪芰Χ鞲ぃ蔡峁┝宿D(zhuǎn)發(fā)請(qǐng)求到其它資源和包含其他資源的方法:

該對(duì)象的方法都是抽象方法

session:javax.servlet.http.HttpSession類型,主要用于跟蹤對(duì)話胶哲。作用域session(會(huì)話期—)畔塔。

HttpSession是一個(gè)類似哈希表的與單一WEB瀏覽器會(huì)話相關(guān)的對(duì)象,它存在于HTTP請(qǐng)求之間鸯屿,可以存儲(chǔ)任

何類型的命名對(duì)象澈吨。

如果不需要在請(qǐng)求之間跟蹤會(huì)話對(duì)象,可以通過(guò)在page指令中指定session="false"

需要記住的是pageContext對(duì)象也可以與session.getAttribute(),session.setAttribute()一樣的方式取得并設(shè)置會(huì)話屬性寄摆。

application:javax.servlet.ServletContext類型谅辣,servlet的環(huán)境通過(guò)調(diào)用getServletConfig

().getContext()方法獲得。作用域是application(整個(gè)程序運(yùn)行期)婶恼。它提供了關(guān)于服務(wù)器版本桑阶,應(yīng)用級(jí)初始化參數(shù)和應(yīng)用內(nèi)資源絕對(duì)路徑,注冊(cè)信息的方式

config:javax.servlet.ServletConfig,作用域?yàn)閜age(頁(yè)面執(zhí)行期)

exception:java.lang.Throwable,通過(guò)JSP錯(cuò)誤頁(yè)面中一個(gè)catch塊已經(jīng)益出但沒(méi)有捕獲的

java.lang.Throwable的任意實(shí)例勾邦,傳向了errorPage的URI蚣录。作用域?yàn)閜age(頁(yè)面執(zhí)行期)。注意

exception只有在page指令中具有屬性isErrorPage="true"時(shí)才有效眷篇。

page:java.lang.Object類型萎河,指向頁(yè)面自身的方式。作用域?yàn)閜age(頁(yè)面執(zhí)行期

JSP中九大內(nèi)置對(duì)象為:

request??????????? 請(qǐng)求對(duì)象 ??????????????? 類型 javax.servlet.ServletRequest??????? 作用域 Request

response????????? 響應(yīng)對(duì)象?????????????????? 類型 javax.servlet.SrvletResponse?????? 作用域? Page

pageContext??? 頁(yè)面上下文對(duì)象?????? 類型 javax.servlet.jsp.PageContext????? 作用域??? Page

session??????????? 會(huì)話對(duì)象?????????????????? 類型 javax.servlet.http.HttpSession?????? 作用域??? Session

application?????? 應(yīng)用程序?qū)ο????????? 類型 javax.servlet.ServletContext????????? 作用域??? Application

out?????????????????? 輸出對(duì)象?????????????????? 類型 javax.servlet.jsp.JspWriter???????????? 作用域??? Page

config????????????? 配置對(duì)象????????????????? 類型 javax.servlet.ServletConfig??????????? 作用域??? Page

page?????????????? 頁(yè)面對(duì)象????????????????? 類型 javax.lang.Object??????????????????????????? 作用域??? Page

exception??????? 例外對(duì)象???????????????? 類型 javax.lang.Throwable???????????????????? 作用域??? page

request 對(duì)象代表的是來(lái)自客戶端的請(qǐng)求,例如我們?cè)贔ORM表單中填寫(xiě)的信息等公壤,是最常用的對(duì)象常用的方法有:getParameter换可、getParameterNames 和getParameterValues 通過(guò)調(diào)用這幾個(gè)方法來(lái)獲取請(qǐng)求對(duì)象中所包含的參數(shù)的值。

response 對(duì)象代表的是對(duì)客戶端的響應(yīng)厦幅,也就是說(shuō)可以通過(guò)response 對(duì)象來(lái)組織發(fā)送到客戶端的數(shù)據(jù)沾鳄。但是由于組織方式比較底層,所以不建議普通讀者使用确憨,需要向客戶端發(fā)送文字時(shí)直接使用

pageContext 對(duì)象直譯時(shí)可以稱作“頁(yè)面上下文”對(duì)象译荞,代表的是當(dāng)前頁(yè)面運(yùn)行的一些屬性

常用的方法有 :findAttribute、getAttribute休弃、getAttributesScope 和getAttributeNamesInScope

一般情況下pageContext對(duì)象用到得也不是很多吞歼,只有在項(xiàng)目所面臨的情況比較復(fù)雜的情況下,才會(huì)利用到頁(yè)面屬性來(lái)輔助處理塔猾。

session??? 對(duì)象代表服務(wù)器與客戶端所建立的會(huì)話篙骡,當(dāng)需要在不同的JSP頁(yè)面中保留客戶信息的情況下使用,比如在線購(gòu)物丈甸、客戶軌跡跟蹤等糯俗。“session” 對(duì)象建立在cookie的基礎(chǔ)上睦擂,所以使用時(shí)應(yīng)注意判斷一下客戶端是否打開(kāi)了cookie得湘。常用的方法包括getId、 getValue顿仇、 getValueNames和putValue等淘正。

概要

HTTP是無(wú)狀態(tài)(stateless)協(xié)議;

Web Server 對(duì)每一個(gè)客戶端請(qǐng)求都沒(méi)有歷史記憶臼闻;

Session用來(lái)保存客戶端狀態(tài)信息鸿吆;

由Web Server 寫(xiě)入;

存于客戶端述呐;

客戶端的每次訪問(wèn)都把上次的session記錄傳遞給Web Server伞剑;

Web Server讀取客戶端提交的session來(lái)獲取客戶端的狀態(tài)信息

application 對(duì)象負(fù)責(zé)提供應(yīng)用程序在服務(wù)器中運(yùn)行時(shí)的一些全局信息,常用的方法有g(shù)etMimeType和getRealPath等市埋。

out 對(duì)象代表了向客戶端發(fā)送數(shù)據(jù)的對(duì)象,與“response” 對(duì)象不同恕刘,通過(guò)“out” 對(duì)象發(fā)送的內(nèi)容將是瀏覽器需要顯示的內(nèi)容缤谎,是文本一級(jí)的,可以通過(guò)“out” 對(duì)象直接向客戶端寫(xiě)一個(gè)由程序動(dòng)態(tài)生成HTML文件褐着。常用的方法除了pirnt和println之外坷澡,還包括clear、clearBuffer含蓉、 flush频敛、getBufferSize和getRemaining项郊,這是因?yàn)椤皁ut” 對(duì)象內(nèi)部包含了一個(gè)緩沖區(qū),所以需要一些對(duì)緩沖區(qū)進(jìn)行操作的方法

“config” 對(duì)象提供一些配置信息斟赚,常用的方法有g(shù)etInitParameter和getInitParameterNames着降,以獲得Servlet初始化時(shí)的參數(shù)。

“page” 對(duì)象代表了正在運(yùn)行的由JSP文件產(chǎn)生的類對(duì)象拗军,不建議一般讀者使用任洞。

“exception” 對(duì)象則代表了JSP文件運(yùn)行時(shí)所產(chǎn)生的例外對(duì)象,此對(duì)象不能在一般JSP文件中直接使用发侵,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用四個(gè)作用域:

何為作用域

先讓我們看看效果:

大概流程是這樣的交掏,我們?cè)L問(wèn)04-01/index.jsp的時(shí)候,分別對(duì)pageContext, request, session,

application四個(gè)作用域中的變量進(jìn)行累加刃鳄。(當(dāng)然先判斷這個(gè)變量是不是存在盅弛,如果變量不存在,則要把變量初始化成1叔锐。)計(jì)算完成后就從index.jsp執(zhí)行forward跳轉(zhuǎn)到test.jsp挪鹏。在test.jsp里再進(jìn)行一次累加,然后顯示出這四個(gè)整數(shù)來(lái)掌腰。

從顯示的結(jié)果來(lái)看狰住,我們可以直觀的得出結(jié)論:

page里的變量沒(méi)法從index.jsp傳遞到test.jsp。只要頁(yè)面跳轉(zhuǎn)了齿梁,它們就不見(jiàn)了催植。

request里的變量可以跨越forward前后的兩頁(yè)。但是只要刷新頁(yè)面勺择,它們就重新計(jì)算了创南。

session和application里的變量一直在累加,開(kāi)始還看不出區(qū)別省核,只要關(guān)閉瀏覽器稿辙,再次重啟瀏覽器訪問(wèn)這頁(yè),session里的變量就重新計(jì)算了气忠。

application里的變量一直在累加邻储,除非你重啟tomcat,否則它會(huì)一直變大旧噪。

而作用域規(guī)定的是變量的有效期限吨娜。

如果把變量放到pageContext里,就說(shuō)明它的作用域是page淘钟,它的有效范圍只在當(dāng)前jsp頁(yè)面里宦赠。

從把變量放到pageContext開(kāi)始,到j(luò)sp頁(yè)面結(jié)束,你都可以使用這個(gè)變量勾扭。

如果把變量放到request里毡琉,就說(shuō)明它的作用域是request,它的有效范圍是當(dāng)前請(qǐng)求周期妙色。

所謂請(qǐng)求周期桅滋,就是指從http請(qǐng)求發(fā)起,到服務(wù)器處理結(jié)束燎斩,返回響應(yīng)的整個(gè)過(guò)程虱歪。在這個(gè)過(guò)程中可能使用forward的方式跳轉(zhuǎn)了多個(gè)jsp頁(yè)面,在這些頁(yè)面里你都可以使用這個(gè)變量栅表。

如果把變量放到session里笋鄙,就說(shuō)明它的作用域是session,它的有效范圍是當(dāng)前會(huì)話怪瓶。

所謂當(dāng)前會(huì)話萧落,就是指從用戶打開(kāi)瀏覽器開(kāi)始,到用戶關(guān)閉瀏覽器這中間的過(guò)程洗贰。這個(gè)過(guò)程可能包含多個(gè)請(qǐng)求響應(yīng)找岖。也就是說(shuō),只要用戶不關(guān)瀏覽器敛滋,服務(wù)器就有辦法知道這些請(qǐng)求是一個(gè)人發(fā)起的许布,整個(gè)過(guò)程被稱為一個(gè)會(huì)話(session),而放到會(huì)話中的變量绎晃,就可以在當(dāng)前會(huì)話的所有請(qǐng)求里使用蜜唾。

如果把變量放到application里,就說(shuō)明它的作用域是application庶艾,它的有效范圍是整個(gè)應(yīng)用袁余。

整個(gè)應(yīng)用是指從應(yīng)用啟動(dòng),到應(yīng)用結(jié)束咱揍。我們沒(méi)有說(shuō)“從服務(wù)器啟動(dòng)颖榜,到服務(wù)器關(guān)閉”,是因?yàn)橐粋€(gè)服務(wù)器可能部署多個(gè)應(yīng)用煤裙,當(dāng)然你關(guān)閉了服務(wù)器掩完,就會(huì)把上面所有的應(yīng)用都關(guān)閉了。

application作用域里的變量硼砰,它們的存活時(shí)間是最長(zhǎng)的藤为,如果不進(jìn)行手工刪除,它們就一直可以使用夺刑。

與上述三個(gè)不同的是,application里的變量可以被所有用戶共用。如果用戶甲的操作修改了application中的變量遍愿,用戶乙訪問(wèn)時(shí)得到的是修改后的值存淫。這在其他scope中都是不會(huì)發(fā)生的,page, request,session都是完全隔離的沼填,無(wú)論如何修改都不會(huì)影響其他人的數(shù)據(jù)桅咆。

我們使用public Object getAttribute(String name)獲得變量值,使用public void setAttribute(String name, Object value)將變量值保存到對(duì)應(yīng)作用域中坞笙。舉個(gè)pageContext的例子就是:

// page

Integer countPage = (Integer) pageContext.getAttribute("countPage");

if (countPage == null) {

pageContext.setAttribute("countPage", 1);

} else {

pageContext.setAttribute("countPage", countPage + 1);

}

這里先從pageContext中取出名為countPage的整數(shù)岩饼,因?yàn)榉祷氐亩际莏ava.lang.Object類型,所以需要強(qiáng)制轉(zhuǎn)換成我們需要的整形薛夜。這里取得的變量如果不存在就會(huì)返回null籍茧,通過(guò)判斷countPage == null來(lái)辨別變量是否存在,如果不存在就設(shè)置為1梯澜,如果存在就進(jìn)行累加寞冯,最后使用setAttribute()方法將修改后的變量值放入pageContext。

將其中的pageContext換成request, session, application就可以操作其他三個(gè)作用域中的變量晚伙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吮龄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子咆疗,更是在濱河造成了極大的恐慌漓帚,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,332評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件午磁,死亡現(xiàn)場(chǎng)離奇詭異尝抖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)漓踢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)牵署,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人喧半,你說(shuō)我怎么就攤上這事奴迅。” “怎么了挺据?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,812評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵取具,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我扁耐,道長(zhǎng)暇检,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,607評(píng)論 1 284
  • 正文 為了忘掉前任婉称,我火速辦了婚禮块仆,結(jié)果婚禮上构蹬,老公的妹妹穿的比我還像新娘。我一直安慰自己悔据,他們只是感情好庄敛,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,728評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著科汗,像睡著了一般藻烤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上头滔,一...
    開(kāi)封第一講書(shū)人閱讀 49,919評(píng)論 1 290
  • 那天怖亭,我揣著相機(jī)與錄音,去河邊找鬼坤检。 笑死兴猩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缀蹄。 我是一名探鬼主播峭跳,決...
    沈念sama閱讀 39,071評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缺前!你這毒婦竟也來(lái)了蛀醉?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,802評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤衅码,失蹤者是張志新(化名)和其女友劉穎拯刁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體逝段,經(jīng)...
    沈念sama閱讀 44,256評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垛玻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,576評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奶躯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帚桩。...
    茶點(diǎn)故事閱讀 38,712評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嘹黔,靈堂內(nèi)的尸體忽然破棺而出账嚎,到底是詐尸還是另有隱情,我是刑警寧澤儡蔓,帶...
    沈念sama閱讀 34,389評(píng)論 4 332
  • 正文 年R本政府宣布郭蕉,位于F島的核電站,受9級(jí)特大地震影響喂江,放射性物質(zhì)發(fā)生泄漏召锈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,032評(píng)論 3 316
  • 文/蒙蒙 一获询、第九天 我趴在偏房一處隱蔽的房頂上張望涨岁。 院中可真熱鬧拐袜,春花似錦、人聲如沸梢薪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沮尿。三九已至,卻和暖如春较解,著一層夾襖步出監(jiān)牢的瞬間畜疾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工印衔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啡捶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,473評(píng)論 2 360
  • 正文 我出身青樓奸焙,卻偏偏與公主長(zhǎng)得像瞎暑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子与帆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,606評(píng)論 2 350

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

  • 九大對(duì)象:request了赌、response、out玄糟、session勿她、application、pageContext...
    小沙鷹168閱讀 449評(píng)論 0 0
  • 九大對(duì)象: 內(nèi)置對(duì)象(又叫隱含對(duì)象阵翎,有9個(gè)內(nèi)置對(duì)象):不需要預(yù)先聲明就可以在腳本代碼和表達(dá)式中隨意使用 1-out...
    李honghai閱讀 2,231評(píng)論 0 1
  • 一逢并、JSP內(nèi)置對(duì)象簡(jiǎn)介 JSP內(nèi)置對(duì)象是Web容器創(chuàng)建的一組對(duì)象,不使用new關(guān)鍵字就可以使用的內(nèi)置對(duì)象郭卫。開(kāi)發(fā)者可...
    年少懵懂丶流年夢(mèng)閱讀 3,714評(píng)論 0 8
  • 1.學(xué)習(xí)內(nèi)容 JSP技術(shù)入門(mén)和常用指令 JSP的內(nèi)置對(duì)象&標(biāo)簽介紹 EL表達(dá)式&EL的內(nèi)置對(duì)象 2.JSP技術(shù)入門(mén)...
    WendyVIV閱讀 2,128評(píng)論 1 18
  • 其實(shí)砍聊,現(xiàn)在,也挺好的贰军。 每個(gè)人都有輕度抑郁玻蝌,而我現(xiàn)在也是,或者谓形,一直都是灶伊。我不知道自己什么時(shí)候可以走出來(lái),可能把自...
    一加一不等于2閱讀 183評(píng)論 0 0