3.4 JSP動作元素
JSP動作元素用來控制JSP容器的動作,可以插入文件、重用JavaBean組件、導向另一個頁面等,可用的標準動作元素如下:
<jsp:include>在當前頁面添加靜態和動態的資源。
<jsp:forward>引導請求者進入新的頁面。
<jsp:param>提供其他JSP動作的名稱/值信息。
<jsp:useBean>應用JavaBean組件。
<jsp:plugin>連接客戶端的Applet和Bean插件。
動作元素和指令元素不同,動作元素是在客戶端請求時期動態執行的,每次有客戶端請求時可能會被執行一次;而指令元素是在編譯時被編譯執行,它只會被編譯一次。
3.4.1 <jsp:include>
<jsp:include>動作允許包含一個靜態HTML或動態文件(JSP及其他)內容輸出到當前JSP頁面中。<jsp:include>有兩種形式,最簡單的形式是不設置任何參數,其語法形式如下:
<jsp:include page="{relativeURL|<%=expression%>}"flush="true"/>
另一種是復雜形式支持<jsp:param>動作設置參數。其語法形式如下:
<jsp:include page="{relativeURL|<%=expression%>}"flush="true">
<jsp:param name="parameterName"value="{parameterValue|<%=expression%>}"/>+
</jsp:include>
<jsp:include>動作與include指令元素不相同,include指令在編譯為Servlet時插入文件,并且不會隨著插入文件的改變而改變。<jsp:include>動作在得到頁面請求插入文件是動態變化的,也就是說會隨著插入文件的改變而改變。
下面的示例使用<jsp:include>動作元素,在當前頁面中插入一段程序片段,運行結果如圖3-5。
文件名:includeActon.jsp<%@ page contentType="text/html;charset=gb2312"language="java"%>
圖3-5 <jsp:include>動作例子運行結果
3.4.2 <jsp:forward>
<jsp:forward>動作用來把當前的JSP頁面重導到另一個頁面上,用戶看到的是當前網頁的地址,內容則是另一個頁面的。該動作有兩種形式,如果沒有使用<jsp:param>動作元素添加參數,則其語法如下:
3.4.3 <jsp:param>
<jsp:param>動作是配合<jsp:forward>、<jsp:include>和<jsp:plugin>一起使用來傳遞參數的。<jsp:param>動作的語法如下:
<jsp:param name=”name”value=”value”>
其中,name表示參數名,value表示參數值,下面結合一個實例說明<jsp:param>動作元素的作用。
首先,創建如下的forwardParam.jsp:
在上面的代碼中,使用<jsp:forward>動作對當前頁面的請求重定向到forward1.jsp文件,并且使用<jsp:param>動作傳遞參數param1。
forward1.jsp文件的代碼如下:
forward1.jsp文件的功能與forwardParam.jsp相似,只是將頁面重定向到forward2.jsp文件,forward2.jsp文件的代碼如下:
該示例程序的執行次數是從forwardParam.jsp到forward1.jsp,然后再到forward2.jsp,最終由forward2.jsp接受參數param1和param2。
3.4.4 <jsp:useBean>
這個動作能夠讓JSP網頁中使用JavaBean,從而能夠充分應用Java的重用性。也能將頁面與商業邏輯更好地分離。JSP動態使用JavaBean組件來擴充JSP的功能,由于JavaBean在開發上以及<jsp:useBean>在使用上簡單明了,使得JSP的開發過程和其他動態網頁開發有了本質的區別。盡管ASP等動態網頁技術也可以使用組件技術,但是由于ActiveX控件在編寫上的復雜和使用上的不方便,實際開發工作中使用組件技術并不多。
<jsp:useBean>的語法格式:
1)id:命名引用該Bean的變量。如果能夠找到id和scope相同的Bean實例,jsp:use-Bean動作將使用已有的Bean實例而不是創建新的實例.
2)scope:指定Bean在哪種上下文內可用,可以取下面的4個值之一:page,request,session和application。默認值是page,表示該Bean只在當前頁面內可用(保存在當前頁面的PageContext內)。request表示該Bean在當前的客戶請求內有效(保存在ServletRequest對象內)。session表示該Bean對當前HttpSession內的所有頁面都有效。最后,如果取值applica-tion,則表示該Bean對所有具有相同ServletContext的頁面都有效。scope之所以很重要,是因為jsp:useBean只有在不存在具有相同id和scope的對象時才會實例化新的對象;如果已有id和scope都相同的對象則直接使用已有的對象,此時jsp:useBean開始標記和結束標記之間的任何內容都將被忽略。
3)class:指定Bean的完整類名。
4)beanName:指定Bean的名字。如果提供了type屬性和beanName屬性,允許省略class屬性。
5)type:指定引用該對象的變量的類型。它必須是Bean類的名字、超類名字、該類所實現的接口名字之一。請記住變量的名字是由id屬性指定的。
下面是一個簡單的載入Bean的例子。首先創建一個名為Person的JavaBean,下面是Person類的代碼:
編譯該文件,放到Tomcat的webapps目錄中的項目目錄的WEB-INF目錄的classes目錄下。
然后,創建一個JSP頁面文件,文件名JavaBeanDemo.jsp,文件中使用<jsp:useBean>載入該JavaBean,運行結果如圖3-6所示,文件內容如下:
圖3-6 JavaBeanDemo.jsp運行結果
3.4.5 <jsp:plugin>
<jsp:plugin>動作為Web開發人員提供了一種在JSP文件中嵌入客戶端運行的Java(如Applet、JavaBean)的方法。JSP處理這個動作的時候,根據客戶瀏覽器的不同,JSP在執行后分別輸出為OBJECT或EMBED這兩個不同的HTML元素。
<jsp:plugin>的語法:
<jsp:plugin>動作的屬性說明。
?type="bean|applet"。將被執行的插件對象的類型,必須得指定這個是Bean還是Applet,因為這個屬性沒有默認值。
?code="classFileName"。將會被Java插件執行的Java Class的名字,必須以.class結尾。這個文件必須存在于codebase屬性指定的目錄中。
?codebase="classFileDirectoryName"。將會被執行的Java Class文件的目錄(或者是路徑),如果你沒有提供此屬性,那么使用<jsp:plugin>的JSP文件的目錄將會被使用。
?name="instanceName"。這個Bean或Applet實例的名字,它將會在JSP其他的地方調用。
?archive="URIToArchive,..."。一些由逗號分開的路徑名,這些路徑名用于預裝一些將要使用的class,這會提高Applet的性能。
?align="bottom|top|middle|left|right"。圖形,對象,Applet的位置。
?height="displayPixels"width="displayPixels"。Applet或Bean將要顯示的長寬的值,此值為數字,單位為像素。
?hspace="leftRightPixels"vspace="topBottomPixels"。Applet或Bean顯示時在屏幕左右、上下所需留下的空間,單位為像素。
?jreversion="JREVersionNumber|1.1"。Applet或Bean運行所需的Java Runtime En-vironment(JRE)的版本,默認值是1.1。
?nspluginurl="URLToPlugin"。Netscape Navigator用戶能夠使用的JRE的下載地址,此值為一個標準的URL。
?iepluginurl="URLToPlugin"。IE用戶能夠使用的JRE的下載地址,此值為一個標準的URL。
?<jsp:params>[<jsp:param name="parameterName"value="{parameterValue|<%=expression%>}"/>]+</jsp:params>。需要向Applet或Bean傳送的參數或參數值。
下面的例子創建一個Applet程序,并使用<jsp:plugin>動作將其添加到網頁中。創建一個名為Banner.java的Applet程序,該程序實現了一個簡單的廣告條。
創建一個名為pluginTest.jsp的文件,代碼如下:
- 技術領導力:程序員如何才能帶團隊
- Learning SQLite for iOS
- Python數據分析從0到1
- Visual C#.NET程序設計
- Instant Ext.NET Application Development
- HTML5與CSS3基礎教程(第8版)
- OpenGL Data Visualization Cookbook
- Cocos2d-x by Example:Beginner's Guide(Second Edition)
- Delphi開發典型模塊大全(修訂版)
- Functional Python Programming
- Building a Media Center with Raspberry Pi
- 程序員的英語
- Node.js進階之路
- Learning Rust
- Django 3 Web應用開發從零開始學(視頻教學版)