不要急,我與你一起學習JSP(四)——JSP的基礎語法【二】


近幾天,我的 ADSL 上不了網了。幾乎在家裏,只能買碟看片。世界上有什麼大事,論壇中有多少 MM 灌水我都不知道。本來說,這帖要在週三時發出來。沒想到的是,昨天聯通公司才把網解決。10010的客服,我從回家開始打,一直打到夜裏12點,都沒人理。哎。。。


上次我們講到了 JSP 的指令操作。這次,我們要好好談談最後遺留下來的 JSP 動作。爲什麼要單用一章來講。主要有兩個原因,一個是上次說的內容太多,怕接受不了。還有一點就是,JSP 動作要了解的內容不是一般的多,而是二般的多。所以要單給出一章節來好好談論談論。得意


如同上次所云,JSP 動作用來控制 JSP 引擎的行爲,執行一些標準常用的 JSP 頁面的動作。好像和 JSP 指令相近。指令用於通知,不直接顯示出來,而動作是要控制,並對頁面進行製作。


JSP動作包括以下幾點內容:

1、jsp:include:動態且可控的 include 加載,比那個指令 include 要靈活。

2、jsp:useBean:使用 JavaBean 控件。

3、jsp:setProperty:設置 JavaBean 屬性。

4、jsp:getProperty:輸出 JavaBean 屬性

5、jsp:param:用於傳遞參數,必須與其它支持這參數的標籤一起使用。

6、jsp:forward:引導請求進入新的頁面。

7、jsp:plugin:插入一個 applet 或 Bean。


一、jsp:include

1、說明:

jsp:include 動作在即將生成的頁面上動態地插入文件,它在頁面運行時纔將文件插入,對被插入文件進行處理。


2、格式:

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


<jsp:include page="文件名" flush="true">  
  <jsp:param name="參數名 1" value="參數值 1" />  
  <jsp:param name="參數名 2" value="參數值 2" />  
  ……  
</jsp:include>

參數說明:

(1)page="文件名"

制定需要插入文件的 URL,該參數是一個相對路徑。


(2)flush="true"

只能用true,沒得說。


(3)<jsp: param>

<jsp: param> 子句用於把值傳到到要插入文件當中。

在相應的頁面中,只要加入如下語句就可以將其值取出:

request.getParameter("參數名");

3、與 include 區別:

jsp:include 動作是動態的。當插入文件時,JSP 引擎不把插入文件和原 JSP 文件合併成一個新文件,而是在運行時把被插入文件包含進來。插入者與被插入都雙方全都是獨立的。被插入文件被改動了,會被判斷出來,並重新進行編譯。


include 指令是靜太的,把被插入文件插入到當前位置後,再進行編譯,一旦有改動,無法得知。


4、舉個例子吧:

index.jsp


[html] view plaincopy

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <p><b>兩種遊戲機的感覺如何?</b></p>  
        <jsp:include page="head.jsp" flush="true">  
            <jsp:param name="chanshu1" value="PS3" />  
            <jsp:param name="chanshu2" value="PSVita" />  
        </jsp:include>  
    </body>  
</html>


head.jsp

<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <%  
            String game1 = request.getParameter("chanshu1");  
            String game2 = request.getParameter("chanshu2");  
        %>  
        <p><%=game1%>很貴!</p>  
        <p><%=game2%>更貴!</p>  
    </body>  
</html>

運行一下看看結果:




二、jsp:forward 動作

1、說明:

jsp:forward 動作停止當前頁面的執行,轉向別一個頁面。在執行中,JSP引擎將不再處理當前頁面剩餘的內容,並把緩存區清空(等於這一頁白折騰了尷尬)。好處在於,客戶看到的是原始的頁面地址,而實際顯示得卻是別一個頁面的內容。有於利隱藏展示頁面的地址,來得瑟一下。


2、格式:

<jsp:forward page="文件名" />

<jsp:forward page="文件名">  
  <jsp:param name="參數名1" value="參數值 1" />  
  <jsp:param name="參數名2" value="參數值 2" />  
  ……  
</jsp:forward>

參數說明:


(1)page="文件名"

指明要定向跳轉的文件或URL。


(2)jsp:param

同 jsp:include 動作中的 jsp:param 動作。就是傳值。接收方法如上。


3、舉個例子:

我們把 jsp:include 例子中 index.jsp 頁面裏的 include 改成 forward 看看結果,head.jsp 不用改,代碼如下:

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <p><b>兩種遊戲機的感覺如何?</b></p>  
        <jsp:forward page="head.jsp">  
            <jsp:param name="chanshu1" value="PS3" />  
            <jsp:param name="chanshu2" value="PSVita" />  
        </jsp:forward>  
    </body>  
</html>

head.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <%  
            String game1 = request.getParameter("chanshu1");  
            String game2 = request.getParameter("chanshu2");  
        %>  
        <p><%=game1%>很貴!</p>  
        <p><%=game2%>更貴!</p>  
    </body>  
</html>

結果是:




index.jsp中的“兩種遊戲機的感覺如何?”沒有了。只有 head.jsp 中的信息了。


三、jsp:plugin 動作

1、說明:

jsp:plugin 動作的功能是將服務器端的 Java 小應用程序(Applet)或 JavaBean 組件下載到瀏覽器端去執行,相當於在客戶端瀏覽器插入 Java 插件。


jsp:plugin 動作將會動態生成 <object> 或 <embed> 元素標記,以使瀏覽器的 Java 插件運行 Applet。同時,他也會指定對象是 applet,或者 Java Bean。也有可能是 Java Class 字節碼文件(.class),更有甚者是要下載的 Java 插件。


2、格式:

<jsp:plugin  
  type="bean|applet"  
  code="保存類的文件名"  
  codebase="類路徑"  
  [name="對象名"]  
  [archive="相關文件路徑"]  
  [align="bottom | top | middle | left | right"]  
  [height="displayPixels"]  
  [width="displayPixels"]  
  [hspace="leftRightPixels"]  
  [vspace="topBottomPixels"]  
  [jreversion="Java環境版本"]  
  [nspluginurl="供 NC 使用的 plugin 加域位置"]  
  [iepluginurl="供 IE 使用的 plugin 加載位置"]  
  <jsp:params>  
    <jsp:param name="參數名 1" value="參數值 1">  
    <jsp:param name="參數名 2" value="參數值 2">  
  </jsp:params>  
  [<jsp:fallback>錯誤信息</jsp:fallback>]  
</jsp:plugin>


參數說明:


(1)type="bean | applet"

指定插件對象的類型是 Bean 還是 Applet(二選一,請作答)。


(2)code="保存類的文件名"

要執行的 Java Class 字節碼文件(*.class)的名字。這個文件必須保存在由下面要介紹的 codebase 屬性所指定的目錄當中。


(3)codebase="類路徑"

這是指定 Java Class 字節碼文件(*.class)文件的位置。沒有寫的話,就默認爲當前 JSP 頁面的路徑。


(4)name="對象名"

bean 或 applet 實例的名字


(5)archive="相關文件路徑"

預裝一些需要使用的 Java Class 字節碼文件(*.class)文件,各文件用“,”號分開,用於提高 applet 的性能。


(6)Align="bottom | top | middle | left | right"

指定顯示的對像和 applet 的位置。


(7)height="displayPixels" width="displayPixels"

好理解,展示的長寬的尺寸。


(8)hspace="leftRightPixels" vspace="topBottomPixels"

從英文字母的翻譯可以看出,一個設置水平間距,一個設置垂直間距。


(9)jreversion="Java環境版本"

Applet 或者 Java Bean 他們所運行的 Java Runtime Environment (JRE)的版本。默認版本是1.1。


(10)nspluginurl="供 NC 使用的 plugin 加域位置"

這個是來指定 Netscape Navigator 用戶所需要的 JRE 的下載地址,是一個URL地址。


(11)iepluginurl="供 IE 使用的 plugin 加載位置"

這個如上,不同的是,這裏指得瀏覽器是 IE。


(12)jsp:params 動作

和 jsp:include 或 jsp:forward 動作中的 jsp:params 動作一樣,就是傳個值。


(13)<jsp:fallback>錯誤信息</jsp:fallback>

說白了,就是給自己一個後路。如果出錯瞭如何解決。


東西多,用得少。到時候要用到其它屬性的話,可以回來查一下列表。偷笑


3、舉個例子

我們首先找了一個 Java applet 小應用程序放到與 index.jsp 同級的目錄下(Clock.class)。



之後修改 index.jsp 中的代碼爲:

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <p><b>兩種遊戲機的感覺如何?</b></p>  
        <jsp:plugin type="applet" code="Clock.class" width="900" height="600">  
            <jsp:fallback>爲什麼會這樣?</jsp:fallback>  
        </jsp:plugin>  
    </body>  
</html>

之後,運行網站,查看結果:




感覺有點像 HTML 中的 <applet>。但是,它比 HTML 的 <applet> 更強大,更靈活。很多做過 JSP 開發的人都知道,Java Bean,在早期經典的 Java MVC 項目中作爲 數據及業務邏輯操作。所以,強大的不是一輕半點。下面是在客戶端的代碼樣子:

<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <p><b>兩種遊戲機的感覺如何?</b></p>  
        <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="900" height="600" codebase="http://java.sun.com/products/plugin/1.2.2/jinstall-1_2_2-win.cab#Version=1,2,2,0">  
<PARAM name="java_code" value="Clock.class">  
<PARAM name="type" value="application/x-java-applet;">  
<COMMENT>  
<EMBED type="application/x-java-applet;" width="900" height="600" pluginspage="http://java.sun.com/products/plugin/" java_code="Clock.class"/>  
<NOEMBED>  
爲什麼會這樣?  
</NOEMBED>  
</COMMENT>  
</OBJECT>  
  
    </body>  
</html>




四、jsp:useBean 動作

1、說明

終於談到 Bean了。 Java Bean 是一種可以重複使用的程式組件,他本身就是 Java 的類,所以要用 Java 來編寫。而 jsp:Bean 動作就是來調用這個程式組件的。其實感覺有點像上例一樣,只不過,上例的 Java Applet 小應用程序只是完成一種客戶端的顯示效果,而 Bean 是要作爲服務器上進行功能處理,對於我們是不可見的。


雖然我們以後纔會接觸到 Java Bean,但是我們現在可以先說明一下它是什麼玩意兒。Java Bean 將網站的表示層(顯示給客戶看的頁面,用JSP來編寫。)與業務邏輯層公開,把業務及數據的處理交給 Bean 來完成。最後,再由JSP來調用 Bean 提供的結果,並顯示給客戶。這樣,降低了程序的複雜性,有利於日後的維護及再開發。


如果還不明白,我換一種少兒不宜且重口味的方式來說吧。JSP 就是我們看見的健康的美女,而 Bean 就是美女體內的動作的器官。一個美女的健康與否,是要看體內運行的結果所展現的。體內運行的好,是 Bean 在動作;外表的美是調用 Bean 動作的結果……大家明不明白,我反正是明白了。。。尷尬


無所謂,以後再要見到的。。。大笑


2、格式

<jsp:useBean id="beanInstanceName" class="package.class" scope="page | request | session | application" /></jsp:useBean>



如果帶參數則:

<jsp:useBean id="beanInstanceName" class="package.class" scope="page | request | session | application" />  
  <jsp:setProperty name="bean的名稱" property="屬性名稱" value="屬性值" />  
  ...  
  <jsp:setProperty name="bean的名稱" property="屬性名稱" value="屬性值" />  
</jsp:useBean>


如果要得到 bean 返回來的屬性值則:


<jsp:getProperty name="bean 名稱" property="屬性名稱" />



3、舉個例子

因爲,這次的例子我們要編寫一下 Java 的開發環境。所以,我們需要對系統環境進行一下修改。

修改如下:

(1)、右擊“我的電腦”,選擇“屬性”,打開屬性窗口。



(2)、在打開的“屬性”窗口中選擇“高級系統設置”



(3)、之後在“系統屬性”面板中點擊“高級”標籤,並選擇“環境變量”





(4)在打開的“環境變量”中對“系統變量”進行設置:

1) 選擇變量“Path”,並單擊“編輯”按鈕。在其變量值中,加入 “Java 路徑\bin”,如“;L:\Program Files\Java\jdk1.6.0_23\bin;”,然後點擊確定按鈕。



2)用上面的方面,點擊來對環境變量“CLASSPATH”進行設置(如果沒有“CLASSPATH”,那就點擊“新建”按鈕,直接建一個)。

之後,設置變量值爲 .; Java 路徑\jre\lib\rt.jar; 如“.;L:\Program Files\Java\jdk1.6.0_23\jre\lib\rt.jar;”:



3)一直點擊確定後退出。可能,你需要重啓一下計算機(有的是,有的不是,最好大家都重啓一下)。


好了,我們現在打開記事本,開始編寫 Java Bean。鍵入下面的 Java 代碼,並保存爲 Box.java:

package bean;  
  
import java.io.*;  
  
public class Box{  
    int length, width, height;  
  
    public Box(){  
        length = 1;  
        width = 1;  
        height = 1;  
    }  
  
    public void setlength(int newlength){  
        length = newlength;  
    }  
  
    public void setwidth(int newwidth){  
        width = newwidth;  
    }  
  
    public void setheight(int newheight){  
        height = newheight;  
    }  
  
    public int getlength(){  
        return length;  
    }  
  
    public int getwidth(){  
        return width;  
    }  
  
    public int getheight(){  
        return height;  
    }  
  
    public int BoxVolume(){  
        return length * width * height;  
    }  
  
    public double BoxArea(){  
        return 2 * (length * width + width * height + length * height);  
    }  
  
}


好了,打開運行對話框,快捷鍵:Ctrl + R,之後輸入 cmd 回車。




之後在打開的字符命令行中,通過命令,進入到 Box.java 所保存的目錄之下,並輸入 javac Box.java 進行編譯。


若是沒有錯誤,將會出現下面的情況:



在Box.java所在的目錄下會出現一個新的文件“Box.class”。這就是我們編寫好,並編譯的 Java Bean 文件。


好了,現在全齊了。之後,我們開始來寫 JSP 代碼了。打開 NetBeans 編輯器,將行成的 Box.class 文件複製於 網站目錄下的 WEB-INF文件夾的 classes 文件夾內的 bean 文件夾下。



現在成了。我們來改一下 index.jsp 文件的代碼,代碼如下:

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <h3>正方體計算</h3>  
        <form method="post" action="head.jsp">  
            <p>正方體的長:<input type="text" name="BoxLength" style="width: 20px;" /></p>  
            <p>正方體的寬:<input type="text" name="BoxWidth" style="width: 20px;" /></p>  
            <p>正方體的高:<input type="text" name="BoxHeight" style="width: 20px;" /></p>  
            <p>  
                <input type="submit" value="計算" name="submit" />  
                   
                <input type="reset" value="重置" name="reset" />  
            </p>  
        </form>  
    </body>  
</html>


head.jsp 代碼如下:

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<%@page import="bean.Box"%>  
<jsp:useBean id="Box" class="bean.Box" scope="request"></jsp:useBean>  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <%  
            Box b = new Box();  
            b.setlength(Integer.parseInt(request.getParameter("BoxLength")));  
            b.setwidth(Integer.parseInt(request.getParameter("BoxWidth")));  
            b.setwidth(Integer.parseInt(request.getParameter("BoxHeight")));  
        %>  
        <p>長方體的體積:<%=b.BoxVolume()%></p>  
        <p>長方體的面積:<%=Box.BoxArea()%></p>  
    </body>  
</html>


運行一下,先在 index.jsp 中輸入數據:




之後點擊計算按鈕顯示出結果:



我們在編譯器當中,看到目錄下有很多東西。這些東西都對於服務器開發很有用處。下次,我們花一天的時間來說明一下。今天就先到這裏了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章