servlet的自訂標籤的開發步驟,servlet自訂標籤
1.為什麼需要使用自訂標籤
(1)與JSP頁面整體統一
(2)還具有一定的商務邏輯功能,例如:迴圈,判段。。。
(3)替代原JSP頁面中<%%>
2.自訂標籤開發步驟(3步):
(1)自訂一個標籤處理類,實現SimpleTag介面
package cn.wenhao.www.web.serlvet.el;import java.io.IOException;import javax.servlet.ServletRequest;import javax.servlet.jsp.JspContext;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.PageContext;import javax.servlet.jsp.tagext.JspFragment;import javax.servlet.jsp.tagext.JspTag;import javax.servlet.jsp.tagext.SimpleTag;/** *類的作用:定義的標籤處理類 * * *@author 一葉扁舟 *@version 1.0 *@建立時間: 2014-9-9 上午10:25:32 */public class IpTag implements SimpleTag {private PageContext context;// web容器第二步會調用的順序@Overridepublic void doTag() throws JspException, IOException {System.out.println("執行doTag的順序……");ServletRequest request = context.getRequest();String addr = request.getRemoteAddr();String host = request.getRemoteHost();int port = request.getRemotePort();JspWriter out = context.getOut();out.write("<font size='36' color='blue'>" + addr + ":" + host + ":"+ port + "</font>");}@Overridepublic JspTag getParent() {System.out.println("執行doTag的順序……");return null;}@Overridepublic void setJspBody(JspFragment arg0) {System.out.println("執行setJspContext的順序……");}// web容器首先會調用的,第一步@Overridepublic void setJspContext(JspContext pc) {System.out.println("執行setJspContext的順序……");context = (PageContext) pc;}@Overridepublic void setParent(JspTag arg0) {System.out.println("執行setParent的順序……");}}
(2)在/WEB-INF/目錄下,寫一個*.tld檔案,目的是讓Web容器知道自訂標籤和標籤處理類的對應關係
<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <short-name>simple</short-name> <uri>http://java.sun.com/jsp/jstl/simple</uri> <tag> <name>ip</name> <tag-class>cn.wenhao.www.web.serlvet.el.IpTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
(3). 在JSP頁面中,通過<%@taglib%>指令引用標籤庫
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/simple" prefix="simple" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> </head> <body> 自訂標籤,用戶端的IP地址:<simple:ip></simple:ip> </body></html>
啟動並執行結果圖:
3.SimpleTag方法介紹
(1).setJspContext方法
用於把JSP頁面的pageContext對象傳遞給標籤處理器對象
(2).setParent方法
用於把父標籤處理器對象傳遞給當前標籤處理器對象
(3).getParent方法
用於獲得當前標籤的父標籤處理器對象
(4).setJspBody方法
用於把代表標籤體的JspFragment對象(即標籤體內容)傳遞給標籤處理器對象
(5)doTag方法
用於完成所有的標籤邏輯,包括輸出、迭代、修改標籤體內容等。在doTag方法中可以拋出javax.servlet.jsp.SkipPageException異常,用於通知WEB容器不再執行JSP頁面中位於結束標記後面的內容。
4.SimpleTag介面方法的執行順序
(1).當web容器開始執列標籤時,會調用如下方法完成標籤的初始化
WEB容器調用標籤處理器對象的setJspContext方法,將代表JSP頁面的pageContext對象傳遞給標籤處理器對象。
WEB容器調用標籤處理器對象的setParent方法,將父標籤處理器對象傳遞給這個標籤處理器對象。
注意,只有在標籤存在父標籤的情況下,WEB容器才會調用這個方法。
如果調用標籤時設定了屬性,容器將調用每個屬性對應的setter方法把屬性值傳遞給標籤處理器對象。如果標籤的屬性值是EL運算式或指令碼運算式,則WEB
容器首先計算運算式的值,然後把值傳遞給標籤處理器對象。
如果簡單標籤有標籤體,容器將調用setJspBody方法把代表標籤體的JspFragment對象傳遞進來。
(2).執列標籤時:
容器調用標籤處理器的doTag()方法,開發人員在方法體內通過操作JspFragment對象,就可以實現是否執行、迭代、修改標籤體的目的。
java自訂標籤的編寫過程
1:編寫一個servlet,用來處理標籤的邏輯,並產生html代碼
2:編寫一個tld檔案,用來定義標籤的屬性及格式
3:web.xml中配置標籤
4:jsp頁面引入標籤
就可以使用了,具體的步驟可以在網上找找。
自訂標籤怎寫
轉貼一篇文章,義務作一下普及工作吧.1. 什麼是自訂標籤 答:1) 使用者自訂的Java語言元素, 實質是運行一個或者兩個介面的JavaBean; 2) 可以非常機密地和JSP的表示邏輯聯絡在一起,又具有和普通JavaBean相同的商務邏輯處理能力; 2) 當一個JSP頁面轉變為servlet時,其間的使用者自訂標籤轉化為操作一個稱為標籤hander的對象; 3) 可操作預設對象,處理表單資料,訪問資料庫以及其它企業服務; 2. 自訂標籤庫的特點 答:1) 通過調用頁面傳遞參數實現定製; 2) 訪問所有對JSP頁面可能的對象; 3) 修改調用頁面產生的響應; 4) 自訂標籤間可相互連信; 5) 在同一個JSP頁面中通過標籤嵌套,可實現複雜互動。 3. 如何使用自訂標籤庫 答:1) 聲明標籤庫 2) 使標籤庫執行對Web應用程式可用 4. 聲明標籤庫 答:1) 使用taglib指令聲明標籤庫 2) 文法:<%@taglib uri="URI" prefix="pre" %> 注意:a. uri屬性可以是絕對的,也可以是相對URL,該URL指向標記庫描述符(TLD)檔案; b. uri屬性也可以是一個並不存在的URL,該URL為web.xml檔案中將標記庫描述符(TLD)檔案的絕對URL到本地系統的一個映射; 3) 範例:<%@taglib uri="/WEB-INF/template.tld" prefix="test" %> <%@taglib uri=" java.sun.com/jstl/core" prefix="core" %> 5. 使標籤庫執行可用 答:方式一:在WEB-INF/classes目錄下部署標記處理常式類; 方式二:將標記處理常式類打包成jar檔案共置於WEB-INF/lib目錄。 6. 幾種典型的標籤(疑問:可以有帶主體而沒有屬性的標籤嗎?) 答:1) 不帶屬性和主體的簡單標籤:; 2) 不帶主體但有屬性的標籤:; 3) 帶有主體和屬性的標籤: ...// 標籤體 ; 注意:a. 屬性列於start tag中,它是在標記庫描述符(TLD)檔案中指定,服務於標記庫的自訂行為; b. 標籤體位於start tag和end tag間,可以是任何合法的JSP內容或者標籤; 7. 定義標籤 答:1) 開發實現tag的類(tag handler); 2) 編輯標記庫描述符(TLD)檔案; 3) 在web.xml中為標記庫描述符(TLD)檔案的絕對URL建立一個映射(該步驟可選); 8. 標記庫描述符(TLD)檔案 答:1) 一個描述標記庫的XML檔案; 2) 內容開始是整個庫的描述,然後......餘下全文>>