JSP的執行過程\JSP的隱式對象

 

JSP頁面就是帶有JSP元素的常規Web頁面,它由靜態內容和動態內容構成。

一、JSP的執行過程

JSP的執行過程主要可以分爲以下幾點:

1、客戶端發出請求。

2、Web容器將JSP轉譯成Servlet源代碼。

3、Web容器將產生的源代碼進行編譯。

4、Web容器加載編譯後的代碼並執行。

5、把執行結果響應至客戶端。

二、JSP異常處理

(1)創建一個用於異常處理的jsp的頁面

<%@ page isErrorPage=”true”%>

<%

       exception

%>

(2)其他的jsp頁面出現了異常能夠跳轉到異常處理的頁面去

方法一:<%@ page errorPage=””%>

方法二:web.xml文件中去進行配置

<error-page>

<error-code>404</error-code>  出錯的代碼500、404

<location>/404error.jsp</location>

</error-page>

 

<error-page>

<exception-type>java.lang.ArithmeticException</exception-type>  異常的類型

<location>/error.jsp</location>

</error-page>

三、JSP的隱式對象

1、JSP隱式對象是Web容器加載的一組類的實例。它是可以直接在JSP頁面使用的對象。分爲4個主要類別:

(1)輸入和輸出對象:控制頁面的輸入和輸出(request、response、out)。

(2)作用域通信對象:檢索與JSP頁面的Servlet相關的信息(session、application、pageContext)。

(3)Servlet對象:提供有關頁面環境的信息(page、config)。

(4)錯誤對象:處理頁面中的錯誤(exception)。

 

1) request對象

request隱式對象表示客戶端的請求,包含了所有的請求信息,常用的方法:

String getParameter(String name):根據頁面表單組件名稱獲取請求頁面提交的數據。

String getParameterValues(String name):獲取頁面請求中一個表單組件對應多個值時的用戶的請求數據(例如複選框)。

2) response對象

response隱式對象處理JSP生成的響應,然後將響應結果發送給客戶端,常用的方法:

void setContentType(String name):設置作爲響應生成的內容的類型和字符編碼。

void sendRedirect(String name):發送一個響應給瀏覽器,指示其應請求另一個URL(會丟失數據,跳轉後不再執行sendRedirect方法下面的代碼)。

3) out對象

out對象表示輸出流,此輸出流將作爲請求的響應發送到客戶端,常用方法有print()、println()、和write()。

在JSP頁面中應使用out隱式對象來向客戶端發送文本形式的實體內容。

out對象是通過調用pageContext對象的getOut方法返回的,其作用和用法與ServletResponse.getWriter方法返回的PrintWriter對象非常相似。

JSP頁面中的out隱式對象的類型爲JspWriter,JspWriter相當於一種帶緩存功能的PrintWriter,設置JSP頁面的page指令的buffer屬性可以調整它的緩存大小,甚至關閉它的緩存。

JSP頁面中的out隱式對象相當於插入到ServletResponse.getWriter方法返回的PrintWriter對象前面的緩衝包裝類對象。

只有向out對象中寫入了內容,且滿足如下任何一個條件時,out對象纔去調用ServletResponse.getWriter方法,並通過該方法返回的PrintWriter對象將out對象的緩衝區中的內容真正寫入到Servlet引擎提供的緩衝區中:

設置page指令的buffer屬性關閉了out對象的緩存功能

寫入到out對象中的內容充滿了out對象的緩衝區

整個JSP頁面結束

內置對象:

(1)輸入輸出對像  request、response、out

(2)作用域通信對象 pageContext、application、session

4) pageContext對象

pageContext對象使用戶可以訪問當前頁面作用域中定義的所有隱式對象。pageContext對象常用的方法:

getRequest()、getServletConfig()、getSession()等

void setAttribute(String name, Object value)

void getAttribute(String name)

獲得其他隱式對象

getException方法返回exception隱式對象

getPage方法返回page隱式對象

getRequest方法返回request隱式對象

getResponse方法返回response隱式對象

getServletConfig方法返回config隱式對象

getServletContext方法返回application隱式對象

getSession方法返回session隱式對象

getOut方法返回out隱式對象 

 

引入和跳轉到其他資源

(1)             PageContext類中定義了一個forward方法和兩個include方法來分別簡化和替代RequestDispatcher.forward方法和RequestDispatcher.include方法的調用:

public void forward(java.lang.String relativeUrlPath)

        throws javax.servlet.ServletException,java.io.IOException

public void include(java.lang.String relativeUrlPath)

        throws javax.servlet.ServletException,java.io.IOException

public void include(java.lang.String relativeUrlPath,boolean flush)

        throws javax.servlet.ServletException,java.io.IOException

(2)             傳遞給這些方法的資源路徑都只能是相對路徑,如果路徑以“/”開頭,表示相對於當前WEB應用程序的根目錄,否則,表示相對於當前JSP所映射到的訪問路徑。

 

 

訪問各個域範圍中的屬性

在application、session、request、pageContext對象中都可以調用setAttribute方法和getAttribute方法來設置和檢索各自域範圍內的屬性。

存儲在application對象中的屬性可以被同一個WEB應用程序中的所有Servlet和JSP頁面訪問。

存儲在session對象中的屬性可以被屬於同一個會話的所有Servlet和JSP頁面訪問。

存儲在request對象中的屬性可以被屬於同一個請求的所有Servlet和JSP頁面訪問,例如使用PageContext.forward和PageContext.include方法連接起來的多個Servlet和JSP頁面。   

存儲在pageContext對象中的屬性僅可以被當前JSP頁面的當前響應過程中調用的各個組件訪問,例如,正在響應當前請求的JSP頁面和它調用的各個自定義標籤類。

PageContext類中還提供了對各個域範圍的屬性進行統一管理的方法,以簡化對各個域範圍內的屬性的訪問。

setAttribute方法

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

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

常量

PageContext.APPLICATION_SCOPE

PageContext.SESSION_SCOPE

PageContext.REQUEST_SCOPE

PageContext.PAGE_SCOPE

getAttribute方法

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

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

removeAttribute方法

public void removeAttribute(java.lang.String name)

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

getAttributeNamesInScope方法

findAttribute方法    (*)

 

 

5) session對象

session對象表示用戶的會話狀況,用此項機制可以輕易識別每一個用戶,能保存和跟蹤用戶的會話狀態。session對象最常用的方法:

void setAttribute(String name, Object value)

void getAttribute(String name)

6) application對象

application對象作用於整個應用程序,所有的客戶端窗口都可以共享該對象,從服務器開始就存在,直到服務器關閉爲止。application對象最常用的方法:

void setAttribute(String name, Object value):以名稱/值的方式,將一個對象的值存放到application中(存的值的類型爲Object)。

void getAttribute(String name):根據名稱去獲取application中存放對象的值(獲取的值的類型爲Object)。

設置context初始參數。在web.xml文件適當的位置增加內容:

<context-param>

<param-name>website</param-name>

<param-value>www.sohu.com</param-value>

</context-param>

在JSP頁面中,使用applicatin對象的getInitParameter()方法可以取得website參數對應的參數值。在Servlet中用ServletContext對象的同名方法獲得參數值。

使用log()方法記錄日誌。
可以使用application對象提供的log()方法,實現日誌記錄功能,在Tomcat服務器中,記錄的日誌都保存在Tomcat根目錄的logs目錄下。日誌內容分成不同文件進行記錄。例如,

<% application.log(“SunWuKong is here”);%>

7) page對象

page對象提供對網頁上定義的所有對象的訪問。page對象表示頁面本身,它是java.lang.Object類的一個實例。

8) config對象

config對象存儲Servlet的一些初始信息。config對象是javax.servlet.ServletConfig接口的一個實例,ServletConfig接口提供方法以檢索Servlet初始化參數。config對象表示編譯JSP頁面的Servlet初始化數據的配置。

9) exception對象處理JSP頁面中的錯誤

printStackTrace()方法用於顯示異常的堆棧跟蹤。

 

總結:同一個JSP頁面的每次訪問請求的響應過程共享同一個pageContext對象,但是每次響應過程結束時都將重新初始化pageContext對象的內部狀態,並釋放相關的引用,所以,pageContext對象中存儲的屬性對該頁面的以後請求的響應過程不可見,即同一個JSP頁面的每次訪問請求的響應過程不能共享存儲進pageContext對象中的屬性。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章