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

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

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

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      37 Posts :: 64 Stories :: 21 Comments :: 0 Trackbacks
    在上篇使用JavaBean實現JSP頁面和代碼分離中,我們使用JavaBean來達到分離的目的至于本文要使用的自定義標簽并不新鮮,此處我也不過是照本宣科地走一遭罷了只是某些細節處,還應當多注意些

    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方式可能更方便些,免得莫名其妙的提示干擾您的工作
    posted on 2009-11-04 13:53 xiachang88 閱讀(344) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲成人激情在线| 亚洲自偷自拍另类12p| 亚洲国产精品久久久久秋霞小| 久久九九兔免费精品6| 久久狠狠高潮亚洲精品| 亚洲精品视频免费在线观看| 亚洲图片一区二区| 国产曰批免费视频播放免费s | 久久久久亚洲AV成人网人人网站 | 日韩精品无码免费一区二区三区| 亚洲熟妇AV日韩熟妇在线| 成人免费黄色网址| 亚洲国产成人精品激情| 一级特黄录像视频免费| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 免费人成毛片动漫在线播放| 水蜜桃亚洲一二三四在线 | 免费毛片毛片网址| 亚洲一区二区三区香蕉| 免费女人高潮流视频在线观看| 亚洲精品成人图区| 香蕉高清免费永久在线视频| 免费看美女午夜大片| 亚洲av无码片在线播放| 日韩精品极品视频在线观看免费| 亚洲激情校园春色| 国产大片线上免费看| 成人免费乱码大片A毛片| 久久精品国产亚洲av麻豆小说| 成人毛片18岁女人毛片免费看| 免费精品视频在线| 久久精品国产亚洲AV无码娇色| 国产成人精品男人免费| a毛片在线免费观看| 久久精品亚洲AV久久久无码| 亚洲国产成人久久综合碰| 99爱在线观看免费完整版| 亚洲AV无码AV男人的天堂不卡 | 久久久无码精品亚洲日韩京东传媒| 毛片视频免费观看| 亚洲国产美女在线观看|