1. 程式人生 > >[02] JSP內置對象

[02] JSP內置對象

object jsp頁面 res cep add 系列 ice containe obj


1、內置對象的來歷

JSP是由一些內置對象的,即不需要定義,也不需要我們主動創建,就可以直接使用的對象。當然,其對象名稱也是固定的,無法修改,我們可以直接調用其相關方法。
在 [01] JSP的基本認識 已經說過JSP的本質,並明白了其運行的流程,容器會幫我們將JSP翻譯成為Java類,其中會有一些“固定”代碼,我們還是先看其核心方法:
  1. public void _jspService(HttpServletRequest request, HttpServletResponse response)
  2. throws java.io.IOException, ServletException
    {
  3. PageContext pageContext = null;
  4. HttpSession session = null;
  5. ServletContext application = null;
  6. ServletConfig config = null;
  7. JspWriter out = null;
  8. Object page = this;
  9. JspWriter _jspx_out = null;
  10. PageContext _jspx_page_context = null;

  11. try {
  12. response.setContentType("text/html"
    );
  13. pageContext = _jspxFactory.getPageContext(this, request, response,
  14. null, true, 8192, true);
  15. _jspx_page_context = pageContext;
  16. application = pageContext.getServletContext();
  17. config = pageContext.getServletConfig();
  18. session = pageContext.getSession();
  19. out = pageContext.getOut();
  20. _jspx_out = out;
  21. //我們自定義的Java代碼會被翻譯到這個位置
  22. } catch (Throwable t) {
  23. if (!(t instanceof SkipPageException)) {
  24. out = _jspx_out;
  25. if (out != null && out.getBufferSize() != 0)
  26. try {
  27. out.clearBuffer();
  28. } catch (java.io.IOException e) {
  29. }
  30. if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
  31. }
  32. } finally {
  33. _jspxFactory.releasePageContext(_jspx_page_context);
  34. }
  35. }

可以看到,在方法的開頭中定義了一系列變量,在 try catch 塊中對變量進行了賦值。根據容器翻譯JSP文件的流程我們知道,我們自定義的Java代碼都是加載在“固定”代碼之後,也就是變量賦值之後,所以我們完全可以使用該方法體中內部定義的變量,以及方法的參數,並且可以順利執行。
於是我們常用的JSP內置對象就這麽有了:
類型 變量名 備註
HttpServletRequest
request

HttpServletResponse response
PageContext pageContext JSP上下文對象,可以由此獲取其他內置對象
HttpSession session
ServletContext application
ServletConfig config
JspWriter out 可以像客戶端輸出內容,然而<%= %>更便捷
Object pagepage = this 指翻譯後當前類的對象,很少使用
Throwable exception錯誤頁面才可使用

註:在某個頁面拋出異常時(需頁面定義 errorPage="xxx.jsp"),將轉發至JSP錯誤頁面。提供exception對象是為了在JSP中進行處理,只有在錯誤頁面中才可以使用該對象。所以如果是作為錯誤頁面則必須定義 <%@page isErrorPage="true" %>
那麽內置對象的使用也很簡單,直接在JSP頁面的<% %>中嵌入即可,如 <%=request.getParameter("title)%>
至於內置對象的作用域,從他們的類型來說,已經不言而喻了,詳情可以參考Servlet部分的作用域知識點。

[02] JSP內置對象