JSP中引入自定义标签,主要是为了把JSP代码与HTML代码分离,两者混在一起,维护成本更高。 自定义标签有三步骤,1、写标签类 2、写定义标签的tld文件 3、JSP中使用 标签类Tablib.java:
package pocketdigi;
import java.io.IOException;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class Taglib extends SimpleTagSupport {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public void doTag() throws JspException, IOException {
// TODO Auto-generated method stub
//自动调用doTag()方法
JspContext context=getJspContext();
JspWriter out=context.getOut();
out.println("My Name is "+name+",I'm "+age+" years old");
super.doTag();
}
}
在WEB-INF目录下新建Taglib.tld文件,MyEclipse有模板,很方便:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>myTag</short-name>
<!-- 短名好像没什么用 -->
<uri>http://www.pocketdigi.com</uri>
<!-- uri好像唯一就可以 -->
<tag>
<name>introduce</name>
<!-- 标签名,jsp中引用时用 -->
<tag-class>pocketdigi.Taglib</tag-class>
<!-- 类名 -->
<body-content>empty</body-content>
<!-- 标签体内容,保持empty,暂时不了解其他值的用法 -->
<attribute>
<name>name</name>
<required>true</required>
</attribute>
<attribute>
<name>age</name>
<required>true</required>
</attribute>
<!-- 两个属性,required是指是否必须设置 -->
</tag>
</taglib>
在JSP中使用:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="myTagLib" prefix="myTag" %>
<html>
<head>
<title>My JSP '1.jsp' starting page</title>
</head>
<body>
<myTag:introduce age="15" name="Jim"/>
</body>
</html>
执行结果:My Name is Jim,I’m 15 years old