JSP中9大內置對象詳解

        爲了簡化Web應用程序的開發,在JSP中定義了一些由JSP容器實現和管理的內置對象,這些對象可以直接在JSP頁面中使用,不需要頁面編寫者對它們進行實例化。

       JSP2.0規範中定義了9種內置對象,這9個內置對象都是由Servlet API接口實現的,由JSP規範對他們進行了默認初始化,因此,在JSP中他們已經是對象了,可以直接拿來用。這9中內置對象的名稱、相對應的類和作用域如下表所示。

      

        JSP中4種屬性的作用範圍說明如下:

  • page範圍:指所設置的屬性僅在當前頁面內有效。使用pageContext的SetAttribute()方法可以設置屬性值,使用pageContext的getAttribute()方法可以獲得屬性值。
  • request範圍:指屬性僅在一次請求的範圍內有效。使用request的setAttribute()方法可以設置屬性值,使用request的getAttribute()方法可以獲得屬性值。
  • session範圍:指的是屬性僅在瀏覽器與服務器進行一次會話的範圍內有效,當和服務器斷開連接後,屬性就會失效。使用session的setAttribute()方法可以設置屬性值,使用session的getAttribute()方法可以獲得屬性的值。
  • application範圍:指屬性在整個Web應用中都有效,直到服務器停止以後才失效。使用application的setAttribute()方法可以設置屬性值,使用application的getAttribute()方法可以獲得屬性的值。

        request對象

        request對象用於獲取客戶端信息,例如我們在表單中填寫的信息等。實際上,JSP容器會將客戶端請求信息封裝在request對象中。在客戶端發出請求時會創建reqnest對象,在請求結束後,則會銷燬request對象。

        request對象中包含的主要方法如下:

  • Object getAttribute(String name):獲取指定的屬性值。
  • void setAttribute(String name, Object value):將指定的屬性的值設置爲value。
  • String getParameter(String name):獲取請求參數名爲name的參數值。
  • Enumeration getParameterName():獲取所有請求參數的名字集合。
  • String[] getParameterValues(String name):獲得name請求參數的參數值。
  • Map getParameterMap():獲取所有請求參數名和請求參數值所組成的Map對象。
  • void setCharacterEncoding(String encoding):設定編碼格式。

        通常在應用中設置最多的就是客戶端請求的參數名稱和參數值。在request對象中提供了一系列的方法用來獲取客戶端的請求參數,這些方法包括getParameter、getParameterNames、getParameterValues和getParameterMap。

        還有一點需要說明,如果request對象的getParameter()方法接收的參數值爲中文,則頁面不能正常顯示,因爲默認情況下其字符編碼爲ISO-8859-1,有時候這種編碼不能正確的顯示漢字。要解決這個問題,需要使用request對象的setCharacterEncoding()方法來設置編碼格式。

        response對象

        response對象包含了從JSP頁面返回客戶端的所有信息,其作用與是它所在的頁面。response對象是javax.servlet.ServletResponse類的一個實例,他封裝由JSP產生的響應,並返回客戶端以響應請求。它被作爲_jspService()方法的一個參數而由引擎傳遞給JSP,在這裏JSP要改動它。response對象經常用於設置HTTP標題、添加cookie、 設置響應內容的類型和狀態、發送HTTP重定向和編碼URL。

        response對象的常用方法如下:

  • void addCookie(Cookie cookie):添加一個Cookie對象,用於在客戶端保存特定的信息。
  • void addHeader(String name, String value):用於判斷指定名字的HTTP文件頭是否存在。
  • void containsHeader(String name):向客戶端發送錯誤的狀態碼。
  • void sendRedirect(String url):重定向JSP文件。
  • void setContentType(String contentType):設置MIME類型與編碼方式。

        response的一個主要應用就是重定向。可以通過response的setRedirect(String url)方法來實現重定向。

        需要說明的是response對象實現的重定向和<jsp:forward>動作元素的最大區別在於<jsp:forward>只能在本網站內跳轉,而response.sendRedirect則可以跳轉到任何一個地址的頁面。

        out對象

        out內置對象是一個緩衝的輸出流,用來向客戶端返回信息。它是javax.servlet.jsp.JspWriter的一個實例。用於向客戶端輸出時要先進行連接,所以總是採用緩衝輸出方式,因此out是緩衝輸出流。

        ouit對象的常用方法如下:

  • public abstract void clear() throws java.io.IOException:清除緩衝區中的內容,但是不把數據輸出到客戶端。
  • public abstract void clearBuffer() throws java.io.IOException:清除緩衝區中的內容,同時把數據輸出到客戶端。
  • public abstract void close() throws java.io.IOException:關閉緩衝區並輸出緩衝區中的數據。
  • public abstract void flush() throws java.io.IOException:輸出緩衝區裏的數據。
  • public int getBufferSize():獲取緩衝區的大小。
  • public abstract int getRemaining():獲取剩餘緩衝區的大小。
  • public boolean isAutoFlush():緩衝區是否進行自動清除。
  • public abstract void newLine() throws java.io.IOException:輸出一個換行符。
  • public abstract void print(String str) throws java.io.IOException:向客戶端輸出數據。
  • public abstract void println(String str) throws java.io.IOException:向客戶端輸出數據並換行。

        out對象的典型應用就是向客戶端輸出數據。

        session對象

        session對象是會話對象,用來記錄每個客戶端的訪問狀態。

        我們已經知道HTTP協議是一種無狀態協議。一個客戶端像服務器發出請求(request),然後服務器返回響應(response),此後連接就被關閉了,在服務器中不會保留與本次鏈接有關的信息。因此,當下一次客戶端再與服務器建立連接時,服務器中已經沒有了之前的鏈接信息了,因而無法判斷本次連接與以前的連接是否屬於同一客戶,在這種情況下,便可以採用會話(session)來記錄連接的信息。所謂的會話指的是從一個客戶端打開瀏覽器與服務器建立連接,到這個客戶端關閉瀏覽器與服務器斷開連接的過程。當一個客戶訪問服務器時,可能會在這個服務器的多個頁面之間反覆連接、不斷刷新一個頁面或者想一個頁面提交信息等,有了session對象,服務器就可以知道這是同一個客戶完成的動作。

        session對象的常用方法如下:

  • Objest getAttribute(String name):獲取session範圍內name屬性的值。
  • void setAttribute(String name,Object value):設置session範圍內name屬性的屬性值爲value,並存儲在session對象中。
  • void removeAttribute(String name):刪除session範圍內name屬性的值。
  • Enumeration getAttributeNames():獲取所有session對象中存放的屬性名稱。
  • long getCreationTime():返回session被創建的時間。
  • String getId():返回session創建時由JSP容器所設定的唯一標識。
  • long getLastAccessedTime():返回用戶最後一次通過session發送請求的時間,單位爲毫秒。
  • int getMaxInactiveInterval():返回session的失效時間,即兩次清氣時間間隔多長時間該session就被取消,單位爲秒。
  • boolean isNew():判斷是否爲新的session。
  • void invaliate():清空session的內容。

        session對象的結構類似於散列表,通過調用setAttribute方法,可以將參數Object指定的對象obj添加到session對象中,併爲添加的對象指定一個索引關鍵字,如果添加的兩個對象關鍵字相同,則先添加的對象被清除。與session對象相關的操作中最重要的就是關於屬性的操作,與屬性操作相關的方法主要有:setAttribute()、getAttribute()、removeAttribute()。

        application對象

        application對象用於獲取和設置Servlet的相關信息,它的生命週期是從服務器啓動直到服務器關閉爲止,即一旦創建一個application對象,該對象將會一直存在,直到服務器關閉。application中封裝了JSP所在的Web應用中的信息。

        application對象的常用方法如下:

  • void setAttribute(String name,Object value):以鍵值對的方式,將一個對象的值存放到application中。
  • Object getAttribute(String name):根據屬性名獲取application中存放的值。

        pageContext對象

        pageContext對象是一個比較特殊的對象,使用它不僅可以設置page範圍內的屬性,還可以設置其他範圍內的屬性。通過pageContext還可以訪問本頁面中的所有其他對象,如前面介紹的request、response、out等對象。由於request、response等對象本身已經提供給我們一些方法,可以直接調用這些方法來完成特定的操作,因此在實際JSP開發過程中pageContext對象使用得並不多。

        pageContext對象的常用方法如下:

  • ServletRequest getRequest():獲得當前頁面中的request對象。
  • ServletRequest getResponse():獲得當前頁面中的response對象。
  • HttpSession getSession():獲得當前頁面中的session對象。
  • ServletContext getServletContext():獲得當前頁面中的application對象。
  • ServletConfig getServletConfig():獲得當前頁面中的config對象。
  • Object getPage():返回當前頁面中的page對象。
  • JspWriter getOut():返回當前頁面中的out對象。
  • Exception getException():返回當前頁面中的Exception對象。
  • Object getAttribute(String name):獲取page範圍內的name屬性值。
  • Object getAttribute(String name,int scope):
  • Enumeration getAttributeNamesInScope(int scope):獲得指定範圍內的所有屬性名。
  • int getAttributeScope(String name):返回屬性name的作用範圍。
  • void setAttribute(String name,Object obj):設置page範圍內的name屬性。
  • void setAttribute(String name,Object obj,int scope):設置指定範圍內的name屬性。
  • Object findAttribute(String name,int scope):尋找name屬性並返回該屬性,如果找不到則返回null。
  • void removeAttribute(String name):刪除屬性名爲name的屬相。
  • void removeAttribute(String name,int scope):刪除指定的某個作用範圍內名稱爲name的屬性。

        page對象

        page對象指的是當前的JSP頁面本身,它是java.lang.Object類的對象,通過page對象可以方便的調用Servlet類中定義的方法。page對象在實際開發過程中並不常用。

        page對象的常用方法如下:

  • class getClass():返回當前Object的類。
  • int hashCode():返回當前Object的哈希碼。
  • String toString():將此Object對象轉換成字符串。
  • boolean equals(Object ob):比較此Object對象是否與指定的Object對象相等。
  • void copy(Object ob):將此Object對象複製到指定的Object對象中。

        config對象

        config對象是ServletConfig類的一個實例,在Servlet初始化時,可以通過config向Servlet傳遞信息。所傳遞的信息可以是屬性名和屬性值構成的名值對,也可以是通過ServletContext對象傳遞的服務器的相關信息。在JSP開發中config對象用得不多,只有在編寫Servlet時,當需要覆蓋Servlet的init()方法是纔會用到config對象。

        config對象的常用方法如下:

  • String getServletName():獲得Servlet名稱。
  • ServletContext getServletContext():獲得一個包含服務器相關信息的ServletContext對象。
  • String getInitParameter(String name):獲得Servlet初始化參數的值。
  • Enumeration getInitParameterNames():獲得Servlet初始化所需要的所有參數名,返回類型時枚舉型。

        exception對象

        exception對象是java.lang.Throwable類的對象,用來處理頁面的錯誤和異常。在使用JSP進行開發室,習慣的做法是在一個頁面中使用JSP指令的errorPage屬性,讓該屬性執行一個專門用於異常處理的頁面。如果在JSP頁面中有未捕獲的異常,則會生成exception對象,然後將該exception對象傳遞到page指令中設置的異常處理頁面中,在異常處理頁面中對exception對象進行處理。在異常處理頁面中需要將其page指令的isErrorPage屬性設置爲true纔可以使用exception對象。

        exception對象的常用方法如下:

  • String getMessage():返回exception對象的異常信息。
  • String getLocalizedMessage():返回本地化語言的異常錯誤。
  • void printStackTrace():打印異常的棧反向跟蹤軌跡。
  • String toString():返回關於異常的簡單描述。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章