4-1 JSP的內建對象、標準動作、JavaBean、EL

來源:互聯網
上載者:User
1 JSP的內建對象

 JSP中有9種內建對象,分別為:request、response、session、out、page、application、exception、pageContext、config

1.1 request

用戶端的請求資訊被封裝在request對象中,通過它才能瞭解到客戶的需求,然後做出響應,它是HttpServletRequest類的執行個體。

常用方法如下:

object getAttribute(String name) 返回指定屬性的屬性值
Enumeration getAttributeNames() 返回所有可用屬性名稱的枚舉
String getCharacterEncoding() 返回字元編碼方式
int getContentLength() 返回請求體的長度(以位元組數)
String getContentType()得到請求體的MIME類型
ServletInputStream getInputStream() 得到請求體中一行的二進位流
String getParameter(String name) 返回name指定參數的參數值
Enumeration getParameterNames() 返回可用參數名的枚舉
String[] getParameterValues(String name) 返回包含參數name的所有值的數組 
String getProtocol() 返回請求用的協議類型及版本號碼
String getScheme() 返回請求用的計劃名,如:http.https及ftp等
String getServerName() 返回接受請求的伺服器主機名稱
int getServerPort() 返回伺服器接受此請求所用的連接埠號碼 
BufferedReader getReader() 返回解碼過了的請求體 
String getRemoteAddr() 返回傳送此請求的用戶端IP地址
String getRemoteHost() 返回傳送此請求的用戶端主機名稱 
void setAttribute(String key,Object obj) 設定屬性的屬性值 
String getRealPath(String path) 返回一虛擬路徑的真實路徑

1.2 response

response對象包含了響應客戶請求的有關資訊,但在JSP中很少直接用到它,它是HttpServletResponse類的執行個體。

常用方法如下:

String getCharacterEncoding() 返迴響應用的是何種字元編碼

ServletOutputStream getOutputStream() 返迴響應的一個二進位輸出資料流

PrintWriter getWriter() 返回可以向用戶端輸出字元的一個對象

void setContentLength(int len) 設定回應標頭長度

void setContentType(String type) 設定響應的MIME類型

sendRedirect(java.lang.String location) 重新定向用戶端的請求

1.3 session

session對象指的是用戶端與伺服器的一次會話,從用戶端連到伺服器的一個WebApplication開始,直到用戶端與伺服器中斷連線為止,它是HttpSession類的執行個體。

常用方法如下:

long getCreationTime() 返回SESSION建立時間
public String getId() 返回SESSION建立時JSP引擎為它設的惟一ID號
long getLastAccessedTime() 返回此SESSION裡用戶端最近一次請求時間
int getMaxInactiveInterval() 返回兩次請求間隔多長時間此SESSION被取消(ms)
String[] getValueNames() 返回一個包含此SESSION中所有可用屬性的數組 
void invalidate() 取消SESSION,使SESSION不可用 
boolean isNew() 返回伺服器建立的一個SESSION,用戶端是否已經加入 
void removeValue(String name) 刪除SESSION中指定的屬性 
void setMaxInactiveInterval() 設定兩次請求間隔多長時間此SESSION被取消(ms)

 

1.4 out

out對象是JspWriter類的執行個體,是向用戶端輸出內容常用的對象。

常用方法如下:

void clear() 清除緩衝區的內容
void clearBuffer() 清除緩衝區的當前內容
void flush() 清空流
int getBufferSize() 返回緩衝區以位元組數的大小,如不設緩衝區則為0
int getRemaining() 返回緩衝區還剩餘多少可用 
boolean isAutoFlush() 返回緩衝區滿時,是自動清空還是拋出異常
void close() 關閉輸出資料流

 

1.5 page

page對象就是指向當前JSP頁面本身,有點象類中的this指標,它是java.lang.Object類的執行個體。

常用方法如下:

class getClass 返回此Object的類

int hashCode() 返回此Object的hash碼

boolean equals(Object obj) 判斷此Object是否與指定的Object對象相等

void copy(Object obj) 把此Object拷貝到指定的Object對象中

Object clone() 複製此Object對象

String toString() 把此Object對象轉換成String類的對象

void notify() 喚醒一個等待的線程

void notifyAll() 喚醒所有等待的線程

void wait(int timeout) 使一個線程處於等待直到timeout結束或被喚醒

void wait() 使一個線程處於等待直到被喚醒

void enterMonitor() 對Object加鎖

void exitMonitor() 對Object開鎖

 

1.6 application

application對象實現了使用者間資料的共用,可存放全域變數。它開始於伺服器的啟動,直到伺服器的關閉,在此期間,此對象將一直存在;這樣在使用者的前後串連或不同使用者之間的串連中,可以對此對象的同一屬性進行操作;在任何地方對此對象屬性的操作,都將影響到其他使用者對此的訪問。伺服器的啟動和關閉決定了application對象的生命。它是ServletContext類的執行個體。

常用方法:

Object getAttribute(String name) 返回給定名的屬性值
Enumeration getAttributeNames() 返回所有可用屬性名稱的枚舉
void setAttribute(String name,Object obj) 設定屬性的屬性值
void removeAttribute(String name) 刪除一屬性及其屬性值
String getServerInfo() 返回JSP(SERVLET)引擎名及版本號碼
String getRealPath(String path) 返回一虛擬路徑的真實路徑
ServletContext getContext(String uripath) 返回指定WebApplication的application對象
int getMajorVersion() 返回伺服器支援的Servlet API的最大版本號碼
int getMinorVersion() 返回伺服器支援的Servlet API的最大版本號碼
String getMimeType(String file) 返回指定檔案的MIME類型
URL getResource(String path) 返回指定資源(檔案及目錄)的URL路徑
InputStream getResourceAsStream(String path) 返回指定資源的輸入資料流
RequestDispatcher getRequestDispatcher(String uripath) 返回指定資源的RequestDispatcher對象
Servlet getServlet(String name) 返回指定名的Servlet
Enumeration getServlets() 返回所有Servlet的枚舉
Enumeration getServletNames() 返回所有Servlet名的枚舉
void log(String msg) 把指定訊息寫入Servlet的記錄檔
void log(Exception exception,String msg) 把指定異常的棧軌跡及錯誤訊息寫入Servlet的記錄檔
void log(String msg,Throwable throwable) 把棧軌跡及給出的Throwable異常的說明資訊 寫入Servlet的記錄檔

1.7 exception

exception對象是一個例外對象,當一個頁面在運行過程中發生了例外,就產生這個對象。如果一個JSP頁面要應用此對象,就必須把isErrorPage設為true,否則無法編譯。它實際上是java.lang.Throwable的對象。

常用方法:

String getMessage() 返回描述異常的訊息
String toString() 返回關於異常的簡短描述訊息
void printStackTrace() 顯示異常及其棧軌跡
Throwable FillInStackTrace() 重寫異常的執行棧軌跡

 

1.8 pageContext

pageContext對象提供了對JSP頁面內所有的對象及名字空間的訪問,也就是說他可以訪問到本頁所在的SESSION,也可以取本頁面所在的application的某一屬性值,他相當於頁面中所有功能的集大成者,它的本類名也叫pageContext。

常用方法:

JspWriter getOut() 返回當前用戶端響應被使用的JspWriter流(out)
HttpSession getSession() 返回當前頁中的HttpSession對象(session)
Object getPage() 返回當前頁的Object對象(page)
ServletRequest getRequest() 返回當前頁的ServletRequest對象(request)
ServletResponse getResponse() 返回當前頁的ServletResponse對象(response)
Exception getException() 返回當前頁的Exception對象(exception)
ServletConfig getServletConfig() 返回當前頁的ServletConfig對象(config)
ServletContext getServletContext() 返回當前頁的ServletContext對象(application)
void setAttribute(String name,Object attribute) 設定屬性及屬性值
void setAttribute(String name,Object obj,int scope) 在指定範圍內設定屬性及屬性值 
public Object getAttribute(String name) 取屬性的值
Object getAttribute(String name,int scope) 在指定範圍內取屬性的值 
public Object findAttribute(String name) 尋找一屬性,返回起屬性值或NULL
void removeAttribute(String name) 刪除某屬性
void removeAttribute(String name,int scope) 在指定範圍刪除某屬性
int getAttributeScope(String name) 返回某屬性的作用範圍
Enumeration getAttributeNamesInScope(int scope) 返回指定範圍內可用的屬性名稱枚舉 
void release() 釋放pageContext所佔用的資源
void forward(String relativeUrlPath) 使當前頁面重導到另一頁面
void include(String relativeUrlPath) 在當前位置包含另一檔案

 

1.9 config

config對象是在一個Servlet初始化時,JSP引擎向它傳遞資訊用的,此資訊包括Servlet初始化時所要用到的參數(通過屬性名稱和屬性值構成)以及伺服器的有關資訊(通過傳遞一個ServletContext對象)。

常用方法:

ServletContext getServletContext() 返回含有伺服器相關資訊的ServletContext對象
String getInitParameter(String name) 返回初始化參數的值
Enumeration getInitParameterNames() 返回Servlet初始化所需所有參數的枚舉

2 JSP的標準動作

JSP中常用的標準動作有:<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>、<jsp:include>、<jsp:forward>、<jsp:param>
這些標準動作直接在jsp代碼中使用,無需引入檔案,下面一一介紹:

2.1 <jsp:useBean>

<jsp:useBean>可引用一個將在jsp頁面中使用的JavaBean類,使用方法如下:

<jsp:useBean id="name" class="..." scope="..." type="..."> </jsp:useBean>

解釋如下:

  • id:給一個JavaBean類設定一個ID並作為整個jsp頁面的唯一標記;
  • class:要引用的JavaBean類的完整Java類名(一定要包括包名)。
  • type:指定要引用的JavaBean類需要實現一個Java介面或者JavaBean需要擴充的一個超類,type屬性不是必須添加,可不要。
  • scope:指定這個JavaBean的使用範圍,該屬性可以取下面的4個值之一:page,request,session,application;page表示該JavaBean只有在當前頁面內可用(儲存在當前頁面的PageContext內);request表示該JavaBean在當前的客戶請求內有效(儲存在ServletRequest對象內);session表示該JavaBean對當前httpSession內的所有頁面都有效;application表示該JavaBean在整個應用內都有效,這4個範圍是依次變大的。
2.2 <jsp:setProperty> 

使用<jsp:setProperty>動作可以修改JavaBean執行個體中的屬性變數值,可以為JavaBean類執行個體的屬性設定值,使用方法如下:

<jsp:useBean id="name" class="..." scope="..." type="...">     <jsp:setProperty name="..." property="..." value="..."或param="..."/></jsp:useBean>

解釋如下:

  • name:是必須設定的,指定為name名稱的JavaBean的屬性進行賦值;
  • property:是必須設定的,指定需要對JavaBean執行個體中的哪個屬性進行賦值,這裡有個特殊的用法,就是把property屬性設定為”*”,該設定表示所有名字與JavaBean屬性名稱字匹配的請求參數都被傳遞給相應屬性的set方法進行賦值;
  • value:這個屬性是可選的,指定JavaBean屬性的值;
  • param:這個屬性和value屬性不能同時使用,二者之間只能使用一個,當兩個屬性都沒有在<jsp:setProperty
    >動作中指定時,指定的屬性變數將使用JavaBean中的預設值(例如建構函式中的預設值),如果使用param屬性,容器就會把property指定的屬性變數設定為param指定的請求參數的值。
     
2.3 <jsp:getProperty>

使用<jsp:getProperty >用來擷取指定的JavaBean屬性值,具體用法如下:

<jsp:getProperty name=”...” property=”...”/>

解釋如下:

  • name:指定JavaBean的名稱;
  • property:指定擷取JavaBean中的哪個屬性值。
2.4 <jsp:include>

可將另一個頁面產生的內容包括在當前頁面中,使用方法如下:

<jsp:include page="..." flush="true|false"></jsp:include>

解釋如下:

  • page :要插入當前頁面的文檔
  • flush :是否重新整理當前頁面的緩衝器
2.5 <jsp:forward>

把請求轉移到另外一個頁面,實現頁面跳轉,使用方法如下:

 <jsp:forward page=”url”/>

page指定要跳轉的URL。

2.6 <jsp:param>

 <jsp:param>一般與<jsp:include>以及<jsp:forward>等配套使用,用來進行參數的傳遞,使用方法如下:

<jsp:include page=”...”>        <jsp:param name=”...” value=”...”/>  </jsp:include> 

解釋如下:

  • name:參數的名稱
  • value:參數的值
     
3 JavaBean的概念和使用

JavaBean 是一種JAVA語言寫成的可重用組件,是一個普通的java類。

編寫Java類時,只需在類的方法命名上遵守以下規則就是一個JavaBean:

  • 如果類的成員變數的名字是xxx,那麼為了更改或擷取成員變數的值,即更改或擷取屬性,在類中可以使用兩個方法:
    getXxx(),用來擷取屬性xxx。
    setXxx(),用來修改屬性xxx.。
  • 對於boolean類型的成員變數,即布爾邏輯類型的屬性,允許使用"is"代替上面的"get"和"set"。 
  • 類中方法的訪問屬性都必須是public的。 
  • 類中如果有構造方法,那麼這個構造方法也是public的並且是無參數的。

在JSP頁面使用JavaBean即用<jsp:useBean />標準動作。

4 EL運算式4.1 EL的作用

為了使JSP寫起來更加簡單,簡化JSP頁面。

4.2 EL的使用
  • 文法結構
    ${expression}
  • [ ]與.運算子
    EL 提供“.“和“[ ]“兩種運算子來存取資料。當要存取的屬性名稱中包含一些特殊字元,如.或?等並非字母或數位符號,就一定要使用“[ ]“。例如:
    ${ user. My-Name}應當改為${user["My-Name"] }
    如果要動態取值時,就可以用“[ ]“來做,而“.“無法做到動態取值。例如:
    ${sessionScope.user[data]}中data 是一個變數
  • 變數
    EL存取變數資料的方法很簡單,例如:${username}。它的意思是取出某一範圍中名稱為username的變數。因為我們並沒有指定哪一個範圍的username,所以它會依序從Page、Request、Session、Application範圍尋找。假如途中找到username,就直接回傳,不再繼續找下去,但是假如全部的範圍都沒有找到時,就回傳null,當然EL運算式還會做出最佳化,頁面上顯示空白,而不是列印輸出NULL。。
  • 屬性範圍在EL中的名稱
    Page   pageScope
    Request   requestScope
    Session   sessionScope
    Application   applicationScopee
4.3 EL中常用內建對象
  • pageContext:JSP 頁的上下文。它可以用於訪問 JSP 隱式對象,如請求、響應、會話、輸出、servletContext 等。例如,${pageContext.response} 為頁面的響應對象賦值。
  • param:將請求參數名稱映射到單個字串參數值(通過調用 ServletRequest.getParameter (String name) 獲得)。getParameter (String) 方法返回帶有特定名稱的參數。運算式 ${param . name}相當於 request.getParameter (name)。
  • paramValues:將請求參數名稱映射到一個數值數組(通過調用 ServletRequest.getParameter (String name) 獲得)。它與 param 隱式對象非常類似,但它檢索一個字串數組而不是單個值。運算式 ${paramvalues. name) 相當於 request.getParamterValues(name)。
  • header:將要求標頭名稱映射到單個字串頭值(通過調用 ServletRequest.getHeader(String name) 獲得)。運算式 ${header. name} 相當於 request.getHeader(name)。
  • headerValues:將要求標頭名稱映射到一個數值數組(通過調用 ServletRequest.getHeaders(String) 獲得)。它與頭隱式對象非常類似。運算式 ${headerValues. name} 相當於 request.getHeaderValues(name)。
  • cookie:將 cookie 名稱映射到單個 cookie 對象。向伺服器發出的用戶端請求可以獲得一個或多個 cookie。運算式 ${cookie. name .value} 返回帶有特定名稱的第一個 cookie 值。如果請求包含多個同名的 cookie,則應該使用 ${headerValues. name} 運算式。
  • initParam:如同ServletContext.getInitParameter(String name),回傳String類型的值。
  • pageScope:取得Page範圍的屬性名稱所對應的值。

  • requestScope:取得Request範圍的屬性名稱所對應的值。
  • sessionScope:取得Session範圍的屬性名稱所對應的值。
  • applicationScope:取得Application範圍的屬性名稱所對應的值。

 

交流探討到我的新浪微博:http://weibo.com/tianrui1990

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.