在看此文章前,確定已經學習Servlet。
JSP的九大内置對象:
對象名稱 | 備注 | 作用域 | 類型 |
---|---|---|---|
out | 輸出對象 | Page | javax.servlet.jsp.JspWriter |
request | 請求對象 | Request | javax.servlet.ServletRequest |
response | 響應對象 | Page | javax.servlet.SrvletResponse |
session | 會話對象 | Session | javax.servlet.http.HttpSession |
application | 應用程式對象 | Application | javax.servlet.ServletContext |
page | 頁面對象 | Page | javax.lang.Object |
pageContext | 頁面上下文對象 | Page | javax.servlet.jsp.PageContext |
exception | 異常對象 | Page | javax.lang.Throwable |
config | 配置對象 | Page | javax.servlet.ServletConfig |
pageContext對象
pageContext可以操控4個域:自己的page域、application域、session域、request域。
page域
page域的範圍:在一個頁面内共享的資料
因為pageContext對象實在Servlet内部的service()直接建立的,是service方法的局部變量,當方法結束時,這個對象也就消失了。
操作page域:
pageContext.setAttribute("name", "pageFeathers");
pageContext.getAttribute("name");
pageContext.removeAttribute("name");
pageContext.getAttributeNamesInScope(arg0);
用途
和自定義标簽配合使用,是标簽處理類與JSP之間互動的橋梁。
操作所有域:
pageContext.setAttribute("key", "value", type);
參1和參2用來指定往域中添加的鍵值,而第三個參數是一個int類型,用來指定域,在PageContext類中有以下幾個值可供選擇:
1. APPLICATION_SCOPE
2. PAGE_SCOPE
3. REQUEST_SCOPE
4. SESSION_SCOPE
pageContext.findAttribute("name");
// 從四個域中找,從小到大,一旦找到立即停止,并傳回
擷取其他内置對象
pageContext.getRequest();
pageContext.getResponse();
pageContext.getSession();
pageContext.getServletContext();
pageContext.getServletConfig();
pageContext.getException();
pageContext.getPage();
pageContext.getOut();
out對象:
out對象是JspWriter的執行個體,是向用戶端輸出内容的常用對象.
常用方法:
-
:向用戶端列印字元串void println()
-
:傳回緩沖區的大小(機關位元組),如果沒有設定緩沖區,則傳回0int getBufferSize()
-
:傳回緩沖區剩餘可用的大小(同樣以位元組數為傳回值)int getRemaining()
-
:将緩沖區的内容輸出到用戶端void flush()
-
:清除緩沖區的内容,如果在flush()之後調用會抛異常void clear()
-
:清除緩沖區的内容,如果在flush()之後調用不會抛異常void clearBuffer()
-
:緩沖區被填滿時,是自動清空還是抛出異常boolean isAutoFlush()
-
:關閉輸出流void close()
緩沖區用來儲存臨時資料,首先讀取代碼,将讀取到的資料添加到緩存區中,當緩存區已經滿的時候,就會将緩沖區的資料一起顯示出來,并把緩存區清空,并繼續緩存而當我們call flush()的時候,就會直接輸出,然後清除緩存區,然後繼續緩存而 一般情況下(預設值)當緩沖區填滿時,就會将緩存區中的内容輸出,并清空緩存區,但是,如果isAutoFlush()的值為false,當緩存區滿時,就會抛出異常,而不會flush()
request對象:
get請求通常使用傳參的方式,而post請求則是将請求資訊封裝到request對象中,是以我們需要通過request對象擷取post的請求資訊,幸運的是,request也把get請求的param也封裝到了自己内部。
它的作用域為request,即用戶端完成請求之前,此對象将一直有效。
常用方法:
-
:設定擷取的請求資訊的編碼格式,此方法無法解決URL傳遞中文出現的亂碼問題。request.setCharacterEncoding("utf-8")
-
:設定屬性request.setAttribute("password", "123456")
-
:根據get請求參數名稱擷取對應的值String nm = request.getParameter("name")
- request.getAttribute(“password”):根據屬性名擷取對應的屬性值
- 根據表單标簽的name屬性,擷取送出給該頁面的表單資訊,因為name可能相同,是以傳回數組類型。
String[] ps = request.getParameterValues("fav");
if(ps!=null){
for (int i = ; i < ps.length; i++){
out.println(ps[i]);
}
}
-
:協定類型以及版本号request.getProtocol()
-
:伺服器的主機名request.getServerName()
-
:伺服器的端口号request.getServerPort()
-
:請求的真實路徑,因為可能有多個頁面送出請求,是以要傳入請求頁面request.getRealPath("07_responsePage.jsp")
-
:請求的上下文路徑(相對路徑)request.getContextPath()
-
:請求的伺服器iprequest.getRemoteAddr()
-
:請求體長度request.getContentLength()
-
:請求體MIME類型request.getContentType()
傳回樣例:
姓名:Feather 愛好:daqiu wanqiu guanqiu 密碼: 協定類型以及版本号:HTTP/
伺服器的主機名:localhost
伺服器的端口号:
請求的真實路徑:/home/feathers/workspace/JSPDemo/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/JSPStudyIMOOC/_responsePage.jsp
請求的上下文路徑(相對路徑):/JSPStudyIMOOC
請求的伺服器ip:
請求體長度:
請求體MIME類型:application/x-www-form-urlencoded
response對象:
加載一個網頁,用戶端(浏覽器)發送request對象,服務端傳回response對象
- 包含了響應用戶端請求的資訊,JSP中很少用到此對象,通常是用來操作伺服器傳回的資料,比如cookies
- response對象隻是伺服器響應給目前頁面的,即:目前jsp頁面請求後,接收到伺服器的response對象,可以在頁面中對response對象進行必要的修改,但最終還是由伺服器決定響應的具體内容
- 設定響應的MIME類型:
response.setContentType("text/html;charset=utf-8")
各個對象的作用請檢視Servlet。