如何用eclipse做一个Taglib的helloWorld例子

helloWorld:
马克- to-win:马克 java社区:防盗版实名手机尾号: 73203。
注意当你做下面的项目,首先选择还是老样子,做Dynamic Web project,但是当选择dynamic web module version版本时,过去我们选择2.3,这次我们选择2.4。注意不要错,否则做不过去。从这个例子里可以清楚地看出,标签的前缀greeter定位配置文件的位置。标签本身Hello会在配置文件当中说明它对应哪一个类。



例 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:(这是个Taglib项目所特有的文件,在WEB-INF目录下,在eclipse中,只需增加这个普通文本文件即可。)
<?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中,这只是一个普通类而已,其中pageContext就对应着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例子只说明了起始标签儿对应doStartTag这个方法。下面的例子就会说明终止标签对应doEndTag这个方法,其中返回值EVAL_BODY_INCLUDE表明,把标签的body也输出,不要忽略。EVAL_PAGE的意思就是继续输出页面下面的部分,而不忽略。



例 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结束
   </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 结束 tag");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return EVAL_PAGE;
    }
}


运行jsp后,浏览器中输出结果是:

Hello, World1! this is body身体
this is 结束 tag this is in jsp end结束




3)带有属性的标签的例子:

下面的例子说明标签如何带有属性。



例 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;
    }
}


运行jsp后,浏览器中输出结果是:
马克-to-win  mark-to-win
马克-to-win  没名字2
没名字1  没名字2