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

4.5 動作組件

JSP動作組件是一些XML語法格式的標記,被用來控制Web容器的行為。利用JSP動作組件可以動態地向頁面中插入文件、重用JavaBean組件、把用戶重定向到另外的頁面等。常見的JSP動作組件有以下幾種:

·<jsp:include>——在頁面被請求的時候引入一個文件。

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

·< jsp:param>——在動作組件中引入參數信息。

·< jsp:plugin>——執行一個Applet或Bean。

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

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

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

這里主要介紹前四個JSP動作組件。后三個動作組件將在4.8節單獨介紹。

1.include動作組件

include動作組件把指定文件插入正在生成的頁面。其語法如下:

    < jsp:include page="文件名" flush="true"/>。

這里flush參數必須為true,不能為false值。下面通過向JspBasic應用中添加頁面includeaction.jsp來演示如何使用include動作組件,完整的代碼如程序4-14所示。

程序4-14:includeaction.jsp

    <%@ page contentType="text/html; charset=GB2312" %>
    <HTML>
    <BODY ><FONT Size=1>
    <h1>include動作示例</h1>
    <BR>
    <jsp:include page="copyright.html" flush="true"/>
    </BODY>
    </HTML>

保存程序并重新發布Web應用,打開IE瀏覽器,在地址欄輸入http://localhost:8080/JspBasic/includeaction.jsp,得到如圖4-12所示的運行結果頁面,可以看到include動作組件將版權信息頁面加入到了JSP頁面。

圖4-12 通過include組件導入其他頁面

注意:include動作組件和include指令元素有很大的不同。動作組件在執行時才對包含的文件進行處理,因此JSP頁面和它所包含的文件在邏輯上和語法上是獨立的,如果對包含的文件進行了修改,那么運行時可以看到所包含文件修改后的結果。而靜態的include指令包含的文件如果發生變化,必須重新將JSP頁面轉譯成Java文件,否則只能看到所包含的修改前的文件內容。因此,除非被包含的文件經常變動,否則使用include指令將獲得更好的性能。

2.forward動作組件

forward動作組件用于將瀏覽器顯示的網頁導向至另一個HTML網頁或JSP網頁,客戶端看到的地址是A頁面的地址,而實際內容卻是B頁面的內容。其語法如下:

    <jsp:forward page="網頁名稱">

page屬性包含的是一個相對URL, page的值既可以直接給出,也可以在請求的時候動態計算。

注意:在使用forward之前,不能有任何內容輸出到客戶端,否則會有意外拋出。

下面通過一個示例來演示如何使用forward動作組件。動態廣告欄是網頁中要經常用到的,這里以一個JSP頁面為廣告欄的模板,每次頁面被請求時根據一個隨機數利用forward動作組件來導向具體的廣告頁面。下面首先向JspBasic應用中添加廣告模板頁面forward.jsp,完整的代碼如程序4-15所示。

程序4-15:forward.jsp

    <%@page contentType="text/html; charset=UTF-8"%>
    <HTML>
    <HEAD>
    <TITLE>forward</TITLE>
    </HEAD>
    <BODY>
    <P>

當前推薦圖書清單:

    <% double i=Math.random();
    if(i>0.5)
    {
    %>
    <jsp:forward page="catalog1.html">
    </jsp:forward>
    <%
    }
    else
    {
    %>
    <jsp:forward page="catalog2.html">
    </jsp:forward>
    <%
    }
    %>
    </BODY>
    </HTML>

下面向JspBasic應用中添加兩幅廣告頁面:catalog1.html和catalog2.html,代碼分別如程序4-16和程序4-17所示。

程序4-16:catalog1.html

    <! DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
    <html>
    <head>
        <meta charset="UTF-8">
    <title>forward示例</title>
    </head>
    <body bgcolor="#FFFFFF">

當前推薦圖書清單:

    <ul>
    <li>國畫</li>
    <li>梅次故事</li>
    <li>朝夕之間</li>
    </ul>
    </body>
    </html>

程序4-17:catalog2.html

    <! DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
    <html>
    <head>
    <meta charset="UTF-8">
    <title>forward示例</title>
    </head>
    <body bgcolor="#FFFFFF">

當前推薦圖書清單:

    <ul>
    <li>Java EE編程技術 </li>
    <li>輕松掌握Struts 2</li>
    <li>信息系統引論</li>
    </ul>
    </body>
    </html>

保存程序并重新發布Web應用,打開IE瀏覽器,在地址欄輸入http://localhost:8080/JspBasic/forward.jsp,得到如圖4-13所示的運行結果頁面。刷新頁面,可以看到頁面在不斷變換。

圖4-13 程序4-15運行結果頁面

注意:<jsp:forward>標記從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象。<jsp:forward>標記以后的代碼,將不再執行。

3.param動作組件

param動作組件用于傳遞參數信息,必須配合include動作組件或forward動作組件一起使用。語法如下:

        < jsp:param name=參數名稱,value=值 />

當該組件與<jsp:include>一起使用時,可以將param組件中的值傳遞到include動作組件要加載的文件中去。

下面通過兩個頁面間傳遞參數來演示如何使用<jsp:param>動作組件。向JspBasic應用中添加發送參數頁面param1.jsp和接收參數頁面add.jsp,完整代碼分別如程序4-18和程序4-19所示。

程序4-18:param1.jsp

    <%@ page contentType="text/html; charset=GB2312" %>
    <HTML>
    <BODY>
      <P>向加載文件傳遞參數示例:</P>
          <jsp:include page="add.jsp">
              <jsp:param name="start" value="0" />
              <jsp:param name="end" value="100" />
          </jsp:include>
    </BODY>
    </HTML>

程序4-19:add.jsp

    <%@ page contentType="text/html; charset=GB2312" %>
    <HTML>
    <BODY>
        <% String start=request.getParameter("start");  //獲取值
          String end=request.getParameter("end");      //獲取值
    int s=Integer.parseInt(start);
    int e=Integer.parseInt(end);
            int sum=0;
            for(int i=s; i<=e; i++)
              { sum=sum+i;
              }
        %>
    <P>
      從<%=start%>到<%=end%>的連續和是:
    <BR>
      <%=sum%>
    </BODY>
    </HTML>

保存程序并重新發布Web應用,打開IE瀏覽器,在地址欄輸入http://localhost:8080/JspBasic/param1.jsp,得到如圖4-14所示的運行結果頁面。

圖4-14 <jsp:param>與<jsp:include>協作傳遞信息

程序說明:示例中<jsp:include>組件與<jsp:param>組件一起使用,<jsp:param>組件將指定的參數值傳遞到<jsp:include>組件包含的頁面。在被包含的頁面中,通過調用request對象的getParameter方法來獲取傳遞來的參數。

當該組件與<jsp:forward>一起使用時,將把參數導向要轉到的頁面。完整代碼分別如程序4-20和程序4-21所示。

程序4-20:param2.jsp

    <%@ page contentType="text/html; charset=GB2312" %>
    <HTML>
    <title>向jsp:forward傳遞參數示例:</title>
    <BODY>
    <P>向jsp:forward傳遞參數示例:
    <jsp:forward page="welcome.jsp">
        <jsp:param name="name" value="John" />
       </jsp:forward>
    </BODY>
    </HTML>

程序4-21:welcome.jsp

    <%@ page contentType="text/html; charset=GB2312" %>
    <HTML>
    <BODY>
    <%request.setCharacterEncoding("gb2312"); %>
    歡迎您!<%= request.getParameter("name")%><BR>
    </HTML>
    </BODY>

保存程序并重新發布Web應用,打開IE瀏覽器,在地址欄輸入http://localhost:8080/JspBasic/param2.jsp,得到如圖4-15所示的運行結果頁面。從頁面中可以看到參數信息已經成功地傳遞到welcome.jsp。

圖4-15 <jsp:param>與<jsp:forward>協作傳遞信息

4.plugin動作組件

plugin動作組件用來執行一個Applet或Bean。語法如下:

    <jsp:plugin type="bean | applet"  code="classFileName"
                        codebase="classFileDirectoryName" >

其中,type屬性指定將被執行的插件對象的類型,是Bean還是Applet。code屬性指定將會被Java插件執行的Java類的名字,必須以.class結尾。這個文件必須存在于codebase屬性指定的目錄中。codebase屬性指定將會被執行的Java類文件的目錄(或者是路徑),如果沒有提供此屬性,則默認使用<jsp:plugin>的JSP文件的目錄。

由于瀏覽器對Java插件的支持由于版本等原因經常會出現問題,因此<jsp:plugin>動作組件經常與<jsp:fallback>動作組件聯合使用,<jsp:fallback>與</jsp:fallback>之間的部分為Java插件啟動發生意外時執行的處理代碼。

下面通過在頁面中引入一個Applet來演示<jsp:plugin>動作組件的使用。

首先生成一個Applet。新建一個Java類,名稱為Circle,完整代碼如程序4-22所示。

程序4-22:Circle.java

    import java.applet.Applet;
    import java.awt.Color;
    import java.awt.Graphics;
    public class Circle extends Applet {
        public void paint(Graphics g){
        g.setColor(new Color(255,0,255));
        g.fillArc(0,0,50,50,0,360);
        }
    }

選擇NetBeans的“生成”→“編譯Circle.java”命令來編譯此Java文件。為保證JSP頁面能夠正確加載Applet類,還需要手工將Circle.java編譯后生成的Circle.class添加到JspBasic目錄下。

下面向Web應用添加一個JSP頁面,并通過<jsp:plugin>調用Applet。完整代碼如程序4-23所示。

程序4-23:plugin.jsp

    <%@ page contentType="text/html; charset=GB2312" %>
    <HTML>
    <BODY>
      <jsp:plugin type="applet" code="Circle.class"  >
        <jsp:fallback>
          Plugin tag OBJECT or EMBED not supported by browser.
        </jsp:fallback>
    </jsp:plugin>
    </body>
    </html>

保存程序并重新發布Web應用,打開IE瀏覽器,在地址欄中輸入http://localhost:8080/JspBasic/plugin.jsp,得到如圖4-16所示的運行結果。

圖4-16 通過< jsp:plugin >加載Applet插件

注意:如果在瀏覽器端無法啟動plugin,則會顯示<jsp:fallback></jsp:fallback>之間的文字。但如果因為路徑錯誤而無法加載Applet的Class文件,則并不會顯示<jsp:fallback></jsp:fallback>之間的文字。

說明:JSP 2.0版本后,JSP頁面可以作為標準的XML文檔來實現,因此除了以上介紹的常用動作標記外,JSP規范還支持一組XML文檔專用的標記,如<jsp:root>、<jsp:attribute>、<jsp:body>、<jsp:element>等。詳細信息請參考新的JSP 2.0規范。

主站蜘蛛池模板: 枣庄市| 新巴尔虎右旗| 连南| 嵊泗县| 道真| 安陆市| 容城县| 无为县| 安化县| 白水县| 青龙| 浏阳市| 武义县| 汕头市| 自贡市| 忻州市| 望都县| 昭觉县| 兴国县| 濉溪县| 翁源县| 河津市| 偏关县| 汾阳市| 互助| 铜梁县| 望都县| 酒泉市| 张掖市| 丹寨县| 江安县| 乐亭县| 布拖县| 台南市| 綦江县| 兴山县| 扶余县| 稷山县| 高青县| 甘洛县| 疏勒县|