如何用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+" "+name2);
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
}
運(yùn)行jsp后,瀏覽器中輸出結(jié)果是:
馬克-to-win mark-to-win
馬克-to-win 沒名字2
沒名字1 沒名字2