- Java EE 程序設計
- 郝玉龍編著
- 2089字
- 2019-07-01 10:16:10
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規范。
- Data Visualization with D3 4.x Cookbook(Second Edition)
- 大話PLC(輕松動漫版)
- 玩轉Scratch少兒趣味編程
- Google Flutter Mobile Development Quick Start Guide
- Moodle Administration Essentials
- 潮流:UI設計必修課
- PHP 7底層設計與源碼實現
- 深入理解Java7:核心技術與最佳實踐
- 精通Python自然語言處理
- Spring Boot企業級項目開發實戰
- Learning Vaadin 7(Second Edition)
- Web前端應用開發技術
- Vue.js 2 Web Development Projects
- Python函數式編程(第2版)
- Appcelerator Titanium:Patterns and Best Practices