官术网_书友最值得收藏!

4.5 JSP中的動作指令

JSP動作是一種特殊的標簽,利用XML語法格式的標簽來控制JSP引擎的行為,影響JSP運行時的功能和返回客戶端的響應。JSP動作都以<jsp:”開頭,相對應地則以 “/>”結束。

JSP動作主要包括。

? <jsp:include>:在頁面中包含一個動態或靜態文件。

? <jsp:forward>:把請求轉到一個新的頁面。

? <jsp:param>:用來為其他標簽傳遞參數信息。

? <jsp:useBean>:尋找或者實例化一個JavaBean。

? <jsp:setProperty>:設置JavaBean的屬性。

? <jsp:getProperty>:輸出某個JavaBean的屬性。

本小節將首先詳細介紹前3個動作指令,在本書的第6章中結合JavaBean再詳細介紹其余3個與JavaBean相關的動作指令。

4.5.1 <jsp:include>動作指令

<jsp:include>動作指令用來包含一個靜態或動態的頁面到一個JSP頁面文件中。包含的靜態或動態的資源在page屬性中用URL的形式指定。

<jsp:include>動作指令的語法形式為:

    <jsp: include page =“{relativeURL | <%=expression%>}" flush = "true" />

或:

    <jsp: include page = “{relativeURL | <%=expression%>}" flush = "true">
    <jsp: param name = “parameterName” value = “{parameterValue | <%=expression%>}” />
            ……
    </jsp: include >

前一種是空標簽的形式,后一種是體標簽的形式,如果在包含資源的同時還要傳遞參數,則必須使用后一種體標簽的形式。

<jsp:include>動作指令與前面介紹過的include編譯指令不同,主要體現在兩個方面。

? <jsp:include>動作指令是在JSP頁面被請求執行時才將文件包含進來,而不像include編譯指令那樣在JSP頁面被編譯時就將文件包含進來。

? include編譯指令引入被包含文件時,是在JSP頁面被轉化成Servlet類之前就和包含頁面融和到一起的,而<jsp:include>動作指令是在需要引入被包含文件時,才動態調用被包含文件編譯后所生成的Servlet類輸出的內容的。因此,當被包含的JSP文件的內容被修改后,使用<jsp:include>動作指令引入被包含文件的JSP頁面不需要重新編譯,而使用include編譯指令引入被包含文件的JSP頁面卻需要重新編譯。

通過上述比較可以發現:<jsp:include>動作指令的文件引入時間決定了它的效率比include編譯指令稍微差一點,而且被引用文件不能包含某些JSP代碼(例如,不能設置HTTP頭等),但它的靈活性和執行效率卻要比include編譯指令好得多。

為了更好地理解這兩種包含的區別,下面通過對實例4-4稍加修改來進行詳細的說明。

在實例4-4中使用了include編譯指令來包含include.jsp頁面,結果顯示如圖4.25所示的錯誤信息。下面將實例4-4頁面中的include編譯指令換成<jsp:include>動作指令,修改后的代碼如下所示。

    <%@ page contentType="text/html;charset=GB2312"%>
    <html>
    <body>
    include編譯指令測試<br>
    <%-- 使用include動作指令包含include.jsp頁面--%>
    <jsp: include page="include.jsp" />
    </body>
    </html>

這樣,即使被包含的include.jsp頁面中也使用了page編譯指令,程序照常能夠正確執行。這是因為使用<jsp:include>動作指令,包含頁面和被包含的頁面是各自被JSP引擎編譯的。

4.5.2 <jsp:forward>動作指令

<jsp:forward>動作指令用于將請求轉發到其他的JSP頁面、HTML頁面或者Servlet類,用來實現頁面的重定向功能。

<jsp:forward>動作指令的語法形式為:

    <jsp:forward page="{relativeURL | <%=expression%>}"/>

    <jsp:forward page="{relativeURL | <%=expression%>}">
    <jsp:param name="parameterName" value="{parameterValue | <%=expression%>}"/>
    </jsp:forward>

與<jsp:include>動作指令一樣,<jsp:forward>動作指令的前一種語法形式是空標簽的形式,后一種是體標簽的形式,如果在包含資源的同時還要傳遞參數,則必須使用后一種體標簽的形式。

通過<jsp:forward>動作指令的語法形式我們可以看出,它與<jsp:include>動作指令的語法格式一樣,都是使用page屬性來設置將要定向的文件或URL。那么這兩個動作指令有什么區別呢?下面通過實例4-5來講解它們兩者的區別。

【實例4-5】<jsp:forward>動作指令的應用。

    01  <%@ page contentType="text/html;charset=GB2312"%>
    02  <html>
    03  <body>
    04  include編譯指令測試<br>
    05  <jsp:forward page="include.jsp" /> <%-- 使用forward動作指令轉向到include.jsp頁面
--%>
    06 </body>
    07  </html>

【代碼說明】在實例4-5頁面的第5行中使用<jsp:forward>動作指令將頁面請求轉發到JSP頁面include.jsp。

【運行結果】實例4-5的JSP頁面的執行結果如圖4.36所示。

通過與如圖4.35所示的執行結果進行比較可以發現,使用<jsp:forward>動作指令的頁面只返回重定向到的頁面的內容,而使用<jsp:include>動作指令的頁面則返回包含和被包含頁面共同組成的內容。

圖4.36 使用<jsp:forward>動作指令進行頁面轉向

因此,可以得出結論,<jsp:forward>動作指令用來從一個當前正在執行的JSP文件重定向到另一個資源去執行,當前JSP文件中<jsp:forward>動作指令以下的程序代碼就不會再被執行了,而且返回給客戶端瀏覽器的內容只是由被重定向的資源來生成。

4.5.3 <jsp:param>動作指令

<jsp:param>動作指令主要用來傳遞參數,為其他動作指令提供附加信息,它必須和<jsp:include>、<jsp:forward>等動作指令一起使用,可以將<jsp:param>動作指令中的值傳遞到其他動作指令所要加載的文件中去,從而實現向所加載的頁面動態傳遞參數的功能。

<jsp:param>動作指令的語法格式如下:

    <jsp:param name="paramName"  value="paramValue"/>

其中name屬性表示傳遞的參數名,value屬性表示傳遞的參數值。

【實例4-6】使用<jsp:param>動作指令實現從1累加到300求和。

    01  <%@ page contentType="text/html; charset=GB2312" %>
    02  <%@ page language="java" %>
    03  <HTML>
    04  <BODY>
    05  <P>計算求和:
    06     <jsp:include page="count.jsp"> <%--在使用include動作指令包含頁面時傳遞參數--%>
    07     <jsp:param name="computer" value="300"/> <%--傳遞的參數值為300--%>
    08     </jsp:include>
    09  </BODY>
    10  </HTML>

【代碼說明】在實例4-6頁面的第6行中使用<jsp:include>動作指令將count.jsp頁面包含進來,并在第7 行使用<jsp :param>動作指令在包含count.jsp頁面的同時向該頁面傳遞參數,也就是說將參數computer的參數值300傳遞給count.jsp頁面。

count.jsp頁面的代碼定義如下:

    01  <%@ page contentType="text/html;charset=GB2312" %>
    02  <HTML>
    03  <BODY>
    04      <%  String str=request.getParameter("computer");   //獲取傳遞的參數值
    05          int n=Integer.parseInt(str);                   //將字符串轉換為整數類型的值
    06          int sum=0;
    07          for(int i=1;i<=n;i++)                          //進行累加操作
    08             { sum=sum+i;
    09             }
    10      %>
    11  <P>
    12      從1到<%=n%>的連續和是:
    13  <BR>
    14    <%=sum%>
    15  </BODY>
    16  </HTML>

【代碼說明】在該頁面的第4行接收<jsp:param>動作指令傳遞來的參數,第5行將該參數從字符串轉換為整數類型,第7~9行使用for循環計算從1累加到300的和,并將結果在第14行輸出到頁面上。

【運行結果】實例4-6的JSP頁面的執行結果如圖4.37所示。

圖4.37 使用<jsp:param>動作指令傳遞參數

主站蜘蛛池模板: 阿拉尔市| 顺平县| 徐闻县| 荥阳市| 会同县| 儋州市| 奎屯市| 广宁县| 黔西县| 青海省| 崇文区| 都兰县| 江孜县| 丹寨县| 老河口市| 凤城市| 阿荣旗| 资阳市| 宾阳县| 赤城县| 平邑县| 手机| 文昌市| 岳普湖县| 获嘉县| 彩票| 铅山县| 庆阳市| 遵义县| 克什克腾旗| 临江市| 德保县| 甘孜| 辽阳县| 赣州市| 班戈县| 宁海县| 肥城市| 普定县| 凤冈县| 屯门区|