Jsp标签01

1. 标签语言特点

<开始标签 属性=“属性值”>标签体</结束标签>

2.自定义标签

下面我们先来开发一个自定义标签,然后再说它的原理吧!

2.1自定义标签的开发步骤

步骤一
编写一个普通的java类,继承BodyTagSupport类~
在这里插入图片描述
步骤二
重写父类的setTest方法,用于得到当前jsp页面的test对象。

在这里插入图片描述
步骤三
重写父类的doStartTag方法,里面写上你定义的标签的java操作,这里我定义的标签用作向浏览器输出一大段信息:
在这里插入图片描述
这样就完成一个标签处理程序了~别着急,写完程序我们还需要注册它。
步骤四
在你的web应用目录下,找到WEB-INF文件夹,在里面新建一个tld类型的文件
然后再里面注册你的标签吧:
在这里插入图片描述
如果你忘记了怎么写,可以参考jstl里的tld文件~
步骤五
你要在使用你定义的标签的jsp页面导入你的标签库!就像导入类包一样
只需在jsp页面写上下面内容:
步骤6
以上5步已经把准备工作都做好了~下面我们来使用标签吧!

在这里插入图片描述
在这里插入图片描述

这样,我们就完成了一次自定义标签了,虽然我们知道步骤,但是不知道为什么这样就行,所以,下面来说一下它的原理:
自定义标签的原理
1)当服务器打开时,就会加载WEB-INF下的资源文件,包括web.xml 和 tld文件,把它们加载到内存
2)我们在浏览器输入http://localhost:8080/T226_Jsp/demo1.jsp来访问jsp页面
3)服务器读取testit.jsp里的内容,当读到
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
这一句的时候,就会在内存中找是否存在uri为http://java.sun.com/jsp/jstl/core的tld文件,找不到就会报错
4)继续读取jsp页面,读到mm:mytag这个标签的时候,就会通过uri去找到tld文件,在tld文件中找到mytab是否被定义,是的话就得到它的tag-class的内容,然后去找到它对应的标签处理程序
5.实例化标签处理程序,利用生成的对象调用它里面的方法
里服务器对标签处理程序里的方法也有一定的调用顺序
1.void setext(text te) --传入text对象
2.void setParent(Tag t) --如果有父标签,传入父标签对象,如果没有,则传入null
3.int doStartTag() --开始执行标签时调用。
4.int doEndTag() --结束标签时调用
5.void release() --释放资源

控制标签体内容 与 结束标签后的内容

自定义标签可以可控制标签体内的文本 和 结束标签后的文本是否输出~
在这里插入图片描述
那么如何重复输出标签体内的文本内容呢?BodyTagSupport还提供了一个doAftetBody方法,我们只需要这样做:
在这里插入图片描述
以上的内容都是控制标签体的内容输出的问题,那么能不能改变标签体力的内容呢?
很可惜,用TagSupport是不行,但是我们可以用它的子类BodyTagSupport,那么久写一个类继承BodyTagSupport类吧~

在这里插入图片描述
以上~就是自定义标签的创建步骤会原理.

3. 标签生命周期

创建一个类继承 BodyTagSupport 必须写这三个方法

doStartTag() 开始标签

doAfterBody() 主体部分

doEndTag() 结束标签
在这里插入图片描述 SKIP_BODY:跳过主体 EVAL_BODY_INCLUDE:计算标签主体内容并[输出] EVAL_BODY_BUFFERED:计算标签主体内容并[缓存] EVAL_PAGE:计算页面的后续部分 SKIP_PAGE:跳过页面的后续部分 EVAL_BODY_AGAIN:再计算主体一次