<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    waysun一路陽光

    不輕易服輸,不輕言放棄.--心是夢的舞臺,心有多大,舞臺有多大。踏踏實實做事,認認真真做人。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      167 隨筆 :: 1 文章 :: 64 評論 :: 0 Trackbacks
    zhuanzi:http://www.searchfull.net/blog/2007/03/07/1173234820271.html
    Test.jsp
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP 'Test.jsp' starting page</title>
      </head>
     
      <body>
        This is my JSP page. <br>
        Date : <%= new java.util.Date().toString() %> <br>
        File : <input value="<%= request.getServletPath() %>" />
      </body>
    </html>

    為了將這個這個Test.jsp改成自定義標簽方法,我們分別使用簡單標簽和內容標簽兩種不同的方式實現。

    1. 簡單標簽

    由于我們需要輸出兩個內容(日期和文件名),因此我們為標簽創建一個參數。具體代碼:

    DemoTag.java
    package com.mycompany;

    import java.util.Date;

    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    import javax.servlet.jsp.tagext.*;

    public class DemoTag extends TagSupport {
      
      public int doStartTag() throws JspException {    
        try {
          HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
          JspWriter out = pageContext.getOut();      
          
          if (parameter.compareToIgnoreCase("filename") == 0)
            out.print(request.getServletPath());
          else
            out.print(new Date());
          
        } catch (java.io.IOException e) {
          throw new JspTagException(e.getMessage());
        }
        
        return SKIP_BODY;
      }
      
      private String parameter = "date";
      
      public void setParameter(String parameter) {
        this.parameter = parameter;
      }
      
      public String getParameter() {
        return parameter;
      }
    }

    接下來,我們創建標簽文件 MyTagLib.tld。標簽文件其實只是一個XML格式的說明文件,內容也很簡單。

    MyTagLib.tld
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>

    <tag>
      <name>demo</name>
      <tag-class>com.mycompany.DemoTag</tag-class>
      <body-content>empty</body-content>
      <attribute>
        <name>parameter</name>
        <required>false</required>
        <rtexprvalue>true</rtexprvalue>
      </attribute>
    </tag>

    </taglib>

    在這個標簽文件中,我們將我們創建的標簽取名 demo,并聲明了類型和參數(parameter)。將該文件保存在 /WEB-INF 下面。
    當然,我們還需要將我們自定義的標簽添加到 web.xml 中,否則還是無法使用。

    web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

      <jsp-config>
        <taglib>
          <taglib-uri>/WEB-INF/MyTagLib</taglib-uri>
          <taglib-location>/WEB-INF/MyTagLib.tld</taglib-location>
        </taglib>
      </jsp-config>

    </web-app>

    你可能在別處看到過類似的聲明,只是沒有外面的 jsp-config,但是我們使用的是DTD 2.4,如果不加,Eclipse 會提示出錯。

    到此為止,我們的自定義標簽算是創建完畢。接下來,我們可以開始改寫那個JSP文件來分離代碼了。

    Test.jsp
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@taglib uri="/WEB-INF/MyTagLib" prefix="mytag"%>
    <html>
      <head>
        <title>My JSP 'Test.jsp' starting page</title>
      </head>
     
      <body>
        This is my JSP page. <br>
        Date : <mytag:demo parameter="date" /><br>
        File : <mytag:demo parameter="filename" />
      </body>
    </html>

    上面這些想必你已經很熟悉,我就不做多說了。

    2. 內容標簽

    創建過程和上面大抵相同,只是程序文件和配置內容有些差異。

    DemoTag2.java
    package com.mycompany;

    import java.io.IOException;
    import java.util.Date;

    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    import javax.servlet.jsp.tagext.*;

    public class DemoTag2 extends BodyTagSupport {
      
      public int doStartTag() throws JspTagException {    
        return EVAL_BODY_BUFFERED;
      }
      
      public int doEndTag() throws JspTagException {
        String body = this.getBodyContent().getString();
        HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
        
        body = body.replace("$date", new Date().toString());
        body = body.replace("$filename", request.getServletPath());
        
        try {
          pageContext.getOut().print(body);
        }
        catch (IOException e) {
          throw new JspTagException(e.getMessage());
        }
        
        return SKIP_BODY;
      }
    }

    我們將新的標簽 DemoTag2 加入到上面的標簽文件中。

    MyTagLib.tld
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>

    <tag>
      <name>demo</name>
      <tag-class>com.mycompany.DemoTag</tag-class>
      <body-content>empty</body-content>
      <attribute>
        <name>parameter</name>
        <required>false</required>
        <rtexprvalue>true</rtexprvalue>
      </attribute>
    </tag>

    <tag>
      <name>demo2</name>
      <tag-class>com.mycompany.DemoTag2</tag-class>
      <body-content>jsp</body-content>
    </tag>

    </taglib>

    web.xml 文件無需修改。

    看看同時使用兩種標簽的Test.jsp效果。

    Test.jsp
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@taglib uri="/WEB-INF/MyTagLib" prefix="mytag"%>
    <html>
      <head>
        <title>My JSP 'Test.jsp' starting page</title>
      </head>
     
      <body>
        This is my JSP page. <br>
        Date : <mytag:demo parameter="date" /><br>
        File : <mytag:demo parameter="filename" />

        <hr>

        <mytag:demo2>
        Date: $date<br>
        File: $filename
        </mytag:demo2>
      </body>
    </html>

    至此,兩種標簽方式都完成。
    本文并沒有就相關技術細節做出說明,建議您看看Sun有關JSP自定義標簽的官方文檔。

    無論是用自定義標簽,還是使用JavaBean,都沒有太大的區別,各人或者團隊可以根據自己的習慣使用。如果需要在獨立類庫中封裝一些供頁面使用的單 元,自定義標簽應該更適合些。不過現在的IDE環境(MyEclipse)在編寫自定義標簽的時候可能有些不太舒服的情況,界面開發人員使用 JavaBean方式可能更方便些,免得莫名其妙的提示干擾您的工作。



    http://www.tkk7.com/Files/1504/tag.rar
    posted on 2009-02-22 19:15 weesun一米陽光 閱讀(153) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲一区二区三区国产精品无码| 亚洲精品国产综合久久久久紧| 亚洲免费福利视频| 亚洲av中文无码乱人伦在线观看| 亚洲无码视频在线| 57pao国产成视频免费播放| 亚洲第一街区偷拍街拍| 国产AV无码专区亚洲AV毛网站| 成视频年人黄网站免费视频| www.av在线免费观看| 91亚洲国产成人久久精品| 亚洲男人天堂2020| 国产免费看JIZZ视频| 巨胸喷奶水视频www免费视频| 亚洲人妖女同在线播放| 亚洲五月综合缴情在线观看| 拨牐拨牐x8免费| 中文字幕免费在线| 亚洲国产免费综合| 亚洲精品乱码久久久久久V | 又黄又爽一线毛片免费观看| 亚洲视频在线免费观看| 18禁亚洲深夜福利人口| 久久亚洲AV成人无码| 亚洲精品无码专区2| 最新猫咪www免费人成| 亚洲免费电影网站| 人人揉揉香蕉大免费不卡| 污污污视频在线免费观看| 中文日韩亚洲欧美制服| 亚洲网红精品大秀在线观看| 久久久久亚洲AV综合波多野结衣 | 亚洲国产成人久久综合碰碰动漫3d| 国产zzjjzzjj视频全免费| 波多野结衣中文字幕免费视频| 中文字幕免费在线看| 九九免费精品视频在这里| 亚洲精品国产首次亮相| tom影院亚洲国产一区二区| 亚洲av无码成h人动漫无遮挡| 亚洲中文字幕丝袜制服一区|