<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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 99久久国产免费中文无字幕| 中文字幕影片免费在线观看| 久久久久亚洲av无码专区导航| 一级女人18毛片免费| 亚洲日韩在线中文字幕综合 | 亚洲国产精品日韩| 暖暖在线视频免费视频| 亚洲人精品亚洲人成在线| 久久精品亚洲男人的天堂| 国产成人福利免费视频| 无码日韩人妻AV一区免费l| 亚洲精品综合久久中文字幕| 亚洲黄片手机免费观看| 亚洲精品在线免费观看视频| 特级aaaaaaaaa毛片免费视频| 内射少妇36P亚洲区| 亚洲男人的天堂一区二区| 国产四虎免费精品视频| a级毛片100部免费观看| 久久亚洲精品11p| 亚洲电影在线免费观看| 国产精品亚洲玖玖玖在线观看| 久久久久久精品免费免费自慰| www成人免费观看网站| 久久精品亚洲AV久久久无码| 亚洲线精品一区二区三区| 日韩免费观看视频| 亚洲精品在线免费看| 成人性生交大片免费看好| 偷自拍亚洲视频在线观看99| 亚洲一区二区三区国产精品无码| 亚洲午夜福利AV一区二区无码| 韩国日本好看电影免费看| 成年人免费的视频| 免费视频成人片在线观看| 福利免费在线观看| 一级一看免费完整版毛片| 丰满亚洲大尺度无码无码专线 | 国产乱色精品成人免费视频| 91网站免费观看| 3344在线看片免费|