Servlet和JSP之標簽文件學習
在上一篇文章中介紹了自定義標簽的用法,接下來介紹標簽文件的用法啦。
tag file指令
tag file簡介
用tag file的方式,無需編寫標簽處理類和標簽庫描述文件,也可以自定義標簽。tag file從兩個方面簡化了自定義標簽的開發。首先,tag file無須提前編譯,直到第一次調用才會編譯;其次,標簽庫描述文件也不再需要了,使用tag file的方式,tag file名和action相同,因此不需要標簽庫描述文件了。
一個tag file和JSP頁面一樣,它擁有指令、腳本、EL表達式、動作元素以及自定義的標簽。一個tag file以tag和tagx為後綴,它們可以包含其他資源文件。一個被其他文件包含的tag file應該以tagf為後綴。
tag文件必須放在應用路徑的WEB-INF/tags目錄下才能生效。和標簽處理類一樣,tag文件可以被打包到jar包裏。
以下是tag file中可用的隱藏對象(其實跟文章JSP隱藏對象類似):
對象 |
類型 |
說明 |
request |
javax.servlet.http.HttpServletRequest |
每當客戶端請求一個JSP頁面時,JSP引擎就會制造一個新的reuqest對象來代表這個請求。request對象提供了一系列方法來獲取HTTP頭信息、cookies、HTTP方法等等。 |
response |
javax.servlet.http.HtpServletResponse |
當服務器創建request對象時會同時創建用於響應這個客戶端的response對象。response對象也定義了處理HTTP頭模塊的接口。通過這個對象,開發者們可以添加新的cookies、時間戳、HTTP狀態碼等等。 |
out |
javax.servlet.jsp.JspWriter |
out對象用來在response對象中寫入內容。 |
session |
javax.servlet.http.HttpSession |
session對象用來跟蹤在各個客戶端請求間的會話。 |
application |
javax.servlet.ServletContext |
application對象在JSP頁面的整個生命周期中都代表著這個JSP頁面。這個對象在JSP頁面初始化時被創建,隨著jspDestory()的調用而被移除。通過向application中添加屬性,則所有組成web應用的JSP文件都能訪問到這些屬性。 |
config |
javax.servelt.ServletConfig |
config對象允許開發者訪問Servlet或者JSP引擎的初始化參數,比如文件路徑等。 |
pageContext |
javax.servlet.jsp.PageContext |
pageContext對象主要用來訪問頁面信息,同時過濾大部分實現細節。該對象除了pageContext、page、exception對象的屬性不能導出,其余內置對象的屬性都能導出,而且該對象包含了傳給JSP頁面的指令信息,也定義了一些字段。 |
page |
javax.servlet.jsp.HttpJspPage |
page對象就是頁面實例的引用,可以被看做是整個JSP頁面的代表(與this對象同義) |
exception |
java.lang.Throwable |
exception對象包裝了從先前頁面中拋出的異常信息,通常被用來產生對出錯條件的適當響應。 |
接下來是創建一個標簽文件並且使用的例子:
創建標簽文件並使用只有兩步:
① 編寫標簽文件.tag(例如firstTag.tag),記住要在/WEB-INF/tags中創建此文件哦。
<%@ tag import="java.util.Date" import="java.text.SimpleDateFormat" import="java.io.IOException"%> <% SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = simpleDateFormat.format(new Date()); JspWriter jspWriter = getJspContext().getOut(); jspWriter.write(dateStr); %>
② 編寫jsp測試頁面。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="easy" tagdir="/WEB-INF/tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> Today is <easy:firstTag/> </body> </html>
出來的頁面效果就跟自定義標簽展現出來的樣子是類似的哦。
tag file指令
tag file的指令不多,也就那麽幾個:
指令 |
說明 |
tag |
作用與JSP頁面中的page指令類似 |
include |
用於將其他資源導入tag file中 |
taglib |
用於將自定義標簽庫導入tag file中 |
attribute |
用於將自定義標簽庫導入tag file中 |
variable |
用於將自定義標簽庫導入tag file中 |
看著有點懵?沒事兒,接下來會挨個兒解釋。
① tag指令
語法:<%@ tag attribute="value" attribute2="value2" %>
屬性(除了import屬性,其他所有的屬性在一個tag指令或一個tag file中都只能出現一次。):
屬性 |
描述 |
display-name |
在XML工具中顯示的名稱。默認值是不包含後綴的tag file名 |
body-content |
指定標簽body的類型, body-content屬性值有empty、tagdependent、scriptless,默認值是scriptless。 |
dynamic-attributes |
指定tag file動態屬性的名稱。當dynamicattributes值被設定時,會產生一個Map來存放這些動態屬性的名稱和對應的值。 |
small-icon |
指定一個圖片路徑,用於在XML工具上顯示小圖標。一般不會用到。 |
large-icon |
制定一個圖片路徑,用於在XML工具上顯示大圖標。一般不會用到。 |
description |