JSP內置對象

JSP 頁面中包含9 個內置對象:
• application: javax.servlet.ServletContext 的實例,該實例代表JSP 所屬的Web 應用本身,可用於JSP 頁面,或者Servlet 之間交換信息。常用的方法有getAttribute(String attName) , setAttribute(String attName , String attValue) 和
getInitParameter(String paramName)等。
• config: javax.servlet.ServletConfig 的實例,該實例代表該JSP 的配置信息。常用的方法有getInitParameter(String paramName) 及getInitParameternames() 等方法。事實上, JSP 頁面通常無須配置,也就不存在配置信息。因此,該對象更多地在Servlet 中有效。
• exception: java.lang.Throwable 的實例,該實例代表其他頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性爲true 時,該對象纔可以使用。常用的方法有getMessage()和printStackTrace()等。
• out: javax.servlet.jsp.JspWriter 的實例,該實例代表JSP 頁面的輸出流,用於輸出內容,形成HTML 頁面。
• page: 代表該頁面本身,通常沒有太大用處。也就是Servlet 中的this ,其類型就是生成的Servlet 。
• pageContext: javax.servlet.jsp.PageContext 的實例,該對象代表該JSP 頁面上下文,使用該對象可以訪問頁面中的共享數據。常用的方法有getServletContext()和getServletConfig()等。
• request: javax.servlet.http.HttpServletRequest 的實例,該對象封裝了一次請求,客戶端的請求參數都被封裝在該對象裏。這是一個常用的對象,獲取客戶端請求參數必須使用該對象。常用的方法有getParameter(String paramNarne), getParameterValues(String paramName), setAttribute(String atttibuteName,Object attributeValue),getAttribute(String attributeName)和setCharacterEncoding(String env)等。
• response: javax.servlet.http.HttpServletResponse 的實例,代表服務器對客戶端的響應。通常,也很少使用該對象直接響應,輸出響應使用out 對象,而response 對象常用於重定向。常用的方法有sendRedirect(java.lang.String location)等。
• session: javax.servlet.http.HttpSession 的實例,該對象代表一次會話。從客戶端瀏覽器與站點建立連接起,開始會話,直到關閉瀏覽器時結束會話。常用的方法有:getAttribute(String attName), setAttribute(String attName, String attValue)等。
一、application 對象
該對象代表Web 應用本身,整個Web 應用共享同一個application 對象,該對象主要用於在多個JSP 頁面或Servlet 之間共享變量。application 通過setAttribute 方法將一個值放入某個屬性,該屬性的值對整個Web 應用有效,因此Web 應用的每個JSP 頁面或
Servlet 都可以訪問該屬性,訪問屬性的方法爲getAttribute 。
application 不僅可用於兩個JSP 頁面之間共享數據,還可以用於Servlet 和JSP 之間共享數據。
application 還有一個重要用處:可用於加載Web 應用的配置參數。
application 使用context-param 元素配置,並從web.xml 文件中獲取參數
<context-param>
<param-name>param</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>

在JSP頁面中可以採用如下形式調用到:
application.getInitParameter("param") ;

二、config 對象
config 對象代表當前JSP 配置信息,但JSP 頁面通常無須配置,因此也就不存在配置信息。該對象在JSP 頁面中非常少用,但在Servlet 則用處相對較大。因爲Servlet 需要配置在web.xml 文件中,可以指定配置參數。
三、exception 對象
在JSP 頁面中,普通的JSP 頁面只執行try裏面的代碼處理段。而出錯的頁面負責執行cath裏面的異常處理段。在異常處理段中,
可以看到有個異常對象,該對象就是內置對象exception 。exception 對象僅在錯誤處理頁面中才有效。
四、out對象
out 對象代表一個頁面輸出流,通常用於在頁面上輸出變量值及常量。一般在使用輸出表達式值的地方,都可以使用out 對象來達到同樣效果。
五、pageContext 對象
這個對象代表頁面上下文,該對象主要用於訪問頁面共享數據。使用pageContext可以直接訪問request , session, application 範圍的屬性。pageContext 對象在設置屬性時,如果沒有指定屬性存在的範圍,則屬性默認在page 範圍內;如果指定了屬性所在的範圍,則屬性可以被存放在application, session, request 等範圍中。
		<%
// 使用pageContext 設置屬性,該屬性默認在page 範圍內
pageContext.setAttribute("page", "hello");
// 使用request 設置屬性,該屬性默認在request 範圍內
request.setAttribute("request", "hello");
// 使用pageContext將屬性設置在request 範圍中
pageContext.setAttribute("request2", "hello",pageContext.REQUEST_SCOPE);
// 使用sess~on將屬性設置在session 範圍中
session.setAttribute("session", "hello");
// 使用pageContext將屬性設置在session範圍中
pageContext.setAttribute("session2", "hello",pageContext.SESSION_SCOPE);
// 使用application將屬性設置在application範圍中
application.setAttribute("app", "hello");
// 使用pageContext 將屬性設置在application 範圍中
pageContext.setAttribute("app2", "hello",pageContext.APPLICATION_SCOPE);
// 以此獲取各屬性所在的範圍
out.println("page 變量所在範圍: "+ pageContext.getAttributesScope("page") + "<br>");
out.println("request 變量所在範圍: "+ pageContext.getAttributesScope("request") + "<br>");
out.println("request2變量所在範圍: "+ pageContext.getAttributesScope("request2") + "<br>");
out.println("session 變量所在範圍: "+ pageContext.getAttributesScope("session") + "<br>");
out.println("session2 變量所在範圍: "+ pageContext.getAttributesScope("session2") + "<br>");
out.println("app 變量所在範圍: " + pageContext.getAttributesScope("app")+ "<br>");
out.println("app2 變量所在範圍: "+ pageContext.getAttributesScope("app2") + "<br>");
%>

以上輸出結果爲:
page 變量所在範圍: 1
request 變量所在範圍: 2
request2變量所在範圍: 2
session 變量所在範圍: 3
session2 變量所在範圍: 3
app 變量所在範圍: 4
app2 變量所在範圍: 4
其中,1 :對應page 生存範圍。2: 對應request 生存範圍。3: 對應session 生存範圍。4: 對應application 生存範圍。
六、request 對象
request 對象是JSP 中重要的對象,每個request 對象封裝着一次用戶請求,並且所有的請求參數都被封裝在request 對象中。因此request 對象也是獲取客戶端請求參數的方法。
request 對象不僅封裝了表單域值,還可以封裝地址欄傳遞的參數。因此用戶也可在request 對象中增加請求屬性。
(1)封裝表單域值
獲取表單域的值有如下兩個方法。
• String getParameter(String paramName): 獲取表單域的值。
• String getParameterValues(String paramName): 獲取表單域的數組值。
• setCharacterEncoding("GBK"): 設置解碼方式。
request.setCharacterEncoding("GBK");

(2)封裝地址欄參數
地址欄傳遞參數的格式是urI?paraml=value1&param2=value2&…
(3)封裝請求屬性
HttpServletRequest 還包含用於設置和獲取請求屬性的兩個方法:
• void setAttribute(String attName , Object attValue) 。
• Object getAttribute(String attName) 。
七、response 對象
response 代表服務器對客戶端的響應。
out只能輸出字符流,無法輸出字節流。
可以使用response 來重定向請求,以及用於向客戶端增加Cookie
(1)response 響應生成圖片
response.getOutputStream()

(2)重定向
重定向是response 的另外一個用處,與forward 不同的是,重定向會丟失所有的請求參數及請求屬性。
response.sendRedirect("forward-result.jsp")

注意:重定向會丟失所有的請求參數,使用重定向的效果,與在地址欄裏重新輸入新地址再回車的效果完全一樣。
(3)增加Cookie
Cookie 與session 的不同之處在於: session 關閉瀏覽器後就失效,但Cookie 會一直存放在客戶端機器上,除非超出Cookie 的生命期限。增加Cookie 也是使用response 內置對象完成的, response 對象提供了一個方法。
• void addCookie(Cookie cookie): 增加Cookie。
正如在上面方法中見到的,在增加Cookie之前,必須先創建Cookie對象,增加Cookie
請按如下步驟進行:
a.創建Cookie 實例:
b.設置Cookie 的生命期限:
c.向客戶端寫Cookie。
看如下JSP 頁面,該頁面可以用於向客戶端寫一個usemame 的Cookie。
<%@ page contentType="text/html; charset=gb23l2" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 增加Cookie</TITLE>
</HEAD>
<BODY>
<%
// 獲取請求參數
String name = request.getParameter("name") ;
// 以獲取到的請求參數爲值,創建一個Cookie 對象
Cookie c = new Cookie("username" , name);
// 設置Cookie 對象的生存期限
c.setMaxAge(24 * 3600);
// 向客戶端增加Cookie 對象
response.addCookie(c);
%>
</BODY>
</HTML>

通過request 對象的getCookiesO方法來訪問Cookie ,該方法將返回Cookie 的數組,遍歷該數組的每個元素,找出希望訪問的Cookie 即可。
下面是訪問Cookie 的JSP 頁面的代碼:
<%@ page contentType="text/html; charset=gb23l2" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 增加Cookie</TITLE>
</HEAD>
<BODY>
<%
// 獲取本站在客戶端上保留的所有Cookie
Cookie[] cookies = request.getCookies();
// 遍歷客戶端上的每個Cookie
for (Cookie c : cookies)
{
//如果Cookie 的名爲username. 表明該Cookie 是我們需要訪問的Cookie
if(c.getName() .equals("username"))out.println(c.getValue());
}
%>
</BODY>
</HTML>

使用該頁面將可讀出剛纔寫在客戶端的Cookie。
注意:使用Cookie 對象必須設直其生存期限,否則Cookie 將會隨瀏覽器的關閉而自動消失。
八、session對象
session 對象也是一個非常常用的對象,這個對象代表一次用戶會話。一次用戶會話的含義是:從客戶端瀏覽器連接服務器開始,到客戶端瀏覽器與服務器斷開爲止,這個過程就是一次會話。session 裏的屬性可以在多個頁面的跳轉之間共享。一旦關閉瀏覽器,即session 結束, session 裏的屬性將全部清空。
session 對象的兩個常用方法如下。
• setAttribute(String attName , Object attValue): 設置一個session 屬性。
• getAttribute(String attName): 返回一個session 屬性的值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章