JSP系列四:JSP9個內建物件

工程師WWW發表於2014-09-30

JSP內建物件:我們在使用JSP進行頁面程式設計時可以直接使用而不需自己建立的一些Web容器已為使用者建立好的JSP內建物件。如request,session,response,out等。

下面就JSP2.0給出的9個內建物件:

 

內建物件 型別 作用域
request javax.servlet.http.HttpServletRequest request
response javax.servlet.http.HttpServletResponse response
pageContext javax.servlet.jsp.PageContext page
session javax.servlet.http.HtpSession session
application javax.servlet.jsp.ServletContext application
out javax.servlet.jsp.JspWriter page
config javax.servlet.ServletConfig page
page java.lang.Object page
exception java.lang.Throwable page

 

我們同樣可以根據它們的作用進行分類:

第一類:與Servlet有關:page和config

第二類:與Input/Output有關:out,request和response

第三類:與Context有關:application,session和pageContext

第四類:與Error有關:exception

 

一、屬性儲存範圍

在JSP中可以通過setAttribute()和getAttribute()這兩個方法來設定和取得屬性。從而實現資料的共享。JSP提供了四種屬性儲存範圍:response,request,session和application。

1、page:就是設定的屬性只能在當前頁面有效。通過pageContext的setAttribute()和getAttribute()。

2、request:指屬性在一次請求範圍內有效。如果頁面從給一個頁面跳轉到另一個頁面,那麼該屬性就失效了。這裡所指的跳轉是指客戶端跳轉,比如客戶單擊超連結跳轉到其他頁面或者通過瀏覽器位址列瀏覽其他頁面。如果使用伺服器端跳轉<jsp:forward>,則該屬性仍然生效。同理使用request物件的setAttribute()和getAttribute()。

3、session:指客戶瀏覽器與伺服器一次會話範圍內,如果伺服器斷開連線,那麼屬性就失效了。同理通過session物件的setAttribute()和getAttribute()。session範圍的例外比如重新開啟一個瀏覽器。

4、application:指在整個伺服器範圍,知道伺服器停止以後才會失效。同理通過application物件的setAttribute()和getAttribute()。application範圍就是儲存的屬性只要伺服器不重啟,就能在任意頁面中獲取,就算重新開啟瀏覽器也是可以獲取屬性的。

 

二、移除屬性:在屬性的作用域還未到就想清除相應的屬性時,必須程式設計清除。即呼叫相應物件的removeAttribute()方法就可以移除指定屬性。

<%@ page language="java" contentType="text/html;charset=gb2312"%> <html> <head> <title>移除屬性</title> </head> <body> <%-- 在page範圍設定屬性 --%> <% pageContext.setAttribute("name","James"); //設定屬性name,其值為James pageContext.setAttribute("age","12"); //設定屬性age,其值為12 pageContext.setAttribute("sex","男"); //設定屬性sex,其值為男 %> <%-- 移除屬性--%> <% pageContext.removeAttribute("sex"); %> <%-- 取得page範圍屬性--%> <% String strName = (String)pageContext.getAttribute("name"); //取值屬性name的值 String strAge = (String)pageContext.getAttribute("age"); //取值屬性age的值 String strSex = (String)pageContext.getAttribute("sex"); //取值屬性sex的值 out.println("page範圍:name屬性值為" + strName + "<br>"); out.println("page範圍:age屬性值為" + strAge+ "<br>"); out.println("page範圍:sex屬性值為" + strSex); %> </body> </html>


  

 

 結果頁面輸出:page範圍:name屬性值為James                        page範圍:age屬性值為 12

                        page範圍:sex屬性值為 null

三、request物件:request物件不但可以用來設定和取得request範圍變數,還可以用來獲取客戶端請求引數、請求的來源、表頭、Cookies等。

1、request獲取客戶端請求引數方法

 

 方法 返回值型別  方法說明 
 getParameter(String name) String   獲取引數名為name的引數值
 getParameterNames() Enumeration   獲取所有引數的名稱,可與上一個方法合用獲取所有引數的值
 getParameterValues(String name)  String[]  獲取引數名為name的所有引數,比如引數是多個checkbox
 getParameterMap()  Map  獲取所有引數封裝的Map例項,通過Map例項的String[] get("id")方法返回對應引數名為id的值陣列

 

2、request的其他方法

 

方法 返回值型別 方法說明
getHeader(String name) String 獲取指定標題名稱為name的標頭
getHeaderName() Enumeration 獲取所有的標頭名稱
getIntHeader(String name) int 獲取標題名稱為name的標頭,內容以整數型別返回
getDateHeader(String name) long 獲取標題名稱為name的標頭,內容以日期型別返回
getCookies() Cookie 獲取相關的Cookie
getContextPath() String 獲取Context的路徑
getMethod() String 獲取客戶端的提交方式
getProtocol() String 獲取使用的HTTP協議
getQueryString() String 獲取請求的字串
getRequestSessionId() String 獲取客戶端的Session ID
getRequestURI() String 獲取請求的URI
getRemoteAddr() String 獲取客戶端IP地址

 

四、response物件:用來向客戶端傳送輸出資訊。

 

方法 返回值 方法說明
addCookie(Cookie cookie) void  
addDateHeader(String name,long date) void  
addHeader(String name,String value) void  
addIntHeader(String name,int value) void  
setDateHeader(String name,long date) void  
setHeader(String name,String value) void  
setIntHeader(String name,int value) void  
sendError(int sc) void 傳送狀態碼
sendError(int sc,String msg) void 傳送狀態碼和錯誤資訊
setStatus(int sc) void 設定狀態碼
sendRedirect(String URL) void 頁面重定向,用來實現頁面跳轉

 

注:這裡的response物件的sendRedirect(String URL)方法設定頁面重定向將改變瀏覽器位址列資訊,所以也稱客戶端跳轉。

例項1:response物件實現頁面的自動重新整理:只需要早JSP頁面中加上

<%--使用response物件的setIntHeader設定屬性Refresh的值(單位為秒)來實現頁面自動重新整理--%> <% response.addIntHeader("Refresh",10); %>


 

例項2:實現頁面自動跳轉:可以通過response物件的setHeader()方法新增一個標題為Refresh的標頭,並制定頁面跳轉時間及跳轉頁面,從而實現頁面自動跳轉。 <% response.setHeader("Refresh","10;URL=http://www.baidu.com"); %>


  這裡使用setHeader方法新增一個標題為"Refresh",值為"10,URL=http://www.baidu.com"的標頭。

 

 

五、out物件:用來向頁面輸出資訊。

 

方法 返回值型別 方法說明
clear() void 清除網頁上輸出內容
clearBuffer() void 清除緩衝區內容
close() void 關閉緩衝區,清除所有內容
getBufferSize() int 取得緩衝區大小
getRemaining() int 取得緩衝區剩餘大小
isAutoFulsh() boolean 獲得緩衝區是否進行自動清除的資訊
print(String str) void 進行頁面輸出
println(String str) void 進行頁面輸出並換行

 

 

 

六、session物件:用來表示使用者的會話狀況,一般用於儲存使用者的各種資訊,直到生命週期超時或者被認為釋放掉為止。

 

方法 返回值型別 方法說明
getId() String 獲取session的ID
getCreationTime() long 獲取session的生成時間
getLashAccessedTime() long 獲取使用者最後通過session傳送請求時間
getMaxInactiveInterval() long 獲取session生命週期,如果超過這個時間則失效
invalidate() void 清空session內容
isNew() boolean 判斷session是否為“新”的
setMaxInactiveInterval() void 設定session生命週期,如果超過這個時間則失效

 

七、application物件:用來取得和設定Servlet的相關資訊。

 

方法 返回值型別 方法說明
getMajorVersion() int 獲取主要的Servlet API版本
getMinorVersion() int 獲取次要的Servlet API版本
getServerInfo() String 獲取伺服器版本
getMimeType() String 獲取指定檔案的MIME型別
getContext() ServerContext 獲取指定Local的Application context
getRealPath String 獲取指定path的絕對路徑

 

八、pageContext物件:可以用來設定page範圍的屬性,還可以設定其他範圍屬性,不過需要指定範圍引數,同時還可以獲取其他內建物件。

 

方法 返回值 方法說明
getException() Exception 獲取當前的exception內建物件
getOut() JspWriter  
getPage() Object  
getRequest() ServletRequset  
getResponse() ServletResponse  
getServletConfig() ServletConfig  
getServeltContext() ServletContext  
getSession() HttpSession  
getAttribute(String name,int scope) Object 獲取指定範圍的name屬性值
getAttributeNamesInScope(int scope) Enumeration 獲取指定範圍所有屬性名稱
getAttributesScope(String name) int 獲取屬性名稱為name的屬性範圍
removeAttribute(String name) void 移除屬性名稱為name的 屬性
removeAttribute(String name,int scope) void 移除指定範圍的屬性名稱為name的 屬性
setAttribute(String name,Object value,int scope) void 設定指定範圍的name屬性
findAttribute(String name) Object 尋找所有範圍的屬性名稱為name的屬性

 

九、page物件:page物件代表JSP轉譯後的Servlet,通過page物件可以非常方便地呼叫Servlet類中定義的方法。

例項1:通過page物件呼叫Servlet類中定義的方法 

<%@ page language="java" contentType="text/html;charset=gb2312"%> <%@ page info="this is the page Object Practice" %> <html> <head> <title>page物件</title> </head> <body> <%--通過page物件呼叫Servlet中的getServletInfo()方法 --%> <% String info = ((javax.servlet.jsp.HttpJspPage)page).getServletInfo(); %> <%=info %> </body> </html>


  

輸出:this is the page Object Practice.

 

十、config物件:可以用來獲取Servlet的配置資訊。

 

方法 返回值型別 方法說明
getInitParameter(name) String 獲取Servlet初始化引數
getInitParameterNames() Enumeration 獲取Servlet所有初始化引數名稱
getServletContext() ServletContext 獲取當前Application context
getServletName() String 獲取Servlet名稱

 

十一、exception物件:用來處理錯誤異常,如果要用exception物件,必須指定page中的isErrorPage屬性值為true。

例項:exception用來處理錯誤異常

1、包含錯誤的頁面:error.jsp

<%@ page language="java" contentType="text/html;charset=gb2312" errorPage="ExceptionDemo01.jsp"%> <html> <head> <title>錯誤頁面</title> </head> <body> <% int[] arr = {1,2,3}; out.println(arr[3]); %> </body> </html>


 

 注:error.jsp中arr[3]陣列下表越界.需在page指令中指定errorPage的屬性值為相應的異常處理程式。

2、異常處理頁面:exceptionDo.jsp

<%@ page language="java" contentType="text/html;charset=gb2312" isErrorPage="true"%> <%@page import="java.io.PrintStream"%> <html> <head> <title>處理錯誤異常</title> </head> <body> <%=exception%><br> <%=exception.getMessage()%><br> <%=exception.getLocalizedMessage()%><br> <% exception.printStackTrace(new java.io.PrintWriter(out)); %> </body> </html>


 

 注:必須在page指令中指定屬性isErrorPage屬性值為true。也就是說這個頁面可以用於異常處理。

將會在exceptionDo.jsp中列印出error.jsp中的陣列下標越界異常 資訊

相關文章