天天看點

JSP詳解(二):九大内置對象

在看此文章前,確定已經學習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()

    :向用戶端列印字元串
  • int getBufferSize()

    :傳回緩沖區的大小(機關位元組),如果沒有設定緩沖區,則傳回0
  • int getRemaining()

    :傳回緩沖區剩餘可用的大小(同樣以位元組數為傳回值)
  • void flush()

    :将緩沖區的内容輸出到用戶端
  • void clear()

    :清除緩沖區的内容,如果在flush()之後調用會抛異常
  • void clearBuffer()

    :清除緩沖區的内容,如果在flush()之後調用不會抛異常
  • boolean isAutoFlush()

    :緩沖區被填滿時,是自動清空還是抛出異常
  • void close()

    :關閉輸出流

緩沖區用來儲存臨時資料,首先讀取代碼,将讀取到的資料添加到緩存區中,當緩存區已經滿的時候,就會将緩沖區的資料一起顯示出來,并把緩存區清空,并繼續緩存而當我們call flush()的時候,就會直接輸出,然後清除緩存區,然後繼續緩存而 一般情況下(預設值)當緩沖區填滿時,就會将緩存區中的内容輸出,并清空緩存區,但是,如果isAutoFlush()的值為false,當緩存區滿時,就會抛出異常,而不會flush()

request對象:

get請求通常使用傳參的方式,而post請求則是将請求資訊封裝到request對象中,是以我們需要通過request對象擷取post的請求資訊,幸運的是,request也把get請求的param也封裝到了自己内部。

它的作用域為request,即用戶端完成請求之前,此對象将一直有效。

常用方法:

  • request.setCharacterEncoding("utf-8")

    :設定擷取的請求資訊的編碼格式,此方法無法解決URL傳遞中文出現的亂碼問題。
  • request.setAttribute("password", "123456")

    :設定屬性
  • String nm = request.getParameter("name")

    :根據get請求參數名稱擷取對應的值
  • 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()

    :請求的上下文路徑(相對路徑)
  • request.getRemoteAddr()

    :請求的伺服器ip
  • request.getContentLength()

    :請求體長度
  • request.getContentType()

    :請求體MIME類型

傳回樣例:

姓名: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。