在jsp頁面被翻譯成Servlet源代碼的過程當中,當容器遇到標準動做元素時,就調用與之相對應的Servlet類方法來代替它,全部標準動做元素的前面都有一個JSP前綴做爲標記,通常形式如:<jsp:標記名… 屬性…/>。有些標準動做中間還包含一個體,即一個標準動做元素中又包含了其餘標準動做元素或者其餘內容,包括體的標準動做的使用格式以下:java
<jsp:標記名…屬性…>web
<jsp:標記名…屬性以及參數…/>小程序
</jsp:標記名>瀏覽器
根據各個標準動做的功能,能夠將這些標準動做分紅如下6組:session
1. jsp中使用到JavaBean的標準動做:<jsp:useBean> 定義使用一個JaveBean實例,ID屬性定義了實例名稱;<jsp:getProperty>從一個JavaBean中獲取一個屬性值,並將其添加到響應中;<jsp:setProperty>設置一個JavaBean中的屬性值; app
2. 在jsp中包含其餘jsp文件或者web資源的標準動做:<jsp:include>在請求處理階段包含來自一個Servlet或者jsp文件的響應,注意與include指令的不一樣; jsp
3. 將到達的請求轉發給另一個jsp頁面或者web資源以便進一步的操做的標準動做:<jsp:forward>將某個請求的處理轉發到另外一個Servlet或者jsp頁面; ide
4. 在其餘標準動做的中間指定參數的標準動做:<jsp:param>對使用<jsp:include>或者<jsp:forward>傳遞到另一個Servlet或者jsp頁面的請求添加一個傳遞參數值; 函數
5. 在客戶端的頁面嵌入java對象(例如applet,是運行在客戶端的小java程序)的標準動做:<jsp:plugin>根據瀏覽器類型爲java插件生成Object或者Embed標記;<jsp:params>;<jsp:fallback>;
6. 僅僅用於標記文件的標準動做:
<jsp:attribute>;<jsp:body>;<jsp:invoke>;<jsp:dobody>;<jsp:element>;<jsp:text>;<jsp:output>
使用<jsp:useBean>標準動做可引用一個將在jsp頁面中使用的javaBean類,javaBean的使用實現了邏輯處理和頁面顯示在必定程度上的分離,從而能夠增長代碼的可重用性,若是將邏輯處理寫在一個javaBean類中,在其餘全部jsp頁面程序中便可使用<jsp:useBean>標準動做來引用該javaBean類,使用形式以下:
<jsp:useBean id=」name」 class=」package.class」 scope=」….」 type=」…」/>
<jsp:useBean>標準動做還能夠包含一個體,如:<jsp:setProperty>動做,在第一次建立這個實例的時候,就會使用<jsp:setProperty>動做來進行參數的賦值操做,也就是說,若是該頁面中已經存在了JavaBean類的實例,則不會再執行<jsp:setProperty>動做所進行的參數賦值。另外,,<jsp:useBean>標準動做也並不意味着每次都要建立一個實例,若是頁面中已經存在該JavaBean的實例,則只直接使用這個實例,使用形式以下:
<jsp:useBean id=」name」 class=」package.class」 scope=」….」 type=」…」/>
<jsp:標記名… 屬性以及參數…/>
……
</jsp:useBean>
代碼說明: 使用class屬性來指定須要實例化的JavaBean類,而後使用id來標識該實例,type屬性用來指定該實例化的JavaBean類將要實現的一個接口或者一個超類;scope屬性能夠用來指定該JavaBean實例可以關聯到多個頁面。
<jsp:useBean>標準動做元素中使用的屬性以下:
· id:給一個類實例取名並做爲整個jsp頁面的惟一標記,若是須要建立一個新的JaveBean實例,這也是引用這個新JavaBean實例的名稱
· class:這是jsp頁面引用javaBean組件的完整Java類名(必定要包括包名).若是容器沒有找到指定名的類實例,則會使用這個class屬性指定的完整類名來建立一個新的JavaBean實例進行引用
· type:此屬性告訴容器這裏的JavaBean實例須要實現一個Java接口,或者JavaBean實例須要擴展一個超類,再翻譯階段會使用到這個屬性,type屬性不是必須添加,可是必須添加class和type屬性中多個一個
· scope:指定這個JavaBean再哪一種上下文內可用,該屬性能夠取下面的4個值之一:page,request,session,application;page表示該JavaBean只有在當前頁面內可用(保存在當前頁面的PageContext內);request表示該JavaBean在當前的客戶請求內有效(保存在ServletRequest對象內);session表示該JavaBean對當前httpSession內的全部頁面都有效。
使用<jsp:setProperty>動做能夠修改JavaBean實例種的屬性變量,其中能夠有兩種使用形式:
1. <jsp:setProperty>標準動做嵌入在<jsp:useBean>標準動做的體內,但這時只能在JavaBean被建立的實例中執行,使用形式以下:
1. <jsp:useBean id=」myName」 …>
2. <jsp:setProperty name=」myName」 property=」someProperty」…/>
3. </jsp:useBean>
2. 在<jsp:useBean>動做的後面使用<jsp:setProperty>標準動做元素,使用形式以下:
1. <jsp:useBean id=」myName」 …/>
2. <jsp:setProperty name=」myName」 property=」someProperty」…/>
代碼說明: 無論指定的JavaBean是新建立的仍是直接使用的實例,在<jsp:useBean>動做以後使用的<jsp:setProperty >標準動做都會被執行。其中<jsp:setProperty >共有4個屬性能夠選擇設置:
1. name:這個屬性是必須設置的,由於經過這個屬性才能知道針對哪一個JavaBean實例的屬性進行設置;
2. property:也是必須設置的,它告訴容器須要對JavaBean實例中的哪些屬性進行設置,這裏有個特殊的用法,就是把property屬性設置爲」*」,該設置表示全部名字與JavaBean屬性名字匹配的請求參數都被傳遞給相應屬性的set方法;
3. value:這個屬性是可選的,指定JavaBean屬性的值;
4. param:這個屬性和value屬性不能同時使用,兩者之間只能使用一個,當兩個屬性都沒有在<jsp:setProperty >動做中指定時,指定的屬性變量將使用JavaBean中的默認值(例如構造函數中的默認值),若是使用param屬性,容器就會把property指定的屬性變量設置爲param指定的請求參數的值。
該標準動做與前一個<jsp:setProperty >標準動做相對應,用來提取指定的JavaBean屬性值,而後轉換成字符串輸出,該動做有兩個必需要設置的屬性:
1. name:表示JavaBean在jsp中的標記;
2. property:表示提取JavaBean中哪一個屬性的值。
使用例子:
1. … …
2. <html>
3. <body>
4. <!—定義一個類實例,以testBean做爲標記,並給message屬性賦值」hello」 -- >
5. <jsp:useBean id=」testBean」 class=」com.helloworld.SimpleBean」>
6. <jsp:setProperty name=」testBean」 property=」message」 value=」Hello」/>
7. </jsp:useBean>
8. <H1>經過<jsp:getProperty>動做獲得message屬性值:</H1>
9. <I><jsp:getProperty name=」testBean」 property=」message」/></I>
10.<! – 從新給message賦值 -- >
11.<jsp:setProperty name=」testBean」 property=」message」 value=」hello World」/>
12.<! – 利用EL表達式獲取message的值 -- >
13.${testBean.message}
14.</body>
15.</html>
1. -----------------JavaBean--------
2. Package com.helloworld:
3. Public class SimpleBean{
4. Private String message=」」:
5. Public String getMessage(){
6. Return this message:
7. }
8. Public void setMessage(String message){
9. This.message=message:
10.}
11.}
該標準動做與前面介紹的include指令方法很是相似,也是將特定的外在文件插入到當前頁面中,其使用語法以下:
<jsp:include page=」…url…」 flush=」true|false」/>
該標準動做還能夠包含一個體,具體形式以下:
<jsp:include page=」…url…」 flush=」true|false」/>
<jsp:param …/>
</jsp:include>
經過在<jsp:include>動做體中使用<jsp:param>動做,能夠用來指定jsp頁面中可用的其餘請求參數,以後能夠在當前的jsp文件以及引用的外在文件中使用這些請求參數。
在這着重說明就是<include>指令與<jsp:include>動做存在的差別。Include指令是在jsp翻譯時進行文件的合併,而後對合並的總體文件進行編譯;而<jsp:include>標準動做則首先進行自身的翻譯和編譯,而後在用戶請求階段進行二進制文件的合併。
<jsp:forward>標準動做把請求轉移到另一個頁面,這個標準動做只有一個屬性page,page屬性包含一個相對url地址,如:
<jsp:forward page=」/utils/errorReporter.jsp」/>
<jsp:forward page=」<%=someJavaExpression %>」 />
第一行的page值是直接給出的,第二行的<jsp:forward>標準動做中的page值是在請求時動態計算的。
7、
參數設置的標準動做<jsp:param>
該<jsp:param>標準動做通常與<jsp:include>以及<jsp:forward>等配套使用,用來進行參數的傳遞,其通常形式以下:
<jsp:param name=」…名稱…」 value=」…值…」/>
每一個<jsp:param>標準動做都會建立一個即有名又有值的參數,這樣能夠經過<jsp:include>標準動做所包含的外在文件以及經過<jsp:forward>轉移到另外頁面,均可以使用這些參數,如:
1. <html>
2. <body>
3. <jsp:include page=」date.jsp」>
4. <jsp:param name=」serverName」 value=」zzb」/>
5. </jsp:include>
6. </body>
7. </html>
則說明在請求時所包含的date.jsp文件可使用經過<jsp:param>標準動做定義的serverName參數。
· <jsp:plugin>:用於指定在客戶端運行的插件
使用<jsp:plugin>標準動做能夠在頁面程序中插入一個java插件,通常爲java applet小程序(也能夠是任何javaBean類),它隨着頁面程序一塊兒傳輸到客戶端,而且在客戶端運息, <jsp:plugin>標準動做的通常使用形式以下:
<jsp:plugin type=」…applet 或者 JavaBean…」 code=」…」 codebase=」…」 archive=」…」 …>
</jsp:plugin>
在該動做中能夠設置多個屬性,其中大部分是<object>或者<EMBED>標記的HTML屬性,如:name,code,codebase,archive,align,width,height,jreversion,title等.其中type屬性用來指定該插件是applet小程序仍是JavaBean類。
· <jsp:params>:用於向引用的插件傳遞參數值,通常包含在<jsp:plugin>動做體內
<jsp:params>標準動做的體由多個<jsp:param>動做組成,而且該標準動做只能使用在<jsp:plugin>標記的體中,通常使用形式以下:
1. <jsp:plugin type=」…applet|JavaBean…」 code=」…」 …>
2. <jsp:params>
3. <jsp:param …/>
4. <jsp:param …/>
5. …
6. </jsp:params>
7. </jsp:plugin>
說明:<jsp:params>動做體中包括多個<jsp:param>動做來給插件類中的屬性變量賦值,每個<jsp:param>給運行在客戶端的插件傳遞一個參數
· <jsp:fallback>標準動做
該標籤是與<jsp:plugin>標準動做配合使用的,它告訴客戶端瀏覽器當客戶端不支持該插件運行時將要顯示的HTML頁面或者jsp代碼,如下是該標準動做的通常使用形式:
<jsp:fallback>
…客戶端瀏覽器不支持插件運行時顯示html或者jsp代碼…
</jsp:fallback>
說明:體中嵌入的代碼只有在客戶端不支持該插件運行時才被執行。