內置對象和屬性范圍
四種屬性范圍
九個內置對象
1.內置對象
如果說想要使用一個對象,必須new 出來,但是在我們的jsp操作中,發現我們使用過的out,request對象沒有進行實例化,類似于這樣的對象,我們叫做jsp的內置對象,也就是收不需要實例化的對象,總共有9個。
序號
對象
類型
1
pageContext
javax.servlet.jsp.PageContext
2
request
javax.servlet.http.HttpServletRequest
3
response
javax.servlet.http.HttpServletResponse
4
session
javax.servlet.http.HttpSession
5
application
javax.servlet.ServletContext
6
config
javax.servlet.ServletConfig
7
out
javax.servlet.jsp.jspWriter
8
page
java.lang.Object
9
exception
java.lang.Throwable
2.屬性范圍
在jsp中,有四種屬性范圍,所謂屬性范圍,就是指在一個jsp中設置了屬性,是否可以在其他頁面能夠訪問。四種屬性范圍分別指的是以下的四種:
·屬性范圍在當前頁面有效:設置了一個屬性,在設置屬性的頁面可以取得屬性,跳轉到其他頁面則無法取得設置的屬性
·屬性范圍在服務端跳轉范圍內有效:一個頁面設置了屬性,然后經過服務端跳轉(n次),依然可以取得設置的屬性
·屬性范圍在一次會話中有效:一個頁面設置屬性,無論是經過服務端還是客戶端跳轉,只要瀏覽器不重啟,設置的屬性都可以取得。
·屬性范圍在服務器上下文中有效:頁面設置的屬性,無論是經過客戶端還是服務端跳轉,無論是哪一個會話,只要服務器不重啟,設置的屬性都可以訪問。
NO
方法
描述
1
public void setAttribute(String name,Object val)
設置屬性
2
pulblic Object getAttribute(String name)
取得屬性
3
public void removeAttribute(String? name)
刪除屬性
2.1page屬性范圍
page屬性范圍也就是我們上面所提到的第一種屬性范圍,使用的是pageContext這個內置對象設置和取得的,指的是在一個頁面使用pageContext設置了屬性之后,本頁面可以通過pageContext取得設置的屬性,跳轉到其他頁面之后無法取得設置的屬性。要注意的一點,所謂的page屬性范圍使用的是pageContext這個內置對象設置和取得的。
//設置屬性
pageContext.setAttribute("company","廈門");
pageContext.setAttribute("address","廈門市");
pageContext.setAttribute("tel","0592-2565166");%>
如果現在我們通過服務端跳轉,看能不能取得設置的屬性
這是pageAttributeDemo02.jsp
發現我們通過服務端跳轉后取不到之前設置的page范圍的屬性了,如果說想要通過服務端跳轉后也能取得設置的屬性,我們必須使用第二種屬性范圍。
2.2request屬性范圍
request屬性范圍,是第二種屬性范圍,也就是說設置的屬性在當前頁面可以取得,通過服務端跳轉之后也可以取得設置的屬性。
//設置屬性
request.setAttribute("company","廈門");
request.setAttribute("address","廈門市");
request.setAttribute("tel","0592-2565166");%>
這是pageAttributeDemo02.jsp
通過
//設置屬性
request.setAttribute("company","廈門");
request.setAttribute("address","廈門");
request.setAttribute("tel","0592-2565166");%>
現在,我們發現,request范圍屬性經過多次跳轉之后,依然可以取得設置的屬性,那么現在如果經過客戶端跳轉呢?
//設置屬性
request.setAttribute("company","廈門");
request.setAttribute("address","廈門");
request.setAttribute("tel","0592-2565166");%>
客戶端跳轉
這是requestAttributeDemo03.jsp
通過程序運行結果發現,通過客戶端跳轉不能夠取得設置的request范圍的屬性,那么如果現在我就想要通過客戶端取得設置的屬性呢?那么我們可以使用第三種范圍屬性。
3.session
session屬性范圍就是我們第三種屬性范圍,也就是之前提到過的,屬性范圍在一次會話中有效。是無論經過客戶端還是服務端跳轉,都可以取得設置的屬性,當然前提是瀏覽器不能重啟。
//設置屬性
session.setAttribute("company","廈門");
session.setAttribute("address","廈門");
session.setAttribute("tel","0592-2565166");%>
客戶端跳轉
02
03
以上的程序說明我們session范圍的屬性,在經過客戶端或者服務端跳轉之后,設置的屬性依然可以取得。現在我們來重啟一下瀏覽器:通過操作發現,重啟瀏覽器之后,取不到設置的session范圍屬性了,那么如果現在想要在瀏覽器重啟后取得設置的屬性,我們必須使用第四種屬性范圍。
4.application屬性范圍
application范圍屬性就是第四種范圍屬性,屬性是設置在服務器的上下文中,只要服務器不重啟,那么設置的屬性統統都可以取得。無論是經過客戶端你還是服務端還是瀏覽器重啟,都可取得設置的屬性。
//設置屬性
application.setAttribute("company","廈門");
application.setAttribute("address","廈門");
application.setAttribute("tel","0592-2565166");%>
客戶端跳轉
03
設置的application范圍的屬性,無論是通過客戶端還是服務端或者瀏覽器重啟,都可以取得設置的屬性。那么現在如果服務器重啟呢?通過操作發現,重啟服務器后,之前設置的屬性取不到了,那么如果想要在重啟服務器后取得設置的屬性呢?那是沒有辦法的。
3.屬性范圍使用說明
在開發中,我們常用的屬性范圍就是request和session范圍,那么在開發中,怎么區分使用二者呢?一般來說,只對于同一個功能的屬性的傳遞,使用request范圍屬性。那么對于session范圍來說,主要還是用于登陸上面。
4.關于pageContext屬性的進一步說明
上面我們講解的是四種屬性范圍,實際上四種屬性范圍都是通過pageContext設置的,在pageContext中,setAttribute()方式實際上被重載過:
·設置屬性:
·public abstract void setAttribute(java.lang.String name,? java.lang.Object value)
·public abstract void setAttribute(java.lang.String name,
java.lang.Object value,
int scope)
對于這兩個方法,第一個方法是我們之前一直在使用的,對于第二個方法,相比第一個方法多了一個參數(int scope),實際上這個參數就是指定屬性范圍的參數:
·APPLICATION_SCOPE
·PAGE_SCOPE
·SESSION_SCOPE
·REQUEST_SCOPE
也就是說,通過這個方法,我們可以設置四種屬性范圍。
跳轉
02
總結,知道九個內置對象(pageContext,session,request,response,applicatino,config,page,exception),充分掌握四種屬性范圍(page僅對于自己的頁面傳值;request應用于服務端傳值,但是客戶端跳轉不能傳值;session一般應該于用戶的登錄注冊保存在一次會話中,會話結束,屬性值消失;application屬性范圍應用于整個服務器中,服務器關閉屬性值消失。