首先說5個對象 pageContext對象那個– jsp上下文 request對象 response對象 session對象 application對象
首先確定一點,這些對象應該都是在tomcat服務器里面保存的!
java里面一切都是對象,服務器開始運行的時候,就會產生application對象,至于這個對象是什么樣子的,有什么屬性,我們先不管,反正這個對象那個就是保存了服務器的一些信息,對所有用戶都是一樣的 好了,接下來,由用戶a開始上網,訪問了服務器,a用戶就有了一個session對象,這個對象是什么我也不管,反正就是描述用戶信息的,如果用戶b也開始上網,那么b也有一個session對象
用戶訪問某個資源,在url里面輸入地址,就會產生一個request對象,同時tomcat就會產生一個response對象,用于給用戶反饋
有時候就是要這么樣理順一下思路 上面的東西理解了,再來說4種屬性范圍 page request session application 是不是特別容易混淆?沒錯,jsp的基礎感覺就是這么操蛋,如果不理清楚思路的話,屬性范圍和對象真是一頭霧水。。。
我們首先要搞清楚這個屬性是個什么東西,他有什么用? 設置屬性是通過對象的方法來設置的 pageContext.setAttribute request.setAttriubte session.setAttribute application.setAttribute 所以這些個屬性肯定是4種對象里面的私有成員變量,通過方法操作的他們,然后這個屬性又是以鍵值對的形式存在的,所以很明顯,在request,session,application,page,肯定存在用于存放屬性的Map鍵值對成員變量
就像這樣
PRivate Map<String,String> attribute;public setAttribute(String name,Object value){..}public getAttribute(String name){..}我沒有看源碼,肯定和這個差不多。。 好了搞清楚屬性是什么東西了,那么屬性有什么作用呢? 因為屬性都是保存在對象里面的,所以屬性的作用就是—》 我們可以往page對象,request對象,session對象,application對象里面寫東西啊!!!保存在不同對象里面的屬性就是不同的屬性范圍 具體的作用呢,page對象里面的屬性可以用來記錄page文檔的信息 request對象里面的屬性可以在服務器端跳轉的時候共享參數 session對象里面的屬性可以判斷用戶信息 application對象里面的屬性可以取得虛擬目錄的物理路徑,虛擬目錄就是那個”/”
之前我還非常疑惑,既然有屬性范圍這么一說,那么四個對象分別是屬于什么屬性范圍呢?現在思路理清楚了,這個問題也就好回答了
屬性范圍是針對鍵值對存放在哪個對象里面來區分的,不應該說對象是屬于哪個屬性范圍,應該這么說,
一個pageContext對象就是一個page屬性范圍 一個request對象就是一個request屬性范圍, 一個application對象就是一個applicaiton屬性范圍, 一個session對象就是一個session屬性范圍
好像還多了一個response對象,好了,其實我們不需要給每個對象都設置屬性范圍,所以response對象就沒有對應的了
后來看到了pageContext這個setAttribute(String name,Object value,int scope)方法有些疑惑,這個方法可以通過制定scope設置4種屬性范圍的屬性,我又奇怪了,這個屬性范圍到底是存放在pageContext對象里面的呢,還是分別存放在不同對象里面的呢?但前面我的理解有一點肯定沒錯,就是屬性肯定是存放在對象里面的。
由于看不到源碼,只看得到接口,我就索性猜測一下吧,在pageContext里面設置屬性應該是調用其他對象的設置屬性的方法,
也可以其他對象通過調用pageContext的方法,那么所有對象都是存放在pageContext里面的咯。。既然這樣,pageContext里面就應該是定義了四個Map鍵值對,分別存放不同的屬性范圍,嗯。。。
好吧,這個問題到此為止,具體是怎么樣的也不重要,只要記住一點 屬性是鍵值對,是存放在對象里面的
新聞熱點
疑難解答