在WEB-INF下新建tlds文件夹,把这个文件取名为test.tld,放到tlds文件夹下。引用时的路径应该这样:WEB-INF\tlds\test.tld
关于tld的简单说明:
short-name:taglib的名称,也称为前缀。比如“c:out value=""/” 里的“c”
name:tag的名字。例如“c:out value=""/” 里的"out”,我们的类也取名为out,由于有前缀作区分,不会同其他库的同名tag组件混淆
tag-class:完整的tag组件路径,记着带包名
body-content:指tag之间的内容。例如c:out value="" ...... /c 起始和关闭标签之间就是body-content。由于没有处理body-content ,所以上面设为empty,如果是嵌套标签,或则是要在服务器端处理标签体的话,就是jsp了
“attribute”里的name:属性名字。例如c:out value=""/里的value。名字可任意取,只要类里提供相应的set方法即可。
required:是否必填属性。
rtexprvalue:是否支持运行时表达式取值就是是否可以<%=%>或则是${}方式传值。
这是tag的强大功能。
编写jsp页面
<%@ page language="java"%>
<%@ taglib uri="/WEB-INF/tlds/test.tld" prefix="test"%>
<html>
<body>
Test Tag: <test:out name="TEST"/>
</body>
</html>
启动服务器,如果一切按照上面步骤的话,就能看到 Test Tag: Hello! TEST 字样。最简单的tag就这么出来了。并不难,是不是?
------------------------------------------------------------------
Tag系列的Interface里定义的静态int,通过他们也能一窥tag组键的执行流程,这几个静态值分别是:
SKIP_BODY : 跳过了开始和结束标签之间的代码,一般是在doStartTag中使用
EVAL_BODY_INCLUDE :处理嵌套的标签,一般是在doStartTag中使用,由负责处理标签正文的tag接口提供
EVAL_BODY_BUFFERED :对包含的内容进行解析一般是在doStartTag中使用,由负责处理标签正文的bodyTag接口提供,目的是通知jsp容器作好读取正文的工作(创建一个body- content包装正文和获取存放操作结果的out对象,便于以后的操作和输出).
EVAL_BODY_AGAIN:处理标签正文,嵌套标签的iteratorTag接口的使用
SKIP_PAGE : 忽略剩下的页面,一般是在doEndTag中使用
EVAL_PAGE : 继续执行下面的页, 一般是在doEndTag中使用。