動作指令與編譯指令不間,編譯指令是通知 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">
