基于jsp2.0的自定义Taglib标签,开发标签库只需如下几个步骤:
1. 引用java包
import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*;
2. 开发自定义标签处理类
自定义标签类都必须继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,或者TagSupport除此之外,JSP自定义标签类还有如下要求。
1. 如果标签类包含属性,每个属性都有对应的getter和setter方法。
2. 重写doTag()或者doStartTag()或doEndTag()方法方法,这个方法负责生成页面内容。
//java文件 public class UserInfoTag extends TagSupport { private UserInfo user; @Override public int doStartTag() throws JspException { try { JspWriter out = this.pageContext.getOut(); if(user == null) { out.println("No UserInfo Found..."); return SKIP_BODY; } out.println("<table width='500px' border='1' align='center'>"); out.println("<tr>"); out.println("<td width='20%'>Username:</td>"); out.println("<td>" + user.getUserName() + "</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>Age:</td>"); out.println("<td>" + user.getAge() + "</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>Email:</td>"); out.println("<td>" + user.getEmail() + "</td>"); out.println("</tr>"); out.println("</table>"); } catch(Exception e) { throw new JspException(e.getMessage()); } return SKIP_BODY; } @Override public int doEndTag() throws JspException { return EVAL_PAGE; } @Override public void release() { super.release(); this.user = null; } //getter and setters public UserInfo getUser() { return user; } public void setUser(UserInfo user) { this.user = user; } }
3. 建立一个*.tld文件,每个*.tld文件对应一个标签库,每个标签库对应多个标签
TLD是Tag Library Definition的缩写,即标签库定义,文件的后缀是tld,每个TLD文件对应一个标签库,一个标签库中可包含多个标签,TLD文件也称为标签库定义文件。标签库定义文件的根元素是taglib,它可以包含多个tag子元素,每个tag子元素都定义一个标签。通常我们可以到Web容器下复制一个标签库定义文件,并在此基础上进行修改即可。
<?xml version="1.0" encoding="UTF-8"?> <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>cc</short-name> <!-- 定义该标签库的URI 必须添加但可以空--> <uri>/mytaglib</uri> <!-- 定义第一个标签 --> <tag> <!-- 定义标签名 --> <name>showUserInfo</name> <!-- 定义标签处理类 --> <tag-class>com.mytags.UserInfoTag</tag-class> <!-- 定义标签体为空 --> <body-content>empty</body-content> <attribute> <name>user</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
4. 配置web.xml
//web.xml <jsp-config> <taglib> <taglib-uri>/mytaglib</taglib-uri> <taglib-location>/WEB-INF/mytaglib.tld</taglib-location> </taglib> </jsp-config>
5. 在JSP文件中使用自定义标签
<%@ taglib uri="/mytaglib" prefix="cc"%>
这样自定义标签就建立好了。