servlet的自訂標籤的開發步驟,servlet自訂標籤

來源:互聯網
上載者:User

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) 內容開始是整個庫的描述,然後......餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.