一,jsp隱含對象
1,jsp隱含對象是JSP容器載入管理的一組類的執行個體.
* jsp隱含對象在 _jspService方法 中定義,所以只能在運算式,scriptlet中使用這些對象。
2,jsp隱含對象分為4類:
* 輸入輸出對象 : HttpServletRequest的request, HttpServletResponse的response, JspWriter的out;
* 範圍通訊對象 : HttpSession的session, ServletContext的application, PageContext的pageContext;
* servlet對象 : Object的page, ServletConfig的config;
* 錯誤對象 : Throwable的exception;
3,servlet中的程式碼片段:
... ...
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;
... ...
}
二,輸入輸出對象:控制頁面的輸入輸出;
1,HttpServletRequest request:用戶端請求資訊的封裝。
* 範圍:
一次請求到響應的階段。在這階段,對於轉寄和頁麵包含對象是共用的。
請求對象對於每一次請求都重新建立。
2, HttpServletResponse response : 伺服器響應資訊的封裝。
* 用於設定響應前序,Cooike等響應資訊。
3,JspWriter :以字元流形式輸出資料,是PrintWriter的緩衝版本,使用page指令的buffer屬性來設定緩衝區的大小。
* 幾個和快取作業有關的方法:
flush : 重新整理緩衝區;
isAutoFlush:判斷out對象是否自動重新整理。設定自動重新整理在page指令的buffer屬性中。
clear和clearBuffer:清除緩衝區中的內容.如果緩衝區被"重新整理", 前者拋出IO異常,後者不會。
* servlet中的程式碼片段:
out = pageContext.getOut();
_jspx_out = out;
三,範圍通訊對象:JSP頁面和servlet的通訊資訊;
1, PageContext pageContext :提供訪問其他隱含對象及其屬性和自身屬性的統一入口,來保持同一頁面不同組件之間的資料共用。
* javax.servlet.jsp.PageContext;
* 範圍:
page的範圍。每個頁面和請求都有不同的PageContext對象。
使用include指令包含頁面時,被包含檔案分享權限設定該pageContext 對象。jsp:include動作則不可以。
對於這樣的屬性那就放到request中。
servlet和jsp頁面不共用PageContext對象。
* 訪問,設定和移除 其他隱含對象的屬性:scope為PageContext常量.
getAttribute(string name, int scope);
setAttribute(string name, int scope);
removeAttribute(string name, int scope);
removeAttribute(string name)方法將移除所有範圍類的指定屬性。
* 搜尋所有範圍內指定的屬性,按page,request,session,application的順序來搜尋。
findAttribute(string name);
* servlet中的程式碼片段:
... ...
private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();
... ...
public void _jspService(HttpServletRequest request, HttpServletResponse response)
... ...
pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);
PageContext _jspx_page_context = null;
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
... ...
_jspxFactory.releasePageContext(_jspx_page_context);
... ...
}
2,HttpSession session :封裝當前請求的會話資訊,實現會話跟蹤。
* servlet中的程式碼片段:
session = pageContext.getSession();
2,ServletContext application
* 範圍: web應用程式運行期間,所有頁面都共用該對象。
* servlet中的程式碼片段:
application = pageContext.getServletContext();
四,servlet對象:JSP頁面的環境資訊;
1,Object page :當前請求期間servlet對象的引用。
* 可以使用page訪問產生的servlet的類成員和方法。page指令就是對該對象的應用。
* 範圍:
每次請求jsp頁面時建立,在請求轉寄或響應後被銷毀。
這個範圍的對象只能在建立對象的頁面中訪問。
pageContext對象屬於page範圍。
* servlet中的程式碼片段:
Object page = this;
2,ServletConfig config :servlet初始化資訊。
五,錯誤對象:處理頁面的錯誤;
* java.lang.Throwable exception : 表示JSP頁面運行時產生的異常。
** 該對象只能在錯誤頁面(page指令中isErrorPage=true的頁面)中使用。