学习心得 - 自定义标签库(上)
发表于:2007-07-04来源:作者:点击数:
标签:
1. 什么是自定义标签 答:1) 用户自定义的 Java 语言元素, 实质是运行一个或者两个接口的JavaBean; 2) 可以非常机密地和JSP的表示逻辑联系在一起,又具有和普通JavaBean相同的业务逻辑处理能力; 2) 当一个JSP页面转变为servlet时,其间的用户自定义标签转化
1. 什么是自定义标签
答:1) 用户自定义的Java语言元素, 实质是运行一个或者两个接口的JavaBean;
2) 可以非常机密地和JSP的表示逻辑联系在一起,又具有和普通JavaBean相同的业务逻辑处理能力;
2) 当一个JSP页面转变为servlet时,其间的用户自定义标签转化为操作一个称为标签hander的对象;
3) 可操作默认对象,处理表单数据,访问数据库以及其它企业服务;
2. 自定义标签库的特点
答:1) 通过调用页面传递参数实现定制;
2) 访问所有对JSP页面可能的对象;
3) 修改调用页面生成的响应;
4) 自定义标签间可相互通信;
5) 在同一个JSP页面中通过标签嵌套,可实现复杂交互。
3. 如何使用自定义标签库
答:1) 声明标签库
2) 使标签库执行对Web应用程序可用
4. 声明标签库
答:1) 使用taglib指令声明标签库
2) 语法:<%@taglib uri="URI" prefix="pre" %>
注意:a. uri属性可以是绝对的,也可以是相对URL,该URL指向标记库描述符(TLD)文件;
b. uri属性也可以是一个并不存在的URL,该URL为web.xml文件中将标记库描述符(TLD)文件的绝对URL到本地系统的一个映射;
3) 范例:<%@taglib uri="/WEB-INF/template.tld" prefix="test" %>
<%@taglib uri="http://java.sun.com/jstl/core" prefix="core" %>
5. 使标签库执行可用
答:方式一:在WEB-INF/classes目录下部署标记处理程序类;
方式二:将标记处理程序类打包成jar文件并置于WEB-INF/lib目录。
6. 几种典型的标签(疑问:可以有带主体而没有属性的标签么?)
答:1) 不带属性和主体的简单标签:<mytaglibs:SomeTag/>;
2) 不带主体但有属性的标签:<mytaglibs:SomeTag user="TonyDeng"/>;
3) 带有主体和属性的标签:<mytaglibs:SomeTag user="TonyDeng">
...// 标签体
</mytaglibs:SomeTag>;
注意:a. 属性列于start tag中,它是在标记库描述符(TLD)文件中指定,服务于标记库的自定义行为;
b. 标签体位于start tag和end tag间,可以是任何合法的JSP内容或者标签;
7. 定义标签
答:1) 开发实现tag的类(tag handler);
2) 编辑标记库描述符(TLD)文件;
3) 在web.xml中为标记库描述符(TLD)文件的绝对URL建立一个映射(该步骤可选);
8. 标记库描述符(TLD)文件
答:1) 一个描述标记库的XML文件;
2) 内容开始是整个库的描述,然后是tag的描述;
3) 标记库描述符(TLD)文件用于Web Container确认tag以及JSP页面发展工具;
9. 实现tag的类(tag handler)
答:1) 是一些在引用了标签的JSP页面执行期间被Web Container调用以求自定义标签值的对象;
2) 必须实现Tag, SimpleTag和BodyTag之一;
3) 可以继承TagSupport和BodyTagSupport之一。
10. 标签库的接口和类的继承关系
答:表现形式一:
a. 接口的继承关系:
☉ interface javax.servlet.jsp.tagext.JspTag
☉ interface javax.servlet.jsp.tagext.SimpleTag
☉ interface javax.servlet.jsp.tagext.Tag
☉ interface javax.servlet.jsp.tagext.IterationTag
☉ interface javax.servlet.jsp.tagext.BodyTag
b. 类的继承关系:
☉ class javax.servlet.jsp.tagext.TagSupport (implements javax.servlet.jsp.tagext.IterationTag, java.io.Serializable)
☉ class javax.servlet.jsp.tagext.BodyTagSupport (implements javax.servlet.jsp.tagext.BodyTag)
☉ class javax.servlet.jsp.tagext.SimpleTagSupport (implements javax.servlet.jsp.tagext.SimpleTag)
表现形式二:
(Interface)
JspTag
↑
|ˉˉˉˉˉˉˉˉ|
(Interface) (Interface)
Tag SimpleTag ←--SimpleTagSupport
↑
|
(Interface)
IterationTag←--TagSupport
↑ ↑
| |
(Interface) |
BodyTag ←--BodyTagSupport
原文转自:http://www.ltesting.net