1. 程式人生 > >java中jsp的九大隱式對象及web四大域

java中jsp的九大隱式對象及web四大域

會銷 時間 同時 調用 宋體 clas 開始 類加載 相對路徑

JSP運行原理和九大隱式對象

每個JSP 頁面在第一次被訪問時,WEB容器都會把請求交給JSP引擎(即一個Java程序)去處理。JSP引擎先將JSP翻譯成一個_jspServlet(實質上也是一個servlet) ,然後按照servlet的調用方式進行調用。

由於JSP第一次訪問時會翻譯成servlet,所以第一次訪問通常會比較慢,但第二次訪問,JSP引擎如果發現JSP沒有變化,就不再翻譯,而是直接調用,所以程序的執行效率不會受到影響。

JSP引擎在調用JSP對應的_jspServlet時,會傳遞或創建9個與web開發相關的對象供_jspServlet使用JSP技術的設計者為便於開發人員在編寫

JSP頁面時獲得這些web對象的引用,特意定義了9個相應的變量,開發人員在JSP頁面中通過這些變量就可以快速獲得這9大對象的引用

9個對象分別是哪些,以及作用也是筆試經常考察的知識點。

Jsp九大隱式對象

request //代表request對象

response //代表response對象

config //代表servletConfig對象

application //代表servletContext對象

exception

Session

page

out //代表response.getWriter() ,字符輸出流對象

pageContext

pageContext對象

pageContext對象是JSP技術中最重要的一個對象,它代表JSP頁面的運行環境.

這個對象不僅封裝了對其它8大隱式對象的引用,

它自身還是一個域對象,可以用來保存數據。

並且,這個對象還封裝了web開發中經常涉及到的一些常用操作,例如引入和跳轉其它資源、檢索其它域對象中的屬性等。

通過pageContext獲得其他對象

getException方法返回exception隱式對象

getPage方法返回page隱式對象

getRequest方法返回request隱式對象

getResponse方法返回response隱式對象

getServletConfig方法返回

config隱式對象

getServletContext方法返回application隱式對象

getSession方法返回session隱式對象

getOut方法返回out隱式對象

pageContext封裝其它8大內置對象的意義,思考:如果在編程過程中,把pageContext對象傳遞給一個普通java對象,那麽這個java對象將具有什麽功能?

pageContext作為域對象

pageContext對象的方法

public void setAttribute(java.lang.String name,java.lang.Object value)

public java.lang.Object getAttribute(java.lang.String name)

public void removeAttribute(java.lang.String name)

pageContext對象中還封裝了訪問其它域的方法

public java.lang.Object getAttribute(java.lang.String name,int scope)

public void setAttribute(java.lang.String name, java.lang.Object value,int scope)

public void removeAttribute(java.lang.String name,int scope)

代表各個域的常量

PageContext.APPLICATION_SCOPE

PageContext.SESSION_SCOPE

PageContext.REQUEST_SCOPE

PageContext.PAGE_SCOPE

JAVAWEB的四大域對象

四個域對象分別為PageContext requestsessionservletContext,範圍從小到大。

一、ServletContext

1、生命周期:當Web應用被加載進容器時創建代表整個web應用的ServletContext對象,當服務器關閉或Web應用被移除時,ServletContext對象跟著銷毀。

2、作用範圍:整個Web應用。

3、作用:

a) 在不同Servlet 之間轉發

this.getServletContext().getRequestDispatcher("/servlet/Demo10Servlet").forward(request,response);

方法執行結束,service就會返回到服務器,再有服務器去調用目標servlet,其中request會重新創建,並將之前的request的數據拷貝進去。

b) 讀取資源文件。

1、由於相對路徑默認相對的是java虛擬機啟動的目錄,所以我們直接寫相對路徑將會是相對於tomcat/bin目錄,所以是拿不到資源的。

如果寫成絕對路徑,當項目發布到其他環境時,絕對路徑就錯了。

2、為了解決這個問題ServletContext提供了:

this.getServletContext().getRealPath(“/1.properties”),給進一個資源的虛擬路徑,將會返回該資源在當前環境下的真實路徑。

this.getServletContext().getResourceAsStream(“/1.properties”),給一個資源的虛擬路徑返回到該資源真實路徑的流。

3、當在非servlet下獲取資源文件時,就沒有ServletContext對象用了,此時只能用類加載器

classLoader.getResourceAsStream(“../../1.properties”),此方法利用類加載器直接將資源加載到內存中,有更新延遲的問題,

以及如果文件太大,占用內存過大。

classLoader.getResource(“../1.properties”).getPath(),直接返回資源的真實路徑,沒有更新延遲的問題。

二、Request

1、生命周期:在service 方法調用前由服務器創建,傳入service方法。整個請求結束,request生命結束。

2、作用範圍:整個請求鏈(請求轉發也存在)。

3、作用: 在整個請求鏈中共享數據。最常用到:在Servlet 中處理好的數據交給Jsp顯示,此時參數就可以放置在Request域中帶過去。

三、Session

HttpSession 在服務器中,為瀏覽器創建獨一無二的內存空間,在其中保存會話相關的信息。

1、生命周期:在第一次調用 request.getSession() 方法時,服務器會檢查是否已經有對應的session,如果沒有就在內存 中創建一個session並返回。

當一段時間內session沒有被使用(默認為30分鐘),則服務器會銷毀該session

如果服務器非正常關閉(強行關閉),沒有到期的session也會跟著銷毀。

如果調用session提供的invalidate(),可以立即銷毀session

註意:服務器正常關閉,再啟動,Session對象會進行鈍化和活化操作。同時如果服務器鈍化的時間在session 默認銷毀時間之內,則活化後session還是存在的。否則Session不存在。如果JavaBean 數據在session鈍化時,沒有實現Serializable 則當Session活化時,會消失。

2、作用範圍:一次會話。

四、PageContext

1、生命周期:當對JSP的請求時開始,當響應結束時銷毀。

2、作用範圍:整個JSP頁面,是四大作用域中最小的一個,即超過這個頁面就不能夠使用了。(所以使用pageContext對象向其它頁面傳遞參數是不可能的.)

作用:

1)獲取其它八大隱式對象,可以認為是一個入口對象。

2)獲取其所有域中的數據

pageContext 操作所有域中屬性的方法

public java.lang.Object getAttribute(java.lang.String name,intscope)

public void setAttribute(java.lang.String name, java.lang.Objectvalue,int scope)

public void removeAttribute(java.lang.String name,int scope)

pageContext 中代表域的常量

PageContext.APPLICATION_SCOPE

PageContext.SESSION_SCOPE

PageContext.REQUEST_SCOPE

PageContext.PAGE_SCOPE

findAttribute方法,在四大域中搜尋屬性,搜尋的順序是page域、request域、session域、application域,

從小域到大域開始搜索,如果搜索到就直接獲取該值,如果所有域中都找不到,返回一個null(el表達式不同,此處返回null,對網頁是不友好的)

3)跳轉到其他資源,其身上提供了forwardinclude方法,簡化重定向和轉發的操作

java中jsp的九大隱式對象及web四大域