您好,登錄后才能下訂單哦!
小編給大家分享一下jsp的四大作用域有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
首先要聲明一點(diǎn),所謂“作用域”就是“信息共享的范圍”,也就是說一個(gè)信息能夠在多大的范圍內(nèi)有效。4個(gè)JSP內(nèi)置對(duì)象的作用域分別為:application、session、request、page 。
推薦課程:Java教程。
application 作用域
如果把變量放到application里,就說明它的作用域是application,它的有效范圍是整個(gè)應(yīng)用。整個(gè)應(yīng)用是指從應(yīng)用啟動(dòng),到應(yīng)用結(jié)束。我們沒有說“從服務(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í)間是最長的,如果不進(jìn)行手工刪除,它們就一直可以使用。
Object getAttribute(String name) //從application中獲取信息;
void setAttribute(String name,Object value) //向application作用域中設(shè)置信息。
session作用域
如果把變量放到session里,就說明它的作用域是session,它的有效范圍是當(dāng)前會(huì)話。所謂當(dāng)前會(huì)話,就是指從用戶打開瀏覽器開始,到用戶關(guān)閉瀏覽器這中間的過程。
Object HttpSession.getAttribute(String name) //從session中獲取信息。
void HttpSession.setAttribute(String name,Object value)//向session中保存信息。
HttpSessionHttpServletRequest.getSessio() //獲取當(dāng)前請(qǐng)求所在的session的對(duì)象。
session從瀏覽器發(fā)出第一個(gè)HTTP請(qǐng)求即可認(rèn)為會(huì)話開始。但結(jié)束就不好判斷了,因?yàn)闉g覽器關(guān)閉時(shí)并不會(huì)通知服務(wù)器,所以只能通過如下這種方法判斷:如果一定的時(shí)間內(nèi)客戶端沒有反應(yīng),則認(rèn)為會(huì)話結(jié)束。Tomcat的默認(rèn)值為120分鐘,但這個(gè)值也可以通過HttpSession的setMaxInactiveInterval()方法來設(shè)置:
void setMaxInactiveInterval(int interval)
如果想主動(dòng)讓會(huì)話結(jié)束,例如用戶單擊“注銷”按鈕的時(shí)候,可以使用 HttpSession 的 invalidate()方法,用于強(qiáng)制結(jié)束當(dāng)前session:void invalidate()
Session刪除的時(shí)間是:
1) Session超時(shí):超時(shí)指的是連續(xù)一定時(shí)間服務(wù)器沒有收到該Session所對(duì)應(yīng)客戶端的請(qǐng)求,并且這個(gè)時(shí)間超過了服務(wù)器設(shè)置的Session超時(shí)的最大時(shí)間。
2) 程序調(diào)用HttpSession.invalidate()
3) 服務(wù)器關(guān)閉或服務(wù)停止
注意:
1) 訪問*.html的靜態(tài)資源因?yàn)椴粫?huì)被編譯為Servlet,也就不涉及session的問題。
2) 當(dāng)JSP頁面沒有顯式禁止session的時(shí)候,在打開瀏覽器第一次請(qǐng)求該jsp的時(shí)候,服務(wù)器會(huì)自動(dòng)為其創(chuàng)建一個(gè)session,并賦予其一個(gè)sessionID,發(fā)送給客戶端的瀏覽器。
3) 由于session會(huì)消耗內(nèi)存資源,因此,如果不打算使用session,應(yīng)該在所有的JSP中關(guān)閉它。
4) session不會(huì)應(yīng)該瀏覽器的關(guān)閉而刪除,只能通過以上三種方式刪除。
session存放在哪里?-----------服務(wù)器端的內(nèi)存中。
Request作用域
request里的變量可以跨越forward前后的兩頁。但是只要刷新頁面,它們就重新計(jì)算了。
請(qǐng)求轉(zhuǎn)發(fā):servlet. getRequestDispatcher("new.jsp").forward(req,resp);
注意:
1、轉(zhuǎn)發(fā)是服務(wù)器行為,而重定向是客戶端行為。
2、無論在服務(wù)器上如何轉(zhuǎn)發(fā),瀏覽器地址欄中顯示的仍然是最初那個(gè)Servlet的地址。
page作用域
page對(duì)象的作用范圍僅限于用戶請(qǐng)求的當(dāng)前頁面
request和page的生命周期都是短暫的,它們之間的區(qū)別:一個(gè)request可以包含多個(gè)page頁(include,forward及filter)。
以上是jsp的四大作用域有哪些的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。