JSP系列四:JSP9個內建物件
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中的陣列下標越界異常 資訊
相關文章
- 菜鳥學Java(四)——JSP內建物件JavaJS物件
- JSP開發入門(四)----JSP的內部物件 (轉)JS物件
- JSP 9個內建物件方法使用JS物件
- JSP內建物件JS物件
- JSP 內建物件(一)JS物件
- JSP內建物件——sessionJS物件Session
- JSP的9個常用內建物件詳解JS物件
- 2020 12 06 JSP九大內建物件和四個作用域JS物件
- JSP九大內建物件JS物件
- Java學習--jsp內建物件JavaJS物件
- JSP(JSTL EL表示式 三個指令 六個動作標籤 九個JSP內建物件)JS物件
- 三種跳出迴圈的方法--9個jsp內建物件JS物件
- JSP九大內建物件 sessionJS物件Session
- Java學習-jsp內建物件SessionJavaJS物件Session
- 實驗三 JSP內建物件使用JS物件
- JSP九大內建物件詳解JS物件
- EL 表示式對照 JSP 內建物件表JS物件
- JSP九大內建物件 out request responseJS物件
- JSP九大內建物件、四大作用域以及session的生命週期JS物件Session
- Java Web(五) JSP詳解(四大作用域九大內建物件等)JavaWebJS物件
- c++內建函式物件C++函式物件
- JSP中無法使用內建物件解決方法JS物件
- JSP簡介以及各種內建物件的用法JS物件
- 菜鳥學Java(五)——JSP內建物件之requestJavaJS物件
- 【JSP進階】JSP九大內建物件,這你也不知道?JS物件
- JSP九大內建物件解析、JSP指令(page、include)、靜態聯編概述JS物件
- jsp隱式物件-Servlet物件JS物件Servlet
- 關於EL在JSP內呼叫RequestScope內建物件報錯的問題JS物件
- 37. JSP有哪些內建物件 ?作用分別是什麼?(至少說出三個)JS物件
- CODING DevOps 系列第四課:DevOps 中的質量內建實踐dev
- 《JavaScript物件導向精要》之四:建構函式和原型物件JavaScript物件函式原型
- jsp隱式物件JS物件
- 對servlet\jsp九大內建物件的介紹及部分物件的區別ServletJS物件
- netty系列之:內建的Frame detectionNetty
- 深入理解javascript系列(四):變數物件(VO)1JavaScript變數物件
- 什麼是Date物件一個內建物件Date:物件
- 重要內建函式、常見內建函式(瞭解)、可迭代物件、迭代器物件、for迴圈原理、異常捕獲函式物件
- 使用Builder來構建一個物件UI物件