<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一米陽光 閱讀(152) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 久久久久久久久久国产精品免费| 五月天婷婷精品免费视频| 亚洲一本综合久久| 免费大学生国产在线观看p| 亚洲视频在线精品| 亚洲伊人久久大香线蕉苏妲己| 久久精品成人免费看| 免费一级国产生活片| 美女被艹免费视频| 久久经典免费视频| 国产无遮挡吃胸膜奶免费看| 亚洲国产精品久久久久网站 | 国产亚洲精午夜久久久久久| 97se亚洲综合在线| 直接进入免费看黄的网站| 亚洲无砖砖区免费| 亚洲色偷拍区另类无码专区| 久久免费国产精品| 日本人护士免费xxxx视频| 亚洲综合在线成人一区| 黄页网址大全免费观看12网站| 亚洲天堂免费在线视频| 暖暖免费在线中文日本| 亚洲一区无码中文字幕| 精品国产日韩亚洲一区91| 希望影院高清免费观看视频| jiz zz在亚洲| 全部免费毛片在线播放| 亚洲成AV人片一区二区| 一级看片免费视频| 亚洲va中文字幕无码| 亚洲精品国产精品| 男女做羞羞的事视频免费观看无遮挡| 亚洲日本久久久午夜精品| 亚洲第一福利网站在线观看| 久久国产精品免费观看| 亚洲a∨无码一区二区| 日本免费一二区在线电影| 男人天堂免费视频| 亚洲中文字幕无码日韩| 国内精品免费久久影院|