1. 程式人生 > >不要急,我與你一起學習JSP(四)——JSP的基礎語法【二】

不要急,我與你一起學習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

<%@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 中輸入資料:


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


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

相關推薦

不要一起學習JSP——JSP基礎語法

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

docker入門實踐一起實戰演練

檢視本地所有的映象 docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE nginx lates

不要就是GAN (生成式對抗網路) :訓練和測試 GAN

在 /home/your_name/TensorFlow/DCGAN/ 下新建檔案 train.py,同時新建資料夾 logs 和資料夾 samples,前者用來儲存訓練過程中的日誌和模型,後者用來儲存訓練過程中取樣器的取樣圖片,在 train.py 中輸入如下程式碼:

java學習筆記:import語法

employee sign cnblogs java 調用 變量賦值 temp 職位 求職 Import 語法是給編譯器尋找特定類的適當位置的一種方法。 創建一個Employee 類,包括四個實體變量姓名(name),年齡(age),職位(designation)和薪水(s

docker學習系列製作基礎的base專案映象--jdk+tomcat

前面已經完成了docker的安裝以及使用,現在我們要將自己的javaweb專案與docker結合 1.1準備jdk+tomcat軟體 ​​我下載了apache-tomcat-7.0.68.tar.gz

Netty學習筆記二進位制流協議

public abstract class KaMessage { protected short commandId; protected int userId; public static final short HEADLENGTH = 6; public static final shor

Python學習筆記基礎語法、變數型別、運算子快速入門篇

Head First Python、Python基礎教程 下劃線的特殊意義 以下劃線開頭的識別符號是有特殊意義的。 以單下劃線開頭(_foo)的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用”from xxx import *”而匯入

一起學習MS Project——理論篇:專案管理Project

Hi,你好!我是大黃蜂,非常高興藉此機會與你一起學習微軟Project的相關知識和技能。這一次的分享主要是結合本人在實際使用Project 2013過程中的一些方法技巧,其中有一些材料則來源於網際網路,期待通過我的梳理成篇後能夠給你帶來Project 2013的

一起學習MS Project——高階篇:Project高階應用

我們再來看Project的一些高階應用。 1.1. 設定任務依賴性的幾種方法 首先是設定任務依賴性的幾種方法,這裡介紹三種方法。 方法一:選中兩個需要建立依賴型的任務。選中用 ctrl 滑鼠

從零開始一起學習SLAM7為啥需要李群李代數?

  很多剛剛接觸SLAM的小夥伴在看到李群和李代數這部分的時候,都有點濛濛噠,感覺突然到了另外一個世界,很多都不自覺的跳過了,但是這裡必須強調一點,這部分在後續SLAM的學習中其實是非常重要的基礎,不信你看看大神們的論文就知道啦。   關於李群李代數,其實高

從零開始一起學習SLAM9不推公式如何真正理解對極約束?

  自從小白向師兄學習了李群李代數和相機成像模型的基本原理後,感覺書上的內容沒那麼難了,公式推導也能推得動了,感覺進步神速,不過最近小白在學習對極幾何,貌似又遇到了麻煩。。。   小白:師兄,對極幾何這塊你覺得重要嗎?   師兄:當然重要啦,這個是多視角立體

一起學pythonpython的模組

模組,用一砣程式碼實現了某個功能的程式碼集合。 類似於函數語言程式設計和麵向過程程式設計,函數語言程式設計則完成一個功能,其他程式碼用來呼叫即可,提供了程式碼的重用性和程式碼間的耦合。而對於一個複雜的功能來,可能需要多個函式才能完成(函式又可以在不同的.py

那些年追過的繪圖語言

微信 ont 字符 send ogr html wrap ack 時空 https://zhuanlan.zhihu.com/p/19901245 **************************** 那些年,我追過的繪圖語言(續) 陳天 3 年前 自從上一篇文

一起學習Rviz——顯示簡單立體模型

edit ide tutorials setup tutorial 添加 tar dev als 先甩個鍋咯,手敲下來的難免有些小錯誤,錯別字啥的,理解哈~~~ Ubuntu 14.04,ROS版本 indigo 1、Rviz顯示簡單立體模型 首先,創建工作空間。 創建文件

《Qt5 開發實例第三版學習筆記

常用 斷言 max swap 正則表達 4.2 debug 實例 筆記 1 //2.4 算法及正則表達式 2 //2.4.1 Qt5常用算法 3 double c=qAbs(a);//返回絕對值 4 double max=qMax(b,c);//返回最大值 5

的Docke-CE學習筆記02

Go style clas ont mongo fig bubuko body 數據庫 下載Mongo數據庫鏡像 $ docker pull mongo 在/docker/mongo/內建立文件夾config、db 新建mongo鏡像Container $ dock

的Docke-CE學習筆記03

inf exception addm entity 註入 provider ase mod ise 新建一個Asp.net Core 2.0 WebAPI項目。 添加EntityFrameworkCore引用 建立Data,Models文件夾 Models內建立Use

的Docke-CE學習筆記04

soft 端口 space ati cor rom from docker program Programs.cs內設置80端口 namespace User.API { public class Program { public stat

公鑰證書服務---學習筆記預習

公鑰與證書服務一·PKI技術PKI:是一種新的安全技術 二·PKI組成: (1) 公鑰密碼技術:不同的非對稱密碼學,具有兩個密鑰,一個是公鑰一個是私鑰,它們具有這種性質:用公鑰加密的文件只能用私鑰解密,而私鑰加密的文件只能用公鑰解密。公鑰顧名思義是公開的,所有的人都可以得到它;私鑰也顧名思義是私有的,不應被其

kubernetes學習筆記kube-dns搭建

try ssl highlight 記錄 原因 ali html edi dff 此為記錄,借鑒博客園多位高手的文章 1、鏡像準備 docker.io/redis:latest 1a8a9ee54eb7 r