注:后綴為匯總的基本上是整理一些網上的。
一、九大內置對象分類:
1. request 請求對象
類型 javax.servlet.ServletRequest 作用域 Request
2. response 響應對象
類型 javax.servlet.SrvletResponse 作用域 Page
3. pageContext 頁面上下文對象
類型 javax.servlet.jsp.PageContext 作用域 Page
4. session會話對象
類型 javax.servlet.http.HttpSession 作用域 Session
5. application 應用程序對象
類型 javax.servlet.ServletContext 作用域 Application
6. out 輸出對象
類型 javax.servlet.jsp.JspWriter 作用域 Page
7. config 配置對象
類型 javax.servlet.ServletConfig 作用域 Page
8. page 頁面對象
類型 javax.lang.Object 作用域 Page
9. exception 例外對象
類型 javax.lang.Throwable 作用域 page
二、九大內置對象解析:
(一) 范圍對象:
其中,有4個是范圍對象: pageContext,request,session,application
對應<jsp:useBean/>指令的scope分別是:page,reqeust,session,application
也就是說,指定不同scope的bean對象(Java Bean)會被綁定到不同的范圍對象中
選擇范圍對象的原則:作用域的范圍越小越好;因為作用域小的生命周期短,有利於性能提高。
例如:
<jsp:useBean id="stu" class="vo.Student" scope="page"/>
表示stu對象被綁定到javax.servlet.jsp.PageContext對象(pageContext)中,其等價的代碼
<%
Student stu = pageContext.getAttribute("stu");
if(stu==null) { stu=new Student(); pageContext.setAttribute("stu",stu); }
%>
1. pageContext
(1) 對象含義:
每一個jsp頁面對應着一個pageContext。一般地,在實際應用中,主要是使用它來存取屬性。
另外,pageContext對象能夠存取其他隱含對象。
(2) 使用方法:
A. pageContext對象存取其他隱含對象屬性的方法,此時需要指定范圍的參數。
Object getAttribute(String name, int scope) Enumeration getAttributeNamesInScope(int scope) void removeAttribute(String name, int scope) void setAttribute(String name, Object value, int scope)
其中,范圍參數有四個,分別代表四種范圍:
PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE
B. PageContext對象取得其他隱含對象的方法
Exception getException() //回傳目前網頁的異常,不過此網頁要為error page, JspWriter getOut() //回傳目前網頁的輸出流,例如:out Object getPage() //回傳目前網頁的Servlet 實體(instance),例如:page ServletRequest getRequest() //回傳目前網頁的請求,例如:request ServletResponse getResponse() //回傳目前網頁的響應,例如:response ServletConfig getServletConfig() //回傳目前此網頁的ServletConfig 對象,例如:config ServletContext getServletContext() //回傳目前此網頁的執行環境(context),例如:application HttpSession getSession() //回傳和目前網頁有聯系的會話(session),例如:session
C. PageContext對象提供取得屬性的方法
Object getAttribute(String name, int scope) //回傳name 屬性(范圍為scope;類型為Object) Enumeration getAttributeNamesInScope(int scope) // 回傳所有屬性范圍為scope 的屬性名稱,回傳類型為Enumeration int getAttributesScope(String name) //回傳屬性名稱為name 的屬性范圍 void removeAttribute(String name) //移除屬性名稱為name 的屬性對象 void removeAttribute(String name, int scope) //移除屬性名稱為name,范圍為scope 的屬性對象 void setAttribute(String name, Object value, int scope) //指定屬性對象的名稱為name、值為value、范圍為scope Object findAttribute(String name) //尋找在所有范圍中屬性名稱為name 的屬性對象
2. Request
(1) 對象含義:
該對象封裝了用戶提交的信息,通過調用該對象相應的方法可以獲取封裝的信息,即使用該對象可以獲取用戶提交的信息。
如:請求的來源、標頭、cookies和請求相關的參數值等等。
(2) 實現接口:
request 對象實現javax.servlet.http.HttpServletRequest接口的
(3) 使用方法:
當Request對象獲取客戶提交的漢字字符時,會出現亂碼問題,必須進行特殊處理。
Eg:
request.setCharacterEncoding("utf-8");
A. 儲存和取得屬性方法:
void setAttribute(String name, Object value) //設定name屬性的值為value Enumeration getAttributeNamesInScope(int scope) //取得所有scope 范圍的屬性 Object getAttribute(String name) //取得name 屬性的值 void removeAttribute(String name) //移除name 屬性的值
B. 取得請求參數的方法
String getParameter(String name) // 取得name 的參數值 Enumeration getParameterNames() //取得所有的參數名稱 String [] getParameterValues(String name) //取得所有name 的參數值 Map getParameterMap() // 取得一個要求參數的Map
C. 能夠取得請求HTTP 標頭的方法
String getHeader(String name) //取得name 的標頭 Enumeration getHeaderNames() //取得所有的標頭名稱 Enumeration getHeaders(String name) //取得所有name 的標頭 int getIntHeader(String name) //取得整數類型name 的標頭 long getDateHeader(String name) // 取得日期類型name 的標頭 Cookie [] getCookies() // 取得與請求有關的cookies
D. 其他的方法
String getContextPath() //取得Context 路徑(即站台名稱) String getMethod() //取得HTTP 的方法(GET、POST) String getProtocol() //取得使用的協議 (HTTP/1.1、HTTP/1.0 ) String getQueryString() //取得請求的參數字符串,不過,HTTP的方法必須為GET String getRequestedSessionId() // 取得用戶端的Session ID String getRequestURI() // 取得請求的URL,但是不包括請求的參數字符串 String getRemoteAddr() //取得用戶的IP 地址 String getRemoteHost() // 取得用戶的主機名稱 int getRemotePort() // 取得用戶的主機端口 String getRemoteUser() // 取得用戶的名稱 void getCharacterEncoding(String encoding) //設定編碼格式,用來解決窗體傳遞中文的問題
3. Session
(1) 對象含義
a) 什么是Session對象
Session對象是一個JSP內置對象,它在第一個JSP頁面被裝載時自動創建,完成會話期管理。從一個客戶打開瀏覽器並連接到服務器開始,到客戶關閉 瀏覽器離開這個服務器結束,被稱為一個會話。當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間切換,服務器應當通過某種辦法知道這是一個客 戶,就需要Session對象。
b) Session對象的ID
當一個客戶首次訪問服務器上的一個JSP頁面時,JSP引擎產生一個Session對象,同時分配一個String類型的ID號,JSP引擎同時將這換個 ID號發送到客戶端,存放在Cookie中,這樣Session對象,直到客戶關閉瀏覽器后,服務器端該客戶的Session對象才取消,並且和客戶的會 話對應關系消失。當客戶重新打開瀏覽器再連接到該服務器時,服務器為該客戶再創建一個新的Session對象。
(2) session對象簡單來說就是表示目前個別用戶的會話(session)狀況。
(3) 實現的接口:
javax.servlet.http.HttpSession接口所提供的方法
(4) Session對象的常用方法
long getCreationTime() //取得session產生的時間,單位是毫秒 String getId() // 取得session 的ID long getLastAccessedTime() // 取得用戶最后通過這個session送出請求的時間 long getMaxInactiveInterval() //取得最大session不活動的時間,若超過這時間,session 將會失效 void invalidate() // 取消session 對象,並將對象存放的內容完全拋棄 boolean isNew() //判斷session 是否為"新"的會話 void setMaxInactiveInterval(int interval) //設定最大session不活動的時間,若超過這時間,session 將會失效
4. Application
(1) 對象含義
服務器啟動后就產生了這個Application對象,當客戶再所訪問的網站的各個頁面 之間瀏覽時,這個Application對象都時同一個,直到服務器關閉。但是與Session對象不同的時,所有客戶的Application對象都時 同一個,即所有客戶共享這個內置的Application對象。
application對象最常被使用在存取環境的信息。
因為環境的信息通常都儲存在ServletContext中,所以常利用application對象來存取ServletContext中的信息。
(2) 實現接口:
application 對象實現javax.servlet.ServletContext 接口
(3) ServletContext接口容器所提供的方法
int getMajorVersion() //取得Container主要的Servlet API版本 int getMinorVersion() // 取得Container次要的Servlet API 版本 String getServerInfo() //取得Container的名稱和版本 String getMimeType(String file) //取得指定文件的MIME 類型 ServletContext getContext(String uripath) //取得指定Local URL的Application context String getRealPath(String path) //取得本地端path的絕對路徑 void log(String message) // 將信息寫入log文件中 void log(String message, Throwable throwable) // 將stack trace 所產生的異常信息寫入log文件中
(二) 五個其他對象:
1. page 對象
(1) 對象含義:
(2) 實現接口
page對象代表JSP本身,更准確地說page對象是當前頁面轉換后的Servlet類的實例。
從轉換后的Servlet類的代碼中,可以看到這種關系: Object page = this;
在JSP頁面中,很少使用page對象。
(3) 使用方法:
2. response 對象
(1) 對象含義:
response 對象主要將JSP 處理數據后的結果傳回到客戶端。
(2) 實現接口:
response 對象是實現javax.servlet.http.HttpServletResponse 接口。response對象所提供的方法。
(3) 使用方法:
a. 設定表頭的方法
void addCookie(Cookie cookie) // 新增cookie void addDateHeader(String name, long date) // 新增long類型的值到name標頭 void addHeader(String name, String value) //新增String類型的值到name標頭 void addIntHeader(String name, int value) //新增int類型的值到name標頭 void setDateHeader(String name, long date) //指定long類型的值到name標頭 void setHeader(String name, String value) //指定String類型的值到name標頭 void setIntHeader(String name, int value) // 指定int類型的值到name標頭
b. 設定響應狀態碼的方法
void sendError(int sc) // 傳送狀態碼(status code) void sendError(int sc, String msg) //傳送狀態碼和錯誤信息 void setStatus(int sc) //設定狀態碼
c. 用來URL 重寫(rewriting)的方法
String encodeRedirectURL(String url) 對使用sendRedirect()方法的URL予以編碼
3. out 對象
(1) 對象含義:
out 對象能把結果輸出到網頁上。
out對象實際上是PrintWriter對象的帶緩沖的版本(在out對象內部使用PrintWriter對象來輸出數據),可以通過page指令的buffer屬性來調整緩沖區的大小,默認的緩沖區是8kb。
out主要是用來控制管理輸出的緩沖區(buffer)和輸出流(output stream)。
(2) 實現接口:
out對象的類型是javax.servlet.jsp.JspWriter,該類從java.io.Writer類派生,以字符流的形式輸出數據
(3) 使用方法:
void clear( ) //清除輸出緩沖區的內容 void clearBuffer( ) //發送數據到客戶端后,清空緩沖區的內容 void close( ) // 關閉輸出流,清除所有的內容 int getBufferSize( ) //取得目前緩沖區的大小(KB) int getRemaining( ) //取得目前使用后還剩下的緩沖區大小(KB) boolean isAutoFlush( ) //回傳true表示緩沖區滿時會自動清除;false表示不會自動清除並且產生異常處理 .flush() //輸出緩沖區的數據 .newLine() //輸出一個換行字符,換到下一行 .print(String str) //"str"是將要被寫入頁面緩沖區的字符(字符不以"/r/n"結尾) .println(String str) //"str"是將要被寫入頁面緩沖區的字符(字符以"/r/n"結尾) .flush() //清空緩沖區,發送全部數據到客戶端page
4. exception對象
(1) 對象含義:
用於處理異常的網頁
若要使用exception 對象時,必須在page 指令中設定:<%@ page isErrorPage="true" %>才能使用。
(2) 實現接口:
(3) 使用方法:
getMessage() getLocalizedMessage() printStackTrace(new java.io.PrintWriter(out))
5. config 對象
(1) 對象含義:
config 對象里存放着一些Servlet 初始的數據結構
(2) 實現接口:
config 對象實現於javax.servlet.ServletConfig 接口
(3) 使用方法:
public String getInitParameter(name) public java.util.Enumeration getInitParameterNames( ) public ServletContext getServletContext() public Sring getServletName()