Tag檔案是<jsp:include>替代技術,也是為了提高JSP頁面中代碼的子產品化和重用;可以被JSP頁面動态加載調用;
對于tag标簽,需要掌握:tag檔案的定義、tag檔案的使用、如何定義tag的屬性,如何定義tag檔案的傳回值、tag檔案的嵌套調用
1、Tag檔案存放位置
Tag檔案存放在項目的WEB-INF/Tags目錄下;使用者可以在該目錄下設定子目錄;
2、如何在JSP頁面中調用Tag檔案
需要2步:
(1)使用taglib指令引入标記:
<%@ taglib tagdir="/WEB-INF/tags" prefix="字首" %>
其中tagdir屬性設定tag檔案存放的位置;prefix屬性設定通路把tag的字首,目的是用于避免tag的名字沖突;
(2)在JSP頁面中調用:
<Tag檔案 />
<Tag檔案 >
标記體
</Tag檔案>
當JSP頁面調用一個Tag檔案時可能希望動态地向該Tag檔案傳遞資訊,那麼就可以使用帶有标記體的Tag标記來執行一個Tag檔案,Tag标記中的“标記體”就會傳遞給相應的Tag檔案,這個Tag檔案通過使用
<jsp:doBody />
标記處理JSP頁面傳遞過來的“标記體”。
3、tag指令常見的屬性有哪些?
body-content、pageEncoding、language、import
(1)body-content:該屬性用于确定JSP頁面使用該Tag标記時是否可以有body;該屬性的值可以設定為empt、tagdependent、JSP 、scriptless(預設值)
-
- empty:表示JSP頁面必須使用無标記體的方式調用标簽,即<Tag檔案名 />
- tagdependent:标簽體内容直接寫入BodyContent,由自定義标簽自己進行處理,而不被JSP容器解釋;
<test:myList>
select name.age from users
</test:myList>
-
- JSP:接受所有JSP文法,如定制的或内部的tag、script、靜态html、腳本元素、JSP指令和動作
<my:test>
<%= request.getProtocol() %>
</my:test>
- scriptless::接受文本、EL和JSP動作;
(2)language: 指定tag檔案使用的腳本語言;
(3)import: 導入tag要使用的類,預設如下包已導入:"java.lang.*"、 "javax.servlet.*"、 "javax.servlet.jsp.*"、"javax.servlet.http.*"
(4)pageEncoding:tag檔案的編碼方式,預設為ISO-8859-1;
4、JSP頁面如何向tag檔案傳遞參數?
可以在tag檔案中通過attribute指令設定tag需要接收的屬性,這樣,jsp頁面可以通過設定的屬性向tag檔案傳遞參數,如果把attribute指令相當于用于定于函數的參數
<%@ attribute name="對象名“ required=”true|false“ type="對象類型"
<%--tag檔案中屬性的定義 --%>
<%@ attribute name="length" required="true" %>
<%-- JSP 調用tag檔案 --%>
<computer:myTag length="1000" />
5、Tag檔案如何向調用的JSP頁面傳回結果?
(1)首先在tag檔案中使用variable指令定義需要傳回的對象,文法如下:
<%@ variable name-given="對象名字” variable-class="對象的類型" scope=“AT_END” %>
(2)在tag檔案中使用
jspContext調用setAttribute(“對象的名字”,對象的引用)方法存儲對象的名字以及該對象的引用
(3)在JSP頁面中調用tag檔案,調用完成後可以直接使用“對象名”