【JSP】JSP Action動作標簽


Action動作標簽簡述

JSP action是JSP技術體系內置的一組標簽,使用無需導入,或者添加另外的庫。JSP action標簽都是對Java代碼的邏輯的封裝。主要使用的是下面這些。

標簽 作用
jsp:include 在頁面被請求的時候引入一個文件。
jsp:forward 把請求轉到一個新的頁面。
jsp:useBean 尋找或者實例化一個JavaBean。
jsp:setProperty 設置JavaBean的屬性。
jsp:getProperty 輸出某個JavaBean的屬性。

 

<jsp:include>標簽

 提示:為了深入理解這個標簽,請先理解ServletDispatcher接口中的include方法,因為二者是同樣的原理。可以看我的這篇文章

       jsp:include標簽是執行時期的包含,也叫動態包含。被包含的頁面會在服務器上運行產生響應數據,將響應的數據包含到本JSP響應中。因此,這個標簽既可以包含Servlet,JSP動態資源,也可以包含HTML等靜態資源。如果是包含了JSP或者Servlet,則是包含了 被包含頁面執行后的輸出結果(也就是是被包含頁面的out對象輸出的結果)。 如果包含的是靜態內容,則其效果和使用<%@ page include %> 是一樣的。這種情況下還是使用include指令比較高效。

 

 語法格式

<!--語法格式-->
<jsp:include page="relativeURL(被包含資源相對的路徑)" flush="[false|true]" />

<!--或者可以向被包含頁面傳遞參數Parameter-->

<jsp:include page="relativeURL"  flush="[false|true]" >
     <jsp:param name="name" value="value" />
     <jsp:param name="name2" value="value2" />
</jsp:include>

 

說明
1、page屬性是被包含的頁面的相對路徑,這個值可以是EL表達式如: page="${param.pagevalue}",因為EL是JSP轉譯層次的技術,而include action則實際上是一條java語句,是執行期被調用的。
flush屬性,如果設置為true,則在執行include語句時,先將原來的頁面輸出到響應正文中的緩存數據刷新,再處理被包含頁面的數據。如果為false則不刷新,這樣等到輸出流對象自動默認刷新。flush屬性是可選的,默認是false。
 
2、<jsp:param> 設置的參數可以在被包含頁面中通過request.getParamter()獲取。

 

 

 

 

<jsp:forward>標簽

提示:為了深入理解這個標簽,請先理解ServletDispatcher接口中的forward方法,因為二者是同樣的原理。可以看我的這篇文章

將當前請求轉發到另外一個資源上去,這個資源可以是Servlet,jsp,或者是HTML等靜態資源。讓另一個資源產生響應數據。使用轉發時,之前寫入到響應正文中的數據會被忽略,如果之前已經將響應提交,則使用轉發將拋出IllegalStateException異常。因此,轉發調用語句的前后都不要有響應輸出語句,因為都會被忽略,沒有作用。

 

語法格式

<jsp:forward page="relativeURL(被包含頁面的相等URL)" />     

<!--或者也可以通過jsp:param向被包含頁面傳遞Parameter-->

<jsp:forward page="relativeURL">
     <jsp:param name="name" value="value" />
</jsp:forward>

說明:

1、page屬性是被包含的頁面的相對路徑,這個值可以是EL表達式,如: page="${param.pagevalue}"

2、<jsp:param> 設置的參數可以在被包含頁面中通過request.getParamter()獲取。

 

 

<jsp:useBean>標簽

這個標簽用來在JSP中設置和操作JavaBean 的標簽。他會先從Scope中嘗試取對應名稱的Bean對象,如不存在,則new一個對應的Bean對象。
通常它會配合<jsp:setProperty> 和 <jsp:getProperty> 一起使用。

語法格式

 

<!--在JSP頁面中獲取一個JavaBean-->
< jsp:useBean id ="user" class= "model.User" scope = "page" />     


<!--或者
在JSP頁面中獲取一個JavaBean,如果這個對象是因為這個useBean標簽的調用而new出來的,則執行子標簽setProperty,如果是從以前設置的scope直接獲取到的,則不執行子標簽setProperty
-->

<jsp:useBean id="user" class="model.User" scope="page">
     <jsp:setProperty property="name" name="user" value="Jack"/>
</jsp:useBean>

 

說明
 
id        : JavaBean對象的本地變量名,也就是這個Bean對象在_jspService方法中的局部變量名
class   :指定了JavaBean的類的位置,必須是完整的包名。
scope : Bean對象存儲的范圍 。可以取下面的四個值之一:page,request,session和application。默認值是page( PageContext的pageScope )。
type    :將這個類型的JavaBean當做什么類型來使用。也就是type指定了強轉類型。默認是class是什么類型,就當做什么類型來使用。

 

 

例子

index.jsp

<%@ page contentType= "text/html; charset=UTF-8"   pageEncoding ="UTF-8" trimDirectiveWhitespaces= "true"
         session ="true"
%>

<!--在JSP頁面的pageScope中創建一個變量名為user的JavaBean -->
< jsp:useBean id ="user" class= "model.User" scope = "page" />

<!--使用小腳本設置剛剛創建的JavaBean的 name屬性 ,后面會介紹一個專門的標簽setProperty可以設置屬性-->
<%
     ((model.User)pageContext.getAttribute( "user" )).setName("Bob" );
%>

<!--輸出Bean的name屬性,驗證 -->
剛剛使用的Bean的name屬性值是:${pageScope.user.name}

 

 

 

可以發現jsp:userBean標簽 的實質操作步驟如下
 
1、定義一個jsp:useBean標簽中 type屬性指定的變量,如果沒有設置type屬性,則默認使用class屬性類型的變量,也就是本質類型。
2、嘗試去從scope屬性指定的Scope中獲取id屬性指定的變量名的JavaBean對象賦值給1中定義的變量。
3、如果在2步驟中獲取到的對象為null,說明這是第一次在這個范圍中使用這個Bean,則new一個實例(這種情況下,如果useBean有子標簽jsp:setProperty,則setProperty子標簽會執行,並將他存放到指定的Scope中,供后續的useBean標簽使用,這樣后續的useBean標簽就無需再new了。

 

 

 

<jsp:setProperty>標簽

這個標簽用於設置JSP使用的JavaBean的屬性。他配和useBean一起使用,通常作為useBean的子標簽,而不是獨立使用。程序員要保證被操作的某個Bean對象一定存在。

使用語法

<jsp:setProperty name="Bean的變量名" property="Bean的屬性名" value="Bean的屬性值" />


<!--或者 將setProperty放在useBean的標簽體中,只有new出Bean實例才會執行,如果是從以前設置的地方取的Bean,則不會執行-->
<jsp:useBean id="user" class="model.User" >
     <jsp:setProperty name="user"  property="name" value="Bob"/>
</jsp:useBean>

 

說明

name:就是要操作的JavaBean的變量名,也就是useBean中的id值。

property:操作的JavaBean對象的屬性名。

value : 屬性的值

 

<%@ page contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8" trimDirectiveWhitespaces="true"
         session="true"%>
<jsp:useBean id="user" class="model.User" scope="page">
     <jsp:setProperty property="name" name="user" value="Jack"/>
</jsp:useBean>

<%--輸出Bean的name屬性,驗證 --%>
剛剛使用的Bean的name屬性值是:${pageScope.user.name}

 

 

 

<jsp:getProperty>標簽

獲取一個JavaBean的屬性,通過JSP內置對象out將屬性值輸出到響應流中。

語法:

<jsp:getProperty name="JavaBean的變量名" property="屬性名" />

name:就是要操作的JavaBean的變量名,也就是useBean中的id值。

property:操作的JavaBean對象的屬性名。

 

<%@ page contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8" trimDirectiveWhitespaces="true"
         session="true"%>
<jsp:useBean id="user" class="model.User" scope="page">
     <jsp:setProperty property="name" name="user" value="Jack"/>
</jsp:useBean>

剛剛使用的Bean的name屬性值是:<jsp:getProperty name="user" property="name" />

 

 

 

 歡迎轉載,請注明出處:www.cnblogs.com/lulipro

 為了獲得更好的閱讀體驗,請訪問原博客地址。

限於本人水平,如果文章和代碼有表述不當之處,還請不吝賜教。

 

代碼鋼琴家


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM