亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

direktori cari
JSP 基礎教程 JSP 開發(fā)環(huán)境搭建 JSP 結構 JSP 生命周期 JSP 語法 JSP 指令 JSP 動作元素 JSP 隱式對象 JSP 客戶端請求 JSP 服務器響應 JSP HTTP 狀態(tài)碼 JSP 表單處理 JSP 過濾器 JSP Cookies 處理 JSP Session JSP 文件上傳 JSP 日期處理 JSP 頁面重定向 JSP 點擊量統(tǒng)計 JSP 自動刷新 JSP 發(fā)送郵件 JSP 高級教程 JSP 標準標簽庫(JSTL) <c:out> 標簽 <c:set> 標簽 <c:remove> 標簽 <c:catch> 標簽 <c:if> 標簽 <c:choose> <c:import> 標簽 <c:forEach> <c:param> 標簽 <c:redirect> 標簽 <fmt:formatNumber>標簽 <fmt:parseNumber> 標簽 <fmt:formatDate> 標簽 <fmt:parseDate> 標簽 <fmt:bundle> 標簽 <fmt:setLocale> 標簽 <fmt:setBundle> 標簽 <fmt:timeZone> 標簽 <fmt:setTimeZone> 標簽 <fmt:message> 標簽 <fmt:requestEncoding> 標簽 <sql:setDataSource> 標簽 <sql:query> 標簽 <sql:update> 標簽 <sql:param> 標簽 <sql:dateParam> 標簽 <sql:transaction> 標簽 <x:out> 標簽 <x:parse> 標簽 <x:set> 標簽 <x:if> 標簽 <x:forEach> 標簽 <x:choose> <x:transform> 標簽 <x:param> 標簽 fn:contains()函數(shù) fn:containsIgnoreCase()函數(shù) fn:endsWith()函數(shù) fn:escapeXml()函數(shù) fn:indexOf()函數(shù) fn:join()函數(shù) fn:length()函數(shù) fn:replace()函數(shù) fn:split()函數(shù) fn:startsWith()函數(shù) fn:substring()函數(shù) fn:substringAfter()函數(shù) fn:substringBefore()函數(shù) fn:toLowerCase()函數(shù) fn:toUpperCase()函數(shù) fn:trim()函數(shù) JSP 連接數(shù)據(jù)庫 JSP XML 數(shù)據(jù)處理 JSP JavaBean JSP 自定義標簽 JSP 表達式語言 JSP 異常處理 JSP 調試 JSP 國際化
watak

JSP 自定義標簽


自定義標簽是用戶定義的JSP語言元素。當JSP頁面包含一個自定義標簽時將被轉化為servlet,標簽轉化為對被 稱為tag handler的對象的操作,即當servlet執(zhí)行時Web container調用那些操作。

JSP標簽擴展可以讓你創(chuàng)建新的標簽并且可以直接插入到一個JSP頁面。 JSP 2.0規(guī)范中引入Simple Tag Handlers來編寫這些自定義標記。

你可以繼承SimpleTagSupport類并重寫的doTag()方法來開發(fā)一個最簡單的自定義標簽。


創(chuàng)建"Hello"標簽

接下來,我們想創(chuàng)建一個自定義標簽叫作<ex:Hello>,標簽格式為:

<ex:Hello />

要創(chuàng)建自定義的JSP標簽,你首先必須創(chuàng)建處理標簽的Java類。所以,讓我們創(chuàng)建一個HelloTag類,如下所示:

package com.tutorialspoint;

import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class HelloTag extends SimpleTagSupport {

  public void doTag() throws JspException, IOException {
    JspWriter out = getJspContext().getOut();
    out.println("Hello Custom Tag!");
  }
}

以下代碼重寫了doTag()方法,方法中使用了getJspContext()方法來獲取當前的JspContext對象,并將"Hello Custom Tag!"傳遞給JspWriter對象。

編譯以上類,并將其復制到環(huán)境變量CLASSPATH目錄中。最后創(chuàng)建如下標簽庫:<Tomcat安裝目錄>webapps\ROOT\WEB-INF\custom.tld。

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Example TLD</short-name>
  <tag>
    <name>Hello</name>
    <tag-class>com.tutorialspoint.HelloTag</tag-class>
    <body-content>empty</body-content>
  </tag>
</taglib>

接下來,我們就可以在JSP文件中使用Hello標簽:

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
  <head>
    <title>A sample custom tag</title>
  </head>
  <body>
    <ex:Hello/>
  </body>
</html>

以上程序輸出結果為:

Hello Custom Tag!

訪問標簽體

你可以像標準標簽庫一樣在標簽中包含消息內容。如我們要在我們自定義的Hello中包含內容,格式如下:

<ex:Hello>
   This is message body
</ex:Hello>

我們可以修改標簽處理類文件,代碼如下:

package com.tutorialspoint;

import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class HelloTag extends SimpleTagSupport {

   StringWriter sw = new StringWriter();
   public void doTag()
      throws JspException, IOException
    {
       getJspBody().invoke(sw);
       getJspContext().getOut().println(sw.toString());
    }

}

接下來我們需要修改TLD文件,如下所示:

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Example TLD with Body</short-name>
  <tag>
    <name>Hello</name>
    <tag-class>com.tutorialspoint.HelloTag</tag-class>
    <body-content>scriptless</body-content>
  </tag>
</taglib>

現(xiàn)在我們可以在JSP使用修改后的標簽,如下所示:

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
  <head>
    <title>A sample custom tag</title>
  </head>
  <body>
    <ex:Hello>
        This is message body
    </ex:Hello>
  </body>
</html>

以上程序輸出結果如下所示:

This is message body

自定義標簽屬性

你可以在自定義標準中設置各種屬性,要接收屬性,值自定義標簽類必須實現(xiàn)setter方法, JavaBean 中的setter方法如下所示:

package com.tutorialspoint;

import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class HelloTag extends SimpleTagSupport {

   private String message;

   public void setMessage(String msg) {
      this.message = msg;
   }

   StringWriter sw = new StringWriter();

   public void doTag()
      throws JspException, IOException
    {
       if (message != null) {
          
          JspWriter out = getJspContext().getOut();
          out.println( message );
       }
       else {
          
          getJspBody().invoke(sw);
          getJspContext().getOut().println(sw.toString());
       }
   }

}

屬性的名稱是"message",所以setter方法??是的setMessage()?,F(xiàn)在讓我們在TLD文件中使用的<attribute>元素添加此屬性:

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Example TLD with Body</short-name>
  <tag>
    <name>Hello</name>
    <tag-class>com.tutorialspoint.HelloTag</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
       <name>message</name>
    </attribute>
  </tag>
</taglib>

現(xiàn)在我們就可以在JSP文件中使用message屬性了,如下所示:

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
  <head>
    <title>A sample custom tag</title>
  </head>
  <body>
    <ex:Hello message="This is custom tag" />
  </body>
</html>

以上實例數(shù)據(jù)輸出結果為:

This is custom tag

你還可以包含以下屬性:

屬性 描述
name 定義屬性的名稱。每個標簽的是屬性名稱必須是唯一的。
required 指定屬性是否是必須的或者可選的,如果設置為false為可選。
rtexprvalue 聲明在運行表達式時,標簽屬性是否有效。
type 定義該屬性的Java類類型 。默認指定為 String
description 描述信息
fragment 如果聲明了該屬性,屬性值將被視為一個 JspFragment。

以下是指定相關的屬性實例:

.....
    <attribute>
      <name>attribute_name</name>
      <required>false</required>
      <type>java.util.Date</type>
      <fragment>false</fragment>
    </attribute>
.....

如果你使用了兩個屬性,修改TLD文件,如下所示:

.....
    <attribute>
      <name>attribute_name1</name>
      <required>false</required>
      <type>java.util.Boolean</type>
      <fragment>false</fragment>
    </attribute>
    <attribute>
      <name>attribute_name2</name>
      <required>true</required>
      <type>java.util.Date</type>
    </attribute>
.....

關于我們 聯(lián)系我們 留言板

手冊網

Artikel sebelumnya: Artikel seterusnya: