<?xml version="1.0" encoding="UTF-8"?>java
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">web
<!--taglib(标签库)的版本号 -->数据库
<!--缩写,没用到-->express
<!-- apache
为自定义标签库设置一个uri,uri以/开头,/后面的内容随便写,如这里的/gacl ,
在Jsp页面中引用标签库时,须要经过uri找到标签库
在Jsp页面中就要这样引入标签库:<%@taglib uri="/gacl" prefix="gacl"%>
-->
<!-- description用来添加对taglib(标签库)的描述 -->缓存
<!--一个taglib(标签库)中包含多个自定义标签,每个自定义标签使用一个tag标记来描述 -->服务器
<!-- 一个tag标记对应一个自定义标签 -->app
<tag>less
<name>getName</name>//
<tag-class>com.maystar.tag.TestTag</tag-class>
<body-content>JSP</body-content>
<description><![CDATA[validate the element can be show ]]></description>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>jsp
</taglib>
private static PageContext pageContext;
private String value;
this.value = value;
@Override
public int doStartTag() throws JspException {
HttpServletRequest request =(HttpServletRequest) pageContext.getRequest();
Map map = (Map)request.getSession().getServletContext().getAttribute("MAP_ROLE");
String str1=Convert.trimNull(map.get(value));
JspWriter out = pageContext.getOut();
try {
//这里输出的时候会抛出IOException异常
out.write(str1);
} catch (IOException e) {
//捕获IOException异常后继续抛出
throw new RuntimeException(e);
}
return 0;
}
@Override
public int doEndTag() throws JspException {
System.out.println("调用doEndTag()方法");
return 0;
}
@Override
public TagSupport getParent() {
return null;
}
@Override
public void release() {
System.out.println("调用release()方法");
}
@Override
public void setPageContext(PageContext pageContext) {
System.out.println("setPageContext(PageContext pageContext)");
this.pageContext = pageContext;
}
public void setParent(TagSupport arg0) {
}
一、public void setPageContext(PageContext pc), JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面的pageContext对象传递给标签处理器,标签处理器之后能够经过这个pageContext对象与JSP页面进行通讯。
二、public void setParent(Tag t),setPageContext方法执行完后,WEB容器接着调用的setParent方法将当前标签的父标签传递给当前标签处理器,若是当前标签没有父标签,则传递给setParent方法的参数值为null。
三、public int doStartTag(),调用了setPageContext方法和setParent方法以后,WEB容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag方法。
四、public int doEndTag(),WEB容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,WEB容器会去调用标签处理器的doEndTag方法。
五、public void release(),一般WEB容器执行完自定义标签后,标签处理器会驻留在内存中,为其它请求服务器,直至中止web应用时,web容器才会调用release方法。
<?xml version="1.0" encoding="UTF-8" ?>
<!--
<function>
<description>测试: 与 el 结合使用 如 ${test:getStringLength("XX")}</description>
<name>getStringLength</name> 注意,这里,定义的是,标签对应的函数名
<function-class>taglib.StringUtils</function-class>注意:这里,给出了,该类,所在的路径,全路径
<function-signature>java.lang.Integer getStringLength(java.lang.String)</function-signature>
</function>
</taglib>
<jsp-config>
<taglib>
</taglib>
</jsp-config>