request 請(qǐng)求對(duì)象 類(lèi)型 javax.servlet.ServletRequest 作用域 Request
response 響應(yīng)對(duì)象 類(lèi)型 javax.servlet.SrvletResponse 作用域 Page
pageContext 頁(yè)面上下文對(duì)象 類(lèi)型 javax.servlet.jsp.PageContext 作用域 Page
session 會(huì)話(huà)對(duì)象 類(lèi)型 javax.servlet.http.HttpSession 作用域 Session
application 應(yīng)用程序?qū)ο?nbsp; 類(lèi)型 javax.servlet.ServletContext 作用域 Application
out 輸出對(duì)象 類(lèi)型 javax.servlet.jsp.JspWriter 作用域 Page
config 配置對(duì)象 類(lèi)型 javax.servlet.ServletConfig 作用域 Page
page 頁(yè)面對(duì)象 類(lèi)型 javax.lang.Object 作用域 Page
exception 例外對(duì)象 類(lèi)型 javax.lang.Throwable 作用域 page
“exception” 對(duì)象則代表了JSP文件運(yùn)行時(shí)所產(chǎn)生的例外對(duì)象,此對(duì)象不能在一般JSP文件中直接使用,而只能在使用了“%@ page isErrorPage="true "%>”的JSP文件中使用。
何為作用域
先讓我們看看效果:
大概流程是這樣的,我們?cè)L問(wèn)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)閉瀏覽器,再次重啟瀏覽器訪(fǎng)問(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ì)話(huà)。
所謂當(dāng)前會(huì)話(huà),就是指從用戶(hù)打開(kāi)瀏覽器開(kāi)始,到用戶(hù)關(guān)閉瀏覽器這中間的過(guò)程。這個(gè)過(guò)程可能包含多個(gè)請(qǐng)求響應(yīng)。也就是說(shuō),只要用戶(hù)不關(guān)瀏覽器,服務(wù)器就有辦法知道這些請(qǐng)求是一個(gè)人發(fā)起的,整個(gè)過(guò)程被稱(chēng)為一個(gè)會(huì)話(huà)(session),而放到會(huì)話(huà)中的變量,就可以在當(dāng)前會(huì)話(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里的變量可以被所有用戶(hù)共用。如果用戶(hù)甲的操作修改了application中的變量,用戶(hù)乙訪(fǎng)問(wèn)時(shí)得到的是修改后的值。這在其他scope中都是不會(huì)發(fā)生的,page, request,session都是完全隔離的,無(wú)論如何修改都不會(huì)影響其他人的數(shù)據(jù)。
以上這篇淺談jsp九大內(nèi)置對(duì)象及四個(gè)作用域就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- JSP中九大內(nèi)置對(duì)象和四種屬性范圍詳解
- jsp內(nèi)置對(duì)象
- jsp的九大內(nèi)置對(duì)象深入講解