1. 程式人生 > >jsp 的 7 個動作指令

jsp 的 7 個動作指令

applet 導入 依然 gui 轉發 創建 servle 支持 getprop

動作指令與編譯指令不同,編譯指令是通知 Servlet 引擎的處理消息,而動作指令只是運行時的動作。編譯指令在將 JSP 編譯成 Servlet 時起作用;而處理指令通常可替換成 JSP 腳本,它只是 JSP 腳本的標準化寫法。

JSP 動作指令主要有如下 7 個:

1、jsp:forward:執行頁面轉向,將請求的處理轉發到下一個頁面。

2、jsp:param:用於傳遞參數,必須與其他支持參數的標簽一起使用。

3、jsp:include:用於動態引入一個 JSP 頁面

4、jsp:plugin:用於下載 JavaBean 或 Applet 到客戶端執行

5、jsp:useBean:創建一個 JavaBean 的實例

6、jsp:setProperty: 設置 JavaBean 實例的屬性值

7、jsp:getProperty: 獲取 JavaBean 實例的屬性值

forward 指令

forward 指令用於將頁面響應轉發到另外的頁面。既可以轉發到靜態的 HTML 頁面,也可以轉發到動態的 JSP 頁面,或者轉發到容器中的 Servlet。

forward 指令格式如下:

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

  

對於 JSP1.1 以上規範,可以使用如下形式:

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

第二種語法可以添加額外的參數,增加的參數可通過 HttpServletRequest 實例的 getParameter() 方法獲取。

例子:

<jsp:forward page="form.jsp">
    <jsp:param name="age" value="29" />
</jsp:forward>

獲取參數:

<input type="hidden" name="age" value="<%=request.getParameter("age")%>">

使用 forward 指令轉發請求時,用戶請求的地址不會改變,客戶端的請求參數也不會丟失。

從表面上看,<jsp:forward ... /> 指令似乎將用戶請求轉發到了一個新頁面,但實際上只是采用了新頁面來對用戶請求生成響應 -- 請求依然是一次請求,所以請求參數、請求屬性都不會丟失。

include 指令

include 指令是一個動態 include 指令,也用於包含某個頁面,它不會導入被 include 頁面的編譯指令,僅僅將被導入頁面的 body 內容插入本頁面。

語法格式:

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

或者:

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

flush 屬性用於指定輸出緩存是否轉移到被導入文件中。如果指定為 true,則包含在被導入文件中;如果指定為 false,則包含在原文件中。

表明上看,該頁面的執行效果與使用靜態 include 導入的頁面沒有什麽不同。但查看生成的源碼,可以發現:動態導入只是使用一個 include 方法來插入目標頁面的內容,而不是將目標頁面完全融入本頁面中。

歸納起來,靜態導入和動態導入有如下三點區別:

1、靜態導入是將被導入頁面的代碼完全融入,兩個頁面融合成一個整體 Servlet;而動態導入則在 Servlet 中使用 include 方法來引入被導入頁面的內容

2、靜態導入時被導入頁面的編譯指令會起作用;而動態導入時被導入頁面的編譯指令則失去作用,只是插入被導入頁面的 body 內容

3、動態包含還可以增加額外的參數。

useBean、setProperty、getProperty 指令

這三個指令都是與 JavaBean 相關的指令,其中 useBean 指令用於在 JSP 頁面中初始化一個 Java 實例;setProperty 指令用於為 JavaBean 實例的屬性設置值;getProperty 指令用於輸出 JavaBean 實例的屬性。

useBean 的語法格式如下:

<jsp:useBean id="name" class="classname" scope="page | request | session | application" />

  

其中,id 屬性是 JavaBean 的實例名,class 屬性確定 JavaBean 的實現類。scope 屬性用於指定 JavaBean 實例的作用範圍,該範圍有以下 4 個值:

page:該 JavaBean 實例僅在該頁面有效。

request:該 JavaBean 實例在本次請求有效。

session:該 JavaBean 實例在本次 session 內有效。

application:該 JavaBean 實例在本應用內一直有效。

setProperty 語法格式如下:

<jsp:setProperty name="BeanName" property="propertyName" value="value" />

其中,name 屬性確定需要設定 JavaBean 的實例名;property 屬性確定需要設置的屬性名;value 屬性則確定需要設置的屬性值。

getProperty 語法格式如下:

<jsp:getProperty id="BeanName" property="propertyName" />

其中,name 屬性確定需要輸出的 JavaBean 的實例名;property 屬性確定需要輸出的屬性名。

例子:

<jsp:useBean id="person" class="com.baiguiren.Person" scope="page" />
<jsp:setProperty name="person" property="name" value="baiguiren" />
<jsp:setProperty name="person" property="age" value="24" /> 
<jsp:getProperty name="person" property="name" /><br/>
<jsp:getProperty name="person" property="age" />

  

以上三個指令可以完全不使用,我們可以換成以下寫法,其內部執行是完全一致的:

       <%
        // 實例化 JavaBean 實例,實現類為 com.baiguiren.Person,該實例的實例名為 person
        Person person = new Person();
        // 將 person 放入 page 範圍中
        pageContext.setAttribute("person", person);
        // 設置 person 的 name 屬性值
        person.setName("baiguiren");
        // 設置 person 的 age 屬性值
        person.setAge(23);
        %>

        <!-- 輸出 person 的 name 屬性值 -->
        <%=person.getName()%> <br/>
        <!-- 輸出 person 的 age 屬性值 -->
        <%=person.getAge()%>    

  

使用 useBean 標簽時,除在頁面腳本中創建了 JavaBean 實例之外,該標簽還會將該 JavaBean 實例放入指定的 scope 中,所以通常還需要在腳本中將該 JavaBean 放入指定 scope 中,如下面的代碼片段所示:

// 將 p1 放入 page 的生存範圍中
pageContext.setAttribute("p1", p1);
// 將 p1 放入 request 的生存範圍中
request.setAttribute("p1", p1);
// 將 p1 放入 session 的生存範圍中
session.setAttribute("p1", p1);
// 將 p1 放入 application 的生存範圍中
application.setAttribute("p1", p1);

  

param 指令

param 指令用於設置參數值,這個指令本身不能單獨使用,因為單獨的 param 指令沒有任何實際意義。

param 指令可以與以下三個指令結合使用。

jsp:include

jsp:forward

jsp:plugin

當與 include 指令結合使用時,param 指令用於將參數值傳入被導入的頁面;當與 forward 指令結合使用時,param 指令用於將參數值傳入被轉向的頁面

param 指令的語法格式:

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

  

jsp 的 7 個動作指令