- 從零開始學Java Web開發
- 孫更新等編著
- 1741字
- 2018-12-27 13:06:05
4.5 JSP中的動作指令
JSP動作是一種特殊的標簽,利用XML語法格式的標簽來控制JSP引擎的行為,影響JSP運行時的功能和返回客戶端的響應。JSP動作都以<jsp:”開頭,相對應地則以 “/>”結束。
JSP動作主要包括。
? <jsp:include>:在頁面中包含一個動態或靜態文件。
? <jsp:forward>:把請求轉到一個新的頁面。
? <jsp:param>:用來為其他標簽傳遞參數信息。
? <jsp:useBean>:尋找或者實例化一個JavaBean。
? <jsp:setProperty>:設置JavaBean的屬性。
? <jsp:getProperty>:輸出某個JavaBean的屬性。
本小節將首先詳細介紹前3個動作指令,在本書的第6章中結合JavaBean再詳細介紹其余3個與JavaBean相關的動作指令。
4.5.1 <jsp:include>動作指令
<jsp:include>動作指令用來包含一個靜態或動態的頁面到一個JSP頁面文件中。包含的靜態或動態的資源在page屬性中用URL的形式指定。
<jsp:include>動作指令的語法形式為:
<jsp: include page =“{relativeURL | <%=expression%>}" flush = "true" />
或:
<jsp: include page = “{relativeURL | <%=expression%>}" flush = "true"> <jsp: param name = “parameterName” value = “{parameterValue | <%=expression%>}” /> …… </jsp: include >
前一種是空標簽的形式,后一種是體標簽的形式,如果在包含資源的同時還要傳遞參數,則必須使用后一種體標簽的形式。
<jsp:include>動作指令與前面介紹過的include編譯指令不同,主要體現在兩個方面。
? <jsp:include>動作指令是在JSP頁面被請求執行時才將文件包含進來,而不像include編譯指令那樣在JSP頁面被編譯時就將文件包含進來。
? include編譯指令引入被包含文件時,是在JSP頁面被轉化成Servlet類之前就和包含頁面融和到一起的,而<jsp:include>動作指令是在需要引入被包含文件時,才動態調用被包含文件編譯后所生成的Servlet類輸出的內容的。因此,當被包含的JSP文件的內容被修改后,使用<jsp:include>動作指令引入被包含文件的JSP頁面不需要重新編譯,而使用include編譯指令引入被包含文件的JSP頁面卻需要重新編譯。
通過上述比較可以發現:<jsp:include>動作指令的文件引入時間決定了它的效率比include編譯指令稍微差一點,而且被引用文件不能包含某些JSP代碼(例如,不能設置HTTP頭等),但它的靈活性和執行效率卻要比include編譯指令好得多。
為了更好地理解這兩種包含的區別,下面通過對實例4-4稍加修改來進行詳細的說明。
在實例4-4中使用了include編譯指令來包含include.jsp頁面,結果顯示如圖4.25所示的錯誤信息。下面將實例4-4頁面中的include編譯指令換成<jsp:include>動作指令,修改后的代碼如下所示。
<%@ page contentType="text/html;charset=GB2312"%> <html> <body> include編譯指令測試<br> <%-- 使用include動作指令包含include.jsp頁面--%> <jsp: include page="include.jsp" /> </body> </html>
這樣,即使被包含的include.jsp頁面中也使用了page編譯指令,程序照常能夠正確執行。這是因為使用<jsp:include>動作指令,包含頁面和被包含的頁面是各自被JSP引擎編譯的。
4.5.2 <jsp:forward>動作指令
<jsp:forward>動作指令用于將請求轉發到其他的JSP頁面、HTML頁面或者Servlet類,用來實現頁面的重定向功能。
<jsp:forward>動作指令的語法形式為:
<jsp:forward page="{relativeURL | <%=expression%>}"/>
或
<jsp:forward page="{relativeURL | <%=expression%>}"> <jsp:param name="parameterName" value="{parameterValue | <%=expression%>}"/> </jsp:forward>
與<jsp:include>動作指令一樣,<jsp:forward>動作指令的前一種語法形式是空標簽的形式,后一種是體標簽的形式,如果在包含資源的同時還要傳遞參數,則必須使用后一種體標簽的形式。
通過<jsp:forward>動作指令的語法形式我們可以看出,它與<jsp:include>動作指令的語法格式一樣,都是使用page屬性來設置將要定向的文件或URL。那么這兩個動作指令有什么區別呢?下面通過實例4-5來講解它們兩者的區別。
【實例4-5】<jsp:forward>動作指令的應用。
01 <%@ page contentType="text/html;charset=GB2312"%> 02 <html> 03 <body> 04 include編譯指令測試<br> 05 <jsp:forward page="include.jsp" /> <%-- 使用forward動作指令轉向到include.jsp頁面 --%> 06 </body> 07 </html>
【代碼說明】在實例4-5頁面的第5行中使用<jsp:forward>動作指令將頁面請求轉發到JSP頁面include.jsp。
【運行結果】實例4-5的JSP頁面的執行結果如圖4.36所示。
通過與如圖4.35所示的執行結果進行比較可以發現,使用<jsp:forward>動作指令的頁面只返回重定向到的頁面的內容,而使用<jsp:include>動作指令的頁面則返回包含和被包含頁面共同組成的內容。

圖4.36 使用<jsp:forward>動作指令進行頁面轉向
因此,可以得出結論,<jsp:forward>動作指令用來從一個當前正在執行的JSP文件重定向到另一個資源去執行,當前JSP文件中<jsp:forward>動作指令以下的程序代碼就不會再被執行了,而且返回給客戶端瀏覽器的內容只是由被重定向的資源來生成。
4.5.3 <jsp:param>動作指令
<jsp:param>動作指令主要用來傳遞參數,為其他動作指令提供附加信息,它必須和<jsp:include>、<jsp:forward>等動作指令一起使用,可以將<jsp:param>動作指令中的值傳遞到其他動作指令所要加載的文件中去,從而實現向所加載的頁面動態傳遞參數的功能。
<jsp:param>動作指令的語法格式如下:
<jsp:param name="paramName" value="paramValue"/>
其中name屬性表示傳遞的參數名,value屬性表示傳遞的參數值。
【實例4-6】使用<jsp:param>動作指令實現從1累加到300求和。
01 <%@ page contentType="text/html; charset=GB2312" %> 02 <%@ page language="java" %> 03 <HTML> 04 <BODY> 05 <P>計算求和: 06 <jsp:include page="count.jsp"> <%--在使用include動作指令包含頁面時傳遞參數--%> 07 <jsp:param name="computer" value="300"/> <%--傳遞的參數值為300--%> 08 </jsp:include> 09 </BODY> 10 </HTML>
【代碼說明】在實例4-6頁面的第6行中使用<jsp:include>動作指令將count.jsp頁面包含進來,并在第7 行使用<jsp :param>動作指令在包含count.jsp頁面的同時向該頁面傳遞參數,也就是說將參數computer的參數值300傳遞給count.jsp頁面。
count.jsp頁面的代碼定義如下:
01 <%@ page contentType="text/html;charset=GB2312" %> 02 <HTML> 03 <BODY> 04 <% String str=request.getParameter("computer"); //獲取傳遞的參數值 05 int n=Integer.parseInt(str); //將字符串轉換為整數類型的值 06 int sum=0; 07 for(int i=1;i<=n;i++) //進行累加操作 08 { sum=sum+i; 09 } 10 %> 11 <P> 12 從1到<%=n%>的連續和是: 13 <BR> 14 <%=sum%> 15 </BODY> 16 </HTML>
【代碼說明】在該頁面的第4行接收<jsp:param>動作指令傳遞來的參數,第5行將該參數從字符串轉換為整數類型,第7~9行使用for循環計算從1累加到300的和,并將結果在第14行輸出到頁面上。
【運行結果】實例4-6的JSP頁面的執行結果如圖4.37所示。

圖4.37 使用<jsp:param>動作指令傳遞參數
- 大學計算機基礎:基礎理論篇
- Linux Mint System Administrator’s Beginner's Guide
- ETL with Azure Cookbook
- Natural Language Processing Fundamentals
- Visual C# 2008開發技術實例詳解
- 中國戰略性新興產業研究與發展·智能制造裝備
- Dreamweaver CS6中文版多功能教材
- 電腦上網輕松入門
- Salesforce Advanced Administrator Certification Guide
- ESP8266 Robotics Projects
- Apache源代碼全景分析(第1卷):體系結構與核心模塊
- 工業機器人力覺視覺控制高級應用
- Visual Basic項目開發案例精粹
- Practical AWS Networking
- 超好玩的Python少兒編程