作者:java_beer
1.自定义标签基础知识:
1.1可用性:
自定义标签可以大大降低了jsp开发的复杂度和维护量,从html角度来说,可以使它不用去过多的关注那些比较复杂的商业逻辑,通过将库开发者和使用者的合理分工,自定义标签将那些重复工作进行封装,从而提高了工程生产力,而且将具有共用特性的tag库应用于不同的项目中,体现了软件复用的思想。
1.2 什么是自定义标签:
用户定义的一种自定义的jsp标记 。当一个含有自定义标签的jsp页面被jsp引擎编译成servlet时,tag标签被转化成了对一个称为tag处理类的对象的操作。于是乎,当jsp页面被jsp引擎转化为servlet后,实际上tag标签被转化为了对tag处理类的操作。
1.3在页面中使用自定义标签:
1.3.1 声明标签库:
直接引用:
格式:<%@ taglib uri=”/WEB-INF/mytag.tld” prefix=”mt”%>
注意:标签库文件必须以.tld作为扩展名,存放在当前应用的WEN-INF目录或其子目录下,prefix用来区分不同标签库中同名标签。
间接引用:
格式:<%@ taglib uri=”mytaglib” prefix=”mt”%>
同时在web.xml文件名定义一个逻辑名称与tld文件的映射:
<taglib>
<taglib-uri>/mylaglib</taglib-uri>
<taglib-location>/WEB-INF/mytag.tld</taglib-location>
</taglib>
1.3.2 自定义标签实现
1. 将tag处理类.class至于WEB-INF/classes目录下
2. 将存放tag处理类的JAR包置于当前应用的WEB-INF/lib目录下
1.3.3自定义标签类型
1. 含有body的tag:
<mt:tag>
body
</my:tag>
如:
<mt:tag attr=”para”>
<%out.println(“*************”);%>
<font>带body的自定义标签</font>
</mt:tag>
那么标签处理类执行完后,页面将输出body部分的内容
2. 不带body的tag:
<mt:tag/>
3. 没有body和属性的tag:
<mt:simple/>
4. 带属性的tag:
<mt:tag attr=”string” attr=”<%=attr%>”/>
注:属性相当于自定义标签的一个参数,它影响着标签处理类的行为。
1.3.4 标签处理类
标签处理类必须实现Tag接口或BodyTag接口,不过通常的做法是继承TagSupport或BodyTagSupport类(在javax.servlet.jsp.tagext包中可以找到)
标签处理类要实现的方法:
标签类型 | 调用方法 |
基本标签 | doStartTag,,doEndTag,release |
带属性的标签 | doStartTag,,doEndTag,release,set/getAttribute1…n |
带内容的标签 | doStartTag,,doEndTag,release |
带内容的标签,内容需要重复循环 | doStartTag,,doAfterBody,doEndTag,release |
带内容的标签,内容与JSP交互 | doStartTag,,doEndTag,release,doInitBody,doAfterBody |
注:标签处理类中,通过javax.servlet.jsp.PageContext获取JSP中的request,session和Application对象。