如何用eclipse做一個(gè)Taglib的helloWorld例子

helloWorld:
馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號(hào): 73203。
注意當(dāng)你做下面的項(xiàng)目,首先選擇還是老樣子,做Dynamic Web project,但是當(dāng)選擇dynamic web module version版本時(shí),過去我們選擇2.3,這次我們選擇2.4。注意不要錯(cuò),否則做不過去。從這個(gè)例子里可以清楚地看出,標(biāo)簽的前綴greeter定位配置文件的位置。標(biāo)簽本身Hello會(huì)在配置文件當(dāng)中說明它對(duì)應(yīng)哪一個(gè)類。



例 1.2.1
hello.jsp:
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="/WEB-INF/tagExampleLib.tld" prefix="greeter" %>
<html>
   <body>
     <greeter:Hello/>
   </body>
</html>

tagExampleLib.tld:(這是個(gè)Taglib項(xiàng)目所特有的文件,在WEB-INF目錄下,在eclipse中,只需增加這個(gè)普通文本文件即可。)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
     PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
     "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
     <tlibversion>1.0</tlibversion>
     <jspversion>1.1</jspversion>
     <shortname>mark-to-win</shortname>
     <tag>
       <name>Hello</name>
       <tagclass>com.marktowin.HelloWorldTag</tagclass>
       <bodycontent>empty</bodycontent>
     </tag>
</taglib>



HelloWorldTag.java(eclipse中,這只是一個(gè)普通類而已,其中pageContext就對(duì)應(yīng)著jsp的頁面):


package com.marktowin;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;
/*when type, directly type in TagSupport, can import jars, also you can use this to help you to memorize. */
public class HelloWorldTag extends TagSupport {
    public int doStartTag() {
        try {
            this.pageContext.getOut().print("你好,馬克-to-win World!");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return this.SKIP_BODY;
    }
}


瀏覽器中輸出:

你好,馬克-to-win World!





2)doEndTag的例子:

上面的Helloworld例子只說明了起始標(biāo)簽兒對(duì)應(yīng)doStartTag這個(gè)方法。下面的例子就會(huì)說明終止標(biāo)簽對(duì)應(yīng)doEndTag這個(gè)方法,其中返回值EVAL_BODY_INCLUDE表明,把標(biāo)簽的body也輸出,不要忽略。EVAL_PAGE的意思就是繼續(xù)輸出頁面下面的部分,而不忽略。



例 1.2.2


hello.jsp:

<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="/WEB-INF/tagExampleLib.tld" prefix="greeter" %>
<html>
   <body>
     <greeter:Hello>
        this is body身體
     </greeter:Hello>
     this is in jsp end結(jié)束
   </body>
</html>




tagExampleLib.tld:(這里bodycontent不能為empty)


<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
     PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
     "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
     <tlibversion>1.0</tlibversion>
     <jspversion>1.1</jspversion>
     <shortname>mark-to-win</shortname>
     <tag>
       <name>Hello</name>
       <tagclass>com.marktowin.HelloWorldTag</tagclass>
     </tag>
</taglib>



HelloWorldTag.java:


package com.marktowin;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;
public class HelloWorldTag extends TagSupport {
    public int doStartTag()  {
        try {
            pageContext.getOut().print("Hello, World1!");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return EVAL_BODY_INCLUDE;
    }

    public int doEndTag() {
        try {
            pageContext.getOut().print("<br> this is 結(jié)束 tag");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return EVAL_PAGE;
    }
}


運(yùn)行jsp后,瀏覽器中輸出結(jié)果是:

Hello, World1! this is body身體
this is 結(jié)束 tag this is in jsp end結(jié)束




3)帶有屬性的標(biāo)簽的例子:

下面的例子說明標(biāo)簽如何帶有屬性。



例 1.2.3:

hello.jsp:

<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="/WEB-INF/tagExampleLib.tld" prefix="greeter" %>
<html>
   <body>
     <greeter:Hello name1="馬克-to-win" name2="mark-to-win"/><br>
     <greeter:Hello name1="馬克-to-win"/><br>
     <greeter:Hello/>
   </body>
</html>





<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
     PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
     "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
    <tlibversion>1.0</tlibversion>
    <jspversion>1.1</jspversion>
    <shortname>mark-to-win</shortname>
    <tag>
        <name>Hello</name>
        <tagclass>com.marktowin.HelloWorldTag</tagclass>
        <bodycontent>empty</bodycontent>
        <attribute>
            <name>name1</name>
        </attribute>
        <attribute>
            <name>name2</name>
        </attribute>
    </tag>
</taglib>





package com.marktowin;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;

public class HelloWorldTag extends TagSupport {
    private String name1 = "沒名字1", name2 = "沒名字2";
    public void setName1(String name1) {
        this.name1 = name1;
    }
    public void setName2(String name2) {
        this.name2 = name2;
    }
    public int doStartTag() {
        try {
            pageContext.getOut().print(name1+"&nbsp;&nbsp;"+name2);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return SKIP_BODY;
    }
}


運(yùn)行jsp后,瀏覽器中輸出結(jié)果是:
馬克-to-win  mark-to-win
馬克-to-win  沒名字2
沒名字1  沒名字2