创建的标签类,必须实现javax.servlet.jsp.tag接口.
下面是编写的一个简单的使用标签类的例子,该标签用来输出一行文字信息:
Tag类:userTagLib
/* * 标签处理类UserTagLibrary直接实现接口javax.servlet.jsp.tagext.tag接口 * 已经全部实现了Tag接口中的6个方法 * **/ package com.longweir.taglib; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.*; import javax.servlet.http.*; import java.io.*; //实现接口Tag中的6个方法来编写Tag处理类 public class userTagLib implements javax.servlet.jsp.tagext.Tag { private PageContext pagecontext; private Tag Parent; public void setPageContext(PageContext pagecontext) { this.pagecontext=pagecontext; } public void setParent(Tag parent) { this.Parent=parent; } public Tag getParent() { return Parent; } //开始标签处理 public int doStartTag() { return SKIP_BODY; //此处是空标签体,所以直接跳过 } //结束标签体处理 public int doEndTag() { try { pagecontext.getOut().print("Hello,欢迎使用JSP标签对象"); } catch (Exception e) {} return EVAL_PAGE; //继续执行后续JSP页面代码 } //空实现release方法 public void release() { //空实现 } }
编写tld标签库文件userTagLib.tld,用来映射处理的标签所对应的标签类:
<?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.1</tlib-version> <jsp-version>2.1</jsp-version> <short-name>userTagLib</short-name> <uri>/MyuserTagLib</uri> <tag> <name>Hello</name> <tag-class>com.longweir.taglib.userTagLib</tag-class> <body-content>empyt</body-content> </tag> </taglib>
在web.xml文件中,配置标签库的信息
<jsp-config> <taglib> <taglib-uri>/userTagLib</taglib-uri> <taglib-location>/WEB-INF/tlds/userTagLib.tld</taglib-location> </taglib> </jsp-config>
编写一个简单的hello01.jsp文件来显示标签内容:
<%@ page contentType="text/html;charset=GBK"%> <%@ taglib uri="/userTagLib" prefix="myTag" %> <html> <head> <title>HelloApp</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <b>Nice to meet you:${param.username}</b> <br> <p>显示标签库中的信息</p> <h1><myTag:Hello/></h1> </body> </html>
提交页面:http://localhost:8085/hello/hello01.jsp?username=luoxianqiao (username是提交的request参数)
显示结果为:
Nice to meet you:luoxianqiao 显示标签库中的信息 Hello,欢迎使用JSP标签对象
一般编写标签类直接继承自TagSupport即可,该类实现了接口IetreationTag接口,直接继承类实现的代码更简单,如下:
package com.longweir.taglib; import javax.servlet.http.*; import javax.servlet.jsp.tagext.*; import java.io.*; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.JspWriter; public class userTagLib2 extends javax.servlet.jsp.tagext.TagSupport { //结束标签体处理 public int doEndTag() { /* String paramvalue=null; paramvalue=pageContext.getRequest().getParameter(name); //pageContext已在TagSupport中定义 JspWriter out=pageContext.getOut(); try { if (paramvalue!=null) out.print(paramvalue); else out.print("参数未能获取"); } catch (Exception e) { e.printStackTrace(); } */ JspWriter out=pageContext.getOut(); try { out.print("成功显示了标签内容"); } catch (Exception e) { e.printStackTrace(); } return EVAL_PAGE; //继续执行后续JSP页面代码 } }