動作指令與編譯指令不間,編譯指令是通知 Servlet 引擎的處理訊息,而動作指令只是運行時的指令碼動作。編譯指令在將JSP 編譯成 Servlet 時起作用:處理指示通常可替換成 Java指令碼,是 JSP指令碼的標準化寫法。
JSP7個動作指令如下 :
jsp:forward: 執行頁面轉向,將請求的處理轉寄到下一個頁面。
jsp:param: 用於傳遞參數,必須與其他支援參數曲標籤一起使用。
jsp:include: 用於動態引入一個 JSP 頁面。
jsp:plugin: 用於下載 JavaBean 或 Applet 到用戶端執行。
jsp:useBean: 使用 JavaBean。
jsp:setProperty: 修改 JavaBean 執行個體的屬性值。
jsp:getProperty: 擷取 JavaBean 執行個體的屬性值。
1、forward指令
forward指令用於將頁面響應轉寄給另外的頁面。既可以轉寄給靜態HTML頁面,也可以轉寄到動態JSP頁面,或者轉寄到容器中的Servlet。
JSP的forward指令的格式如下。
對於JSP 1.0,使用如下文法:
<jsp:forward page="{relativeURL|<%=expression%>}"/>
對於JSP 1.1以上,可使用如下文法:
<jsp:forward page="{relativeURL|<%=expression%>}">
{<jsp:param.../>}
</jsp:forward>
第二種文法用於在轉寄時增加額外的請求參數。增加的請求參數的值可以通過HttpServletRequest類的getParameter()方法擷取。
下面樣本頁面使用了forward動作指令來轉寄使用者請求。
<jsp:forward page="forward-result.jsp">
<jsp:param name="age" value="29"/>
</jsp:forward>
將用戶端請求轉寄到forward-result.jsp頁面,轉寄請求時增加了一個請求參數:參數名為age,參數值為29。
在forward-result.jsp頁面中,使用request內建對象(request內建對象是HttpServletRequest的執行個體)來擷取增加的請求參數值。
<!-- 使用request內建對象擷取age參數的值 -->
<%=request.getParameter("age")%>
執行forward指令轉寄請求時,用戶端的請求參數不會丟失。
執行forward指令轉寄請求時,使用者請求的地址沒有發生變化,但頁面內容完全變為被forward目標頁的內容。
2、include指令
include指令是一個動態include指令,也用於匯入某個頁面,它不會匯入被include頁面的編譯指令,僅僅將被匯入頁面的body內容插入本頁面。
下面是include動作指令的文法格式:
<jsp:include page="{relativeURL│<%=expression%>}" flush="true"/>
或者
<jsp:include page="{relativeURL│<%=expression%>}" flush="true">
<jsp:param name="parameterName" value="patameterValue"/>
</jsp:include>
flush屬性用於指定輸出緩衝是否轉移到被匯入檔案中。如果指定為true,則包含在被匯入檔案中;如果指定為false,則包含在原檔案中。對於JSP 1.1舊版本,只能設定為false。
對於第二種文法格式,則可在被匯入頁面中加入額外的請求參數。
下面頁面使用了動態匯入文法來匯入指定JSP頁面。
<!-- 使用動態include指令匯入頁面 -->
<jsp:include page="scriptlet.jsp" />
上面頁面中粗體字代碼使用了動態匯入文法來匯入了scriptlet.jsp。表面上看,該頁面的執行效果與使用靜態include匯入的頁面並沒有什麼不同。但查看jsp-include.jsp頁面產生Servlet的原始碼,可以看到如下片段:
//使用頁面輸出資料流,產生HTML標籤內容
out.write("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.0 Transitional//EN/ ">/r/n");
out.write("<HTML>/r/n");
out.write("<HEAD>/r/n");
out.write("<TITLE>jsp-include測試</TITLE>/r/n");
out.write("</HEAD>/r/n");
out.write("<BODY>/r/n");
//動態匯入,直接引入scriptlet.jsp頁面
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response,
"scriptlet.jsp", out);
out.write("/r/n");
out.write("</BODY>/r/n");
out.write("</HTML>/r/n");
out.write("/r/n");
上面程式碼片段中粗體字代碼顯示了動態匯入的關鍵:動態匯入只是使用一個include方法來插入目標頁面的內容,而不是將目標頁面完全融入本頁面中。
歸納起來,靜態匯入和動態匯入有如下兩點區別:
靜態匯入是將被匯入頁面的代碼完全融入,兩個頁面融合成一個整體Servlet;而動態匯入則在Servlet中使用include方法來引入被匯入頁面的內容。
靜態匯入時被匯入頁面的編譯指令會起作用;而動態匯入時被匯入頁面的編譯指令則失去作用,只是插入被匯入頁面的body內容。
除此之外,執行include動態指令時,還可增加額外的請求參數。
在上面的JSP頁面中的粗體字代碼同樣使用jsp:include指令匯入頁面,而且在jsp:include指令中還使用param指令傳入參數,該參數可以在forward-result.jsp頁面中使用request對象擷取。
3、UseBean指令
<jsp:useBean>標籤表示用來在JSP頁面中建立一個BEAN執行個體並指定它的名字以及作用範圍。
文法:
<jsp:useBean id="name" scope="page | request | session | application" typeSpec />
其中typeSpec有以下幾種可能的情況:
class="className" | class="className" type="typeName" | beanName="beanName" type="typeName" | type="typeName" |
註:
你必須使用class或type,而不能同時使用class和beanName。beanName表示Bean的名字,其形式為“a.b.c”。
4、GetProperty指令
<jsp:getProperty>標籤表示擷取BEAN的屬性的值並將之轉化為一個字串,然後將其插入到輸出的頁面中。
文法:
<jsp:getProperty name="name" property="propertyName" />
註:
1、在使用<jsp:getProperty>之前,必須用<jsp:useBean>來建立它。
2、不能使用<jsp:getProperty>來檢索一個已經被索引了的屬性。
3、能夠和JavaBeans組件一起使用<jsp:getProperty>,但是不能與Enterprise Java Bean一起使用。
5、SetProperty指令
<jsp:setProperty>標籤表示用來設定Bean中的屬性值。
文法:
<jsp:setProperty name="beanName" prop_expr />
其中prop_expr有以下幾種可能的情形:
property="*" | property="propertyName" | property="propertyName" param="parameterName" | property="propertyName" value="propertyValue"
6、Plugin指令
<jsp:plugin>標籤表示執行一個applet或Bean,有可能的話還要下載一個Java外掛程式用於執行它。
文法:
<jsp:plugin
type="bean | applet"
code="classFileName"
codebase="classFileDirectoryName"
[ name="instanceName" ]
[ archive="URIToArchive, ..." ]
[ align="bottom | top | middle | left | right" ]
[ height="displayPixels" ]
[ width="displayPixels" ]
[ hspace="leftRightPixels" ]
[ vspace="topBottomPixels" ]
[ jreversion="JREVersionNumber | 1.1" ]
[ nspluginurl="URLToPlugin" ]
[ iepluginurl="URLToPlugin" ] >
[ <jsp:params>
[ <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> ]+
</jsp:params> ]
[ <jsp:fallback> text message for user </jsp:fallback> ]
</jsp:plugin>
註:
<jsp:plugin>元素用於在瀏覽器中播放或顯示一個對象(典型的就是applet和Bean),而這種顯示需要在瀏覽器的java外掛程式。
當Jsp檔案被編譯,送往瀏覽器時,<jsp:plugin>元素將會根據瀏覽器的版本替換成<object>或者<embed>元素。注意,<object>用於HTML 4.0 ,<embed>用於HTML 3.2。
一般來說,<jsp:plugin>元素會指定對象是Applet還是Bean,同樣也會指定class的名字,還有位置,另外還會指定將從哪裡下載這個Java外掛程式。
7、param指令
param指令用於設定參數值,這個指令本身不能單獨使用,單獨的param沒有實際意義,param指令可與一下三個指令結合使用:
jsp:include
jsp:forward
jsp:plugin
param指令的文法格式如下:
<jsp:param name="paramName" value="paramValue">