Java jsp 自訂標籤

來源:互聯網
上載者:User

標籤:自訂   標記   exce   介面   執行   context   查詢   建立   instance   

1 自訂標籤 1.1 引入

需求: 向瀏覽器輸出當前客戶的IP地址 (只能使用jsp標籤)

 

1.2 第一個自訂標籤開發步驟

1)編寫一個普通的java類,繼承SimpleTagSupport類,叫標籤處理器類

 

/**

 * 標籤處理器類

 * @author APPle

 * 1)繼承SimpleTagSupport

 *

 */

public class ShowIpTag extends SimpleTagSupport{

private JspContext context;

 

/**

 * 傳入pageContext

 */

@Override

public void setJspContext(JspContext pc) {

this.context = pc;

}

 

/**

 * 2)覆蓋doTag方法

 */

@Override

public void doTag() throws JspException, IOException {

//向瀏覽器輸出客戶的ip地址

PageContext pageContext = (PageContext)context;

 

HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();

 

String ip = request.getRemoteHost();

 

JspWriter out = pageContext.getOut();

 

out.write("使用自訂標籤輸出客戶的IP地址:"+ip);

 

}

}

 

2)在web項目的WEB-INF目錄下建立itcast.tld檔案,這個tld叫標籤庫的聲明檔案。(參考核心標籤庫的tld檔案)

 

<?xml version="1.0" encoding="UTF-8" ?>

 

<taglib xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"

    version="2.1">

  <!-- 標籤庫的版本 -->

  <tlib-version>1.1</tlib-version>

  <!-- 標籤庫首碼 -->

  <short-name>itcast</short-name>

  <!-- tld檔案的唯一標記 -->

  <uri>http://gz.itcast.cn</uri>

 

  <!-- 一個標籤的聲明 -->

  <tag>

    <!-- 標籤名稱 -->

    <name>showIp</name>

    <!-- 標籤處理器類的全名 -->

    <tag-class>gz.itcast.a_tag.ShowIpTag</tag-class>

    <!-- 輸出標籤體內容格式 -->

    <body-content>scriptless</body-content>

  </tag>

 

</taglib>

 

 

3) 在jsp頁面的頭部匯入自訂標籤庫

    <%@taglib uri="http://gz.itcast.cn" prefix="itcast"%>

 

4) 在jsp中使用自訂標籤

<itcast:showIp></itcast:showIp>

 

1.3 自訂標籤的執行過程

問題: http://localhost:8080/day14/01.hellotag.jsp  如何訪問到自訂標籤?

 

前提: tomcat伺服器啟動時,載入到每個web應用,載入每個web應用的WEB-INF目錄下的所有檔案!!!例如。web.xml, tld檔案!!!

1)訪問01.hellotag.jsp資源

2)tomcat伺服器把jsp檔案翻譯成java源檔案->編譯class->構造類對象->調用_jspService()方法

3)檢查jsp檔案的taglib指令,是否存在一個名為http://gz.itcast.cn的tld檔案。如果沒有,則報錯

4)上一步已經讀到itcast.tld檔案

5)讀到<itcast:showIp> 到itcast.tld檔案中查詢是否存在<name>為showIp的<tag>標籤

6)找到對應的<tag>標籤,則讀到<tag-class>內容

7)得到 gz.itcast.a_tag.ShowIpTag

 

構造ShowIpTag對象,然後調用ShowIpTag裡面的方法

 

1.4 自訂標籤處理器類的生命週期

SimpleTag介面:

void setJspContext(JspContext pc)  --設定pageContext對象,傳入pageContext(一定調用)

通過getJspCotext()方法得到pageContext對象

void setParent(JspTag parent)  --設定父標籤對象,傳入父標籤對象,如果沒有父標籤,則不 調用此方法。通過getParent()方法得到父標籤對象。

void     setXXX(值)             --設定屬性值。

void setJspBody(JspFragment jspBody) --設定標籤體內容。標籤體內容封裝到JspFragment對象 中,然後傳入JspFragment對象。通過getJspBody()方法 得到標籤體內容。如果沒有標籤體內容,則不會調 用此方法

void doTag()                     --執列標籤時調用的方法。(一定調用)

 

1.5 自訂標籤的作用

1)控制標籤體內容是否輸出

2)控制標籤餘下內容是否輸出

3)控制重複輸出標籤體內容

4)改變標籤體內容

5)帶屬性的標籤

步驟:

5.1 在標籤處理器中添加一個成語變數和setter方法

 

//1.聲明屬性的成員變數

private Integer num;

 

//2.關鍵點: 必須提供公開的setter方法,用於給屬性賦值

public void setNum(Integer num) {

this.num = num;

}

 

 

1.6 輸出標籤體內容格式

JSP:   在傳統標籤中使用的。可以寫和執行jsp的java代碼。

scriptless:  標籤體不可以寫jsp的java代碼

empty:    必須是空標籤。

tagdependent : 標籤體內容可以寫jsp的java代碼,但不會執行。

 

Java jsp 自訂標籤

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.