jsp page指令 九個內置對象 四種屬性範圍 兩種跳轉的區別 @include和jsp:include的區別 taglib指令

jsp中的page指令

語法規則:

<@%page attribute1=”value1”  attribute2=”value2”…………%>page指令以<%@page 開始,以%>結束。

page常用指令表

屬性

定義

language=”ScriptLanguage”

指定JSP Container用什麼語言來編譯,目前只支持JAVA語言。默認爲JAVA

extends=”className”

定義此JSP網頁產生的Servlet是繼承哪個

import=”importList”

定義此JSP網頁要使用哪些Java API

session=”true|false”

決定此頁面是否使用session對象。默認爲true

buffer=”none|size in kb”

決定輸出流(Input stream)是否又緩衝區。默認爲8kb

autoFlush=”true|false”

決定輸出流的緩衝區慢了後是否需要自動清除,緩衝區慢了後會產生異常錯誤(Exception).默認爲true

isThreadSafe=”true|false”

是否支持線程。默認爲true

errorPage=”url”

如果此頁發生異常,網頁會重新指向一個url

isErrorPage=”true|false”

表示此頁面是否爲錯誤處理頁面。默認爲false

contentType=”text/html;charset=gb2312”

表示MIME類型和JSP的編碼方式。筆者使用例左

pageEncoding=”ISO-8859-1”

編碼方式。(筆者已經加入使用的編碼)

isELLgnored=”true|false”

表示是否在此JSP頁面中EL表達式。true則忽略,反之false則支持。默認爲false

page指令是針對當前頁面的指令,常用的page指令有8個:

1.<%@page language="java"%>設置jsp中用到的語言,用到的是java,也是目前唯一有效的設定

2.<%@page extends="mypackage.myclass"%>設置目前jsp要繼承的父類,一般不需要設置,在默認情況下,jsp頁面默認的父類是HttpJspBase。

3.<%@page import="java.sql.*"% > jsp頁面所用到的類

4.<%@page errorPage="error.jsp"%> 設置該jsp頁面出現異常時所要轉到的頁面,如果沒設定,容器將使用當前的頁面顯示錯誤信息

5.<%@page isErrorPage="true"%> 設置該jsp頁面是否作爲錯誤顯示頁面,默認是false,如果設置爲true,容器則會在當前頁面生成一個exception對象,和4拍配使用

6.<%@page contentType="text/html;charset=gb2312"%> 設置頁面文件格式和編碼方式

7.<%@page isThreadSafe="true"% > 設置容器以多線程還是單線程運行該jsp頁面,默認是true,是多線程。設置爲false,則以單線程的方式運行該jsp頁面

8.<%@page session="true"% > 設置該jsp頁面是否可以用到session對象(jsp內置對象,爲web容器創建),默認是true,能用到session.設置爲false,則用不到

jsp page指令 九個內置對象

1.request對象 
客戶端的請求信息被封裝在request對象中,通過它才能瞭解到客戶的需求,然後做出響應。它是HttpServletRequest類的實例。 

1 object getAttribute(String name) 返回指定屬性的屬性值 
2 Enumeration getAttributeNames() 返回所有可用屬性名的枚舉 
3 String getCharacterEncoding() 返回字符編碼方式 
4 int getContentLength() 返回請求體的長度(以字節數) 
5 String getContentType() 得到請求體的MIME類型 
6 ServletInputStream getInputStream() 得到請求體中一行的二進制流 
7 String getParameter(String name) 返回name指定參數的參數值 
8 Enumeration getParameterNames() 返回可用參數名的枚舉 
9 String[] getParameterValues(String name) 返回包含參數name的所有值的數組 
10 String getProtocol() 返回請求用的協議類型及版本號 
11 String getScheme() 返回請求用的計劃名,如:http.https及ftp等 
12 String getServerName() 返回接受請求的服務器主機名 
13 int getServerPort() 返回服務器接受此請求所用的端口號 
14 BufferedReader getReader() 返回解碼過了的請求體 
15 String getRemoteAddr() 返回發送此請求的客戶端IP地址 
16 String getRemoteHost() 返回發送此請求的客戶端主機名 
17 void setAttribute(String key,Object obj) 設置屬性的屬性值 
18 String getRealPath(String path) 返回一虛擬路徑的真實路徑 

2.response對象 
response對象包含了響應客戶請求的有關信息,但在JSP中很少直接用到它。它是HttpServletResponse類的實例。

1 String getCharacterEncoding() 返回響應用的是何種字符編碼 
2 ServletOutputStream getOutputStream() 返回響應的一個二進制輸出流 
3 PrintWriter getWriter() 返回可以向客戶端輸出字符的一個對象 
4 void setContentLength(int len) 設置響應頭長度 
5 void setContentType(String type) 設置響應的MIME類型 
6 sendRedirect(java.lang.String location) 重新定向客戶端的請求 


3.session對象 
session對象指的是客戶端與服務器的一次會話,從客戶連到服務器的一個WebApplication開始,直到客戶端與服務器斷開連接爲止。它是HttpSession類的實例. 

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


4.out對象 
out對象是JspWriter類的實例,是向客戶端輸出內容常用的對象 

1 void clear() 清除緩衝區的內容 
2 void clearBuffer() 清除緩衝區的當前內容 
3 void flush() 清空流 
4 int getBufferSize() 返回緩衝區以字節數的大小,如不設緩衝區則爲0 
5 int getRemaining() 返回緩衝區還剩餘多少可用 
6 boolean isAutoFlush() 返回緩衝區滿時,是自動清空還是拋出異常 
7 void close() 關閉輸出流 


5.page對象 
page對象就是指向當前JSP頁面本身,有點象類中的this指針,它是java.lang.Object類的實例 


1 class getClass 返回此Object的類 
2 int hashCode() 返回此Object的hash碼 
3 boolean equals(Object obj) 判斷此Object是否與指定的Object對象相等 
4 void copy(Object obj) 把此Object拷貝到指定的Object對象中 
5 Object clone() 克隆此Object對象 
6 String toString() 把此Object對象轉換成String類的對象 
7 void notify() 喚醒一個等待的線程 
8 void notifyAll() 喚醒所有等待的線程 
9 void wait(int timeout) 使一個線程處於等待直到timeout結束或被喚醒 
10 void wait() 使一個線程處於等待直到被喚醒 
11 void enterMonitor() 對Object加鎖 
12 void exitMonitor() 對Object開鎖


6.application對象 
application對象實現了用戶間數據的共享,可存放全局變量。它開始於服務器的啓動,直到服務器的關閉,在此期間,此對象將一直存在;這樣在用戶的前後連接或不同用戶之間的連接中,可以對此對象的同一屬性進行操作;在任何地方對此對象屬性的操作,都將影響到其他用戶對此的訪問。服務器的啓動和關閉決定了application對象的生命。它是ServletContext類的實例。 


1 Object getAttribute(String name) 返回給定名的屬性值 
2 Enumeration getAttributeNames() 返回所有可用屬性名的枚舉 
3 void setAttribute(String name,Object obj) 設定屬性的屬性值 
4 void removeAttribute(String name) 刪除一屬性及其屬性值 
5 String getServerInfo() 返回JSP(SERVLET)引擎名及版本號 
6 String getRealPath(String path) 返回一虛擬路徑的真實路徑 
7 ServletContext getContext(String uripath) 返回指定WebApplication的application對象 
8 int getMajorVersion() 返回服務器支持的Servlet API的最大版本號 
9 int getMinorVersion() 返回服務器支持的Servlet API的最大版本號 
10 String getMimeType(String file) 返回指定文件的MIME類型 
11 URL getResource(String path) 返回指定資源(文件及目錄)的URL路徑 
12 InputStream getResourceAsStream(String path) 返回指定資源的輸入流 
13 RequestDispatcher getRequestDispatcher(String uripath) 返回指定資源的RequestDispatcher對象 
14 Servlet getServlet(String name) 返回指定名的Servlet 
15 Enumeration getServlets() 返回所有Servlet的枚舉 
16 Enumeration getServletNames() 返回所有Servlet名的枚舉 
17 void log(String msg) 把指定消息寫入Servlet的日誌文件 
18 void log(Exception exception,String msg) 把指定異常的棧軌跡及錯誤消息寫入Servlet的日誌文件 
19 void log(String msg,Throwable throwable) 把棧軌跡及給出的Throwable異常的說明信息 寫入Servlet的日誌文件 


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


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

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


1 JspWriter getOut() 返回當前客戶端響應被使用的JspWriter流(out) 
2 HttpSession getSession() 返回當前頁中的HttpSession對象(session) 
3 Object getPage() 返回當前頁的Object對象(page) 
4 ServletRequest getRequest() 返回當前頁的ServletRequest對象(request) 
5 ServletResponse getResponse() 返回當前頁的ServletResponse對象(response) 
6 Exception getException() 返回當前頁的Exception對象(exception) 
7 ServletConfig getServletConfig() 返回當前頁的ServletConfig對象(config) 
8 ServletContext getServletContext() 返回當前頁的ServletContext對象(application) 
9 void setAttribute(String name,Object attribute) 設置屬性及屬性值 
10 void setAttribute(String name,Object obj,int scope) 在指定範圍內設置屬性及屬性值 
11 public Object getAttribute(String name) 取屬性的值 
12 Object getAttribute(String name,int scope) 在指定範圍內取屬性的值 
13 public Object findAttribute(String name) 尋找一屬性,返回起屬性值或NULL 
14 void removeAttribute(String name) 刪除某屬性 
15 void removeAttribute(String name,int scope) 在指定範圍刪除某屬性 
16 int getAttributeScope(String name) 返回某屬性的作用範圍 
17 Enumeration getAttributeNamesInScope(int scope) 返回指定範圍內可用的屬性名枚舉 
18 void release() 釋放pageContext所佔用的資源 
19 void forward(String relativeUrlPath) 使當前頁面重導到另一頁面 
20 void include(String relativeUrlPath) 在當前位置包含另一文件 
  
  
9.config對象 
config對象是在一個Servlet初始化時,JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時所要用到的參數(通過屬性名和屬性值構成)以及服務器的有關信息(通過傳遞一個ServletContext對象) 


1 ServletContext getServletContext() 返回含有服務器相關信息的ServletContext對象 
2 String getInitParameter(String name) 返回初始化參數的值 
3 Enumeration getInitParameterNames() 返回Servlet初始化所需所有參數的枚舉

jsp中四種屬性範圍

jsp中有9個內置對象,其中pageContext,request,session,application可以做一個好似容器的東西來用,向容器裏放東西,使用setAttribute(String name,Object value),取得可用getAttribute(String name).

其中pageContext.setAttribute(String name,Object value)設置後,只可在當頁面取得,無論採取什麼樣的跳轉都不會取到值

request.setAttribute(String name,Object value)設置後,用服務器端跳轉的方式可取到值

session.setAttribute(String name,Object value)設置後,無論採用什麼樣的跳轉都可以取到值、

application.setAttribute(String name,Object value)設置後,在整個的應用中都可以取得,不關閉服務器,容器的東西會一直存在.


jsp中兩種跳轉的區別

在jsp中有兩種跳轉,客戶端跳轉和服務器端跳轉,,他們之間存在下面4點的區別:

1.<jsp:forward page=""/>做爲服務器端跳轉,跳轉後地址欄地址是當前地址,而不是目的頁面。而response.sensRediresct("")作爲客戶端跳轉地址欄會變成目的頁面的地址.

2.客戶端跳轉當程序執行到此句時,是所有代碼執行完成後再執行跳轉動作,也就是說其後的代碼有被執行的機會,而服務器端的跳轉是強硬的,執行到此句時,強制跳轉,不執行其後的代碼。

3.從傳遞參數的角度上看,客服端跳轉可以通過地址重寫的方式傳遞參數,如response.sendRedirect(*.jsp?ref=pokoo&ref2=pokoo2).而服務器的跳轉可以採用<jsp:param name="ref" value="pokoo"/>來傳遞參數。

4.jsp中有四種屬性保存範圍,如在當前資源中在request中保存了屬性,那麼客戶端的跳轉到目的頁是拿不到,request容器裏的東西的,而服務器端的跳轉可以取道.

下面說說自己理解的jsp中四種屬性保存範圍和jsp中的9個內置對象,和jstl標籤庫,和簡單的jsp標籤的開發

 

在servlet中不能有<jsp:forward page=""/>,那服務器跳轉是用 RequestDispatcher rd=request.getRequestDispatcher("*.jsp"); rd.forward(request,response);

 

@include和jsp:include的區別

<%@include file=""% > 該指令可以把其他文件包含到jsp頁面裏來,這個文件可以是普通文件,也可以是jsp文件,與之類似功能<jsp:include page=""/>.

前一種指令是先將被包含文件的內容包含進來,然後再進行處理,在jsp頁面顯示.本身該jsp標籤應該有<html>標記,那麼被包含文件就不能存在這個標記,否側就出錯.

一句話:先包含後處理

而後一種指令相反,它是先處理,再將被包含文件的顯示部分包含進來,都有<html>就不會出錯.

一句話:先處理後包含

如使用第二種可以向被包含頁面傳遞參數,被包含頁面必須爲動態頁面,

<jsp:include page="*.jsp">

<jsp:param name="ref1" value="value1"/>

</jsp:include>

 

被包含頁面可以用request取得參數

jsp中的taglib指

<%@taglib uri="tagLibraryURI" prefix="tagPrefix"%>

該指令的作用是命名標記庫,jsp2.0有一套標準的標記庫---jstl.使用標記庫可以使jsp中的script代碼減少,畢竟從MVC設計理念來講,jsp只起到顯示的作用,應最大限度的減少script代碼.

關於jstl的用法以及如何進行標籤庫的簡單開發本博客jsp分類可以找到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章