<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://m.tkk7.com/Files/1504/tag.rar
    posted on 2009-02-22 19:15 weesun一米陽光 閱讀(152) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 成人性生活免费视频| 久久国产美女免费观看精品| 在线观看的免费网站无遮挡| 亚洲尹人香蕉网在线视颅| 免费精品久久天干天干| 久久香蕉国产线看观看亚洲片 | 自拍偷区亚洲国内自拍| 欧美最猛性xxxxx免费| 亚洲heyzo专区无码综合| 日日夜夜精品免费视频| 免费看一级一级人妻片| 精品国产亚洲男女在线线电影| 国产久爱免费精品视频 | 手机看黄av免费网址| 国产精品高清视亚洲精品| 成年女人毛片免费观看97| 欧美激情综合亚洲一二区| 亚洲国产精品丝袜在线观看| 美女被免费网站91色| 亚洲美女视频网站| 女人被免费视频网站| 一区二区免费在线观看| 亚洲毛片在线观看| 成人免费无码大片a毛片软件| 福利片免费一区二区三区| 亚洲午夜国产精品无码| 18禁止看的免费污网站| 亚洲乱码国产乱码精华| 伊人久久大香线蕉亚洲| 日本免费xxxx| 曰批全过程免费视频免费看| 亚洲大尺度无码无码专区| 成人免费午夜无码视频| 一级特黄录像视频免费 | 精品一区二区三区免费毛片| 亚洲无线码一区二区三区| 无码中文字幕av免费放| av网站免费线看| 国产婷婷综合丁香亚洲欧洲| 亚洲综合国产精品第一页| 黄+色+性+人免费|