0hi猿团提供了移动跨平台开发视频,包括html5,apicloud appcan,dcloud,具体请看http://www.9y.cm
1自定义标签可以降低 jsp 开发的复杂度和维护量,从 html 角度来说,可以使 html 不用去过多的关注那些比较复杂的商业逻辑(业务逻辑)。
利用自定义标签,可以软件开发人员和页面设计人员合理分工:页面设计人员可以把精力集中在使用标签(HTML,XML或者JSP)创建网站上,而软件开发人员则可以将精力集中在实现底层功能上面,如国际化等,从而提高了工程生产力
将具有共用特性的tag库应用于不同的项目中,体现了软件复用的思想。
2.什么是自定义标签
用户定义的一种自定义的jsp标记 。当一个含有自定义标签的jsp页面被jsp引擎编译成servlet时,tag标签被转化成了对一个称为 标签处理类 的对象的操作。于是,当jsp页面被jsp引擎转化为servlet后,实际上tag标签被转化为了对tag处理类的操作。
3传统标签和简单标签
开发自定义标签,其核心就是要编写处理器类,一个标签对应一个标签处理器类,而一个标签库则是很多标签处理器的集合。所有的标签处理器类都要实现 JspTag 接口,该接口中没有定义任何方法,主要作为 Tag 和 SimpleTag 接口的父接口。
在 JSP 2.0 以前,所有标签处理器类都必须实现 Tag 接口,这样的标签称为传统标签。
JSP 2.0 规范又定义了一种新的类型的标签,称为简单标签,其对应的处理器类要实现 SimpleTag 接口
5标签的形式
空标签:<hello/>
带有属性的空标签:
<max num1=“3” num2=“5”/>
带有内容的标签:
<greeting>
hello
</greeting>
带有内容和属性的标签:
<greeting name=“Tom”>
hello
</greeting>
7自定义标签的开发与应用步骤
编写完成标签功能的 Java 类(标签处理器)
编写标签库描述(tld)文件,在tld文件中对自定义中进行描述
在 JSP 页面中导入和使用自定义标签
8SimpleTag 接口
setJspContext 方法:该方法把代表 JSP 页面的 pageContext 对象传递给标签处理器对象。
setParent 方法:该方法把父标签处理器对象传递给当前标签处理器对象
getParent 方法:该方法用于获得标签的父标签处理器对象
setJspBody 方法:该方法用于把代表标签体的 JspFragment 对象传递给标签处理器对象
doTag 方法:该方法用于完成所有的标签逻辑。该方法可以抛出 javax.servlet.jsp.SkipPageException 异常,用于通知 web 容器不再执行 JSP 页面中位于结束标记后面的内容。
9.ldt 编写过程如下:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib 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/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- 对当前的 tld 文件进行描述 -->
<description>--simpletag study--</description>
<display-name>simpletag core</display-name>
<tlib-version>0.1</tlib-version>
<!--
希望在 JSP 页面使用当前标签库时的前缀名:
即 <%@ taglib prefix="itcast" uri="/WEB-INF/hellotag.tld" %> 中的 prefix
-->
<short-name>itcasttag</short-name>
<!--
对当前 tld 文件的唯一标识, 该名称必须和当前 web 应用中使用的其它标签库描述文件的
uri 不能重复.
-->
<uri>http://www.itcast.cn/simpletag/core_1</uri>
<!-- 描述自定义标签 -->
<tag>
<!-- 设置标签的名字, 该节点的文本值不能和其他标签的 name 文本值重复 -->
<name>hellosimpletag</name>
<!-- 设置当前自定义标签关联的标签处理器类 -->
<tag-class>cn.itcast.javaweb.simpletag.TestSimpleTag</tag-class>
<!-- 定义标签体内容类型, 可选值有 empty, scripless, dependant -->
<body-content>empty</body-content>
</tag>
<!-- 描述自定义标签 -->
<tag>
<!-- 设置标签的名字, 该节点的文本值不能和其他标签的 name 文本值重复 -->
<name>hellotag</name>
<!-- 设置当前自定义标签关联的标签处理器类 -->
<tag-class>cn.itcast.javaweb.simpletag.HelloWithInitParamTag</tag-class>
<!-- 定义标签体内容类型, 可选值有 empty, scripless, dependant -->
<body-content>empty</body-content>
</tag>
<!-- 描述自定义标签 -->
<tag>
<!-- 设置标签的名字, 该节点的文本值不能和其他标签的 name 文本值重复 -->
<name>attributetag</name>
<!-- 设置当前自定义标签关联的标签处理器类 -->
<tag-class>cn.itcast.javaweb.simpletag.SimpleTagWithAttribute</tag-class>
<!-- 定义标签体内容类型, 可选值有 empty, scripless, dependant -->
<body-content>empty</body-content>
<!-- 设置自定义标签的属性 -->
<attribute>
<!-- 配置属性的名字 -->
<name>num</name>
<!-- 该属性是否必须, 默认为 false -->
<required>true</required>
<!--
该属性是否可以接受动态传入的值, 即是否可以为 el 或 jsp 表达式
rtexprvalue: runtime expression value, 默认为 true
-->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>