- 浏览: 291866 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
wahahachuang5:
web实时推送技术使用越来越广泛,但是自己开发又太麻烦了,我觉 ...
java以post发送方式实现百度Sitemap实时推送代码分享 -
fmpoffice:
发来感谢!准备尝试!https://m.yooshifu.co ...
java以post发送方式实现百度Sitemap实时推送代码分享 -
playboyhaolei:
爱死博主了 学习了 已经成功的推送了 ...
java以post发送方式实现百度Sitemap实时推送代码分享 -
playboyhaolei:
爱死博主了 学习了 已经成功的推送了 ...
java以post发送方式实现百度Sitemap实时推送代码分享 -
真三武侯:
爱死博主了
java以post发送方式实现百度Sitemap实时推送代码分享
答:表现形式一:
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
BodyTagSupport类的方法:
编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag(); 他们执行顺序如下: doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag() doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY, 如果返回EVAL_BODY_INCLUDE则继续执行; 如果返回SKIP_BODY则接下来的doInitBody(),setBodyContent(), doAfterBody()三个方法不会被执行, 而直接执行doEndTag()方法。 setBodyContent()方法用于设置标签体内容,如果在此之前要作一些初始化工作,则在doInitBody()方法中完成。 标签体内容执行完后,会调用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY, EVAL_PAGE或SKIP_PAGE。 如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY; 如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面中接下来的部分; 如果返回SKIP_PAGE,则JSP页面的后续内容将不再执行。 标签中静态常量: EVAL_BODY_INCLUDE:告诉服务器正文的内容,并把这些内容送入输出流 SKIP_BODY:告诉服务器不要处理正文内容 EVAL_PAGE:让服务器继续执行页面 SKIP_PAGE:让服务器不要处理剩余的页面 EVAL_BODY_AGAIN:让服务器继续处理正文内容,只有doAfterBody方法可以返回 EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回 EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回。 |
1 TagSupport与BodyTagSupport的区别
TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否则如果不需要交互就用BodyTagSupport。
交互就是标签处理类是否要读取标签体的内容和改变标签体返回的内容。
用TagSupport实现的标签,都可以用BodyTagSupport来实现,因为BodyTagSupport继承了TagSupport。
2 doStartTag(),doEndTag()
doStartTag()方法是遇到标签开始时会呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE与SKIP_BODY,前者表示将显示标签间的文字,后者表示不显示标签间的文字;doEndTag()方法是在遇到标签结束时呼叫的方法,其合法的返回值是EVAL_PAGE 与 SKIP_PAGE,前者表示处理完标签后继续执行以下的JSP网页,后者是表示不处理接下来的JSP网页
doAfterBody(),这个方法是在显示完标签间文字之后呼叫的,其返回值有EVAL_BODY_AGAIN与SKIP_BODY,前者会再显示一次标签间的文字,后者则继续执行标签处理的下一步。
预定的处理顺序是:doStartTag()返回SKIP_BODY,doAfterBodyTag()返回SKIP_BODY,doEndTag()返回EVAL_PAGE.
如果继承了TagSupport之后,如果没有改写任何的方法,标签处理的执行顺序是:
doStartTag() ->不显示文字 ->doEndTag()->执行接下来的网页
如果您改写了doStartTag(),则必须指定返回值,如果指定了EVAL_BODY_INCLUDE,则执行顺序是
doStartTag()->显示文字->doAfterBodyTag()->doEndTag()->执行下面的网页
display.tld 源码
- <!---->xml version = "1.0" encoding = "gbk" ?>
- <!---->
- PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
- "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd" >
- < taglib >
- < tlibversion > 1.0 tlibversion >
- < jspversion > 2.4 jspversion >
- < shortname > 测试程序 shortname >
- < uri > uri >
- < info > 测试程序 info >
- < tag >
- < name > display name >
- < tagclass > test.DisplayTag tagclass >
- <!---->
- tag >
- taglib >
DisplayTag.java 源码
- package test;
- import java.io.IOException;
- import javax.servlet.jsp.JspException;
- import javax.servlet.jsp.JspWriter;
- import javax.servlet.jsp.tagext.TagSupport;
- public class DisplayTag extends TagSupport {
- public int doStartTag() throws JspException {
- System.out.println( "********* doStartTag()........\n" );
- return this .EVAL_BODY_INCLUDE;
- }
- public int doAfterBody() throws JspException {
- System.out.println( "********* doAfterBody()........\n" );
- return this .SKIP_BODY;
- }
- public int doEndTag() throws JspException {
- System.out.println( "********* doEndTag()........\n" );
- JspWriter out = this .pageContext.getOut();
- try {
- out.println( "Hello !!!!" );
- } catch (IOException e) {
- e.printStackTrace();
- }
- return super .doEndTag();
- }
- }
- < %@ page language = "java" import = "java.util.*" pageEncoding = "GB18030" % >
- < %@ taglib uri = "/WEB-INF/classes/test/display.tld" prefix = "test" % >
- <!---->>
- < html >
- < head >
- < title > My JSP 'index.jsp' starting page title >
- head >
- < body >
- < test:display >
- 冬国 < br >
- test:display >
- body >
- html >
效果图
注意:这里的汉字 显示在 hello 前面证明啦 它是先执行index.jsp 中标签中的内容后才执行 doEndTag()这个方法的
一、传统标签的开发
1、 在开发传统标签之前,需要了解两个支持类的生命周期。
1、TagSupport
2、TagSupport
2、TagSupport类的生命周期:
如果所示
3、TagSupport类的生命周期方法
方法名 | 描述 | 返回值说明 |
doStarTag() | 容器在遇开始标签的时会调用这个方法 | SKIP_BODY:忽视标签主体的内容,这是默认值。EVAL_BODY_INCLUDE:要求JSP容器要执行标签主体内容并将结果包括在响应中。 |
doAfterBody() | 如果标签有主体内容,容器执行标签主体后,会调用这个方法。 |
SKIP_BODY:要求JSP容器忽略主体,进入标签处理程序的下一步工作,是默认值。 EVAL_BODY_AGAIN:要求JSP容器再次显示标签主体内容。 |
doEndTag() | 容器在遇到结束标签时会调用这个方法。 |
EVAL_PAGE,运行自定义标签以后的JSP网页内容,这是默认值。 SKIP_PAGE:忽略自定义标签以后的JSP网页内容。 |
release() | 容器通过这个方法来释放本标签处理对象所占用的系统资源。 | 没有返回值 |
4、BodyTagSupport类的生命周期
接下来我们用图来表示:
5、BodyTagSupportl类的生命周期方法。
方法名 | 方法描述 | 返回值说明 |
doStartTag() | 容器在遇到开始标签时会调用这个方法 |
SKIP_BODY:要求JSP容器忽略主体. EVAL_BODY_BUFFERED:JSP容器会将标签主体的处理结果建立成一个BodyContent对象。这是默认返回值。 |
setBodyContent() | 提供BodyContent实例的一个引用,该实例为此标签处理类将主计算结果加以缓存 | 无返回值 |
doInitBody() | 在第一次处理标签主体内容时,他讲对主体进行初始化的工作。 | 无返回值 |
doAfterBody() | 如果标签有主体内容,容器在执行完标签主体后,会调用这个方法。 |
SKIP_BODY:要求JSP容器忽略主体,进入下一步的处理工作。 EVAL_BODY_AGAIN:要求JSP容器再次处理标签主体。 |
doEndTag() | 容器在遇到结束标签是会调用这个方法。 |
SKIP_PAGE:忽略自定义标签以后的JSP网页内容。 EVAL_PAGE:运行自定义标签以后的JSP网页内容。 |
release() | 容器通过这个方法来释放本标签处理对象所占用的系统资源 | 无返回值 |
发表评论
-
202060914
2020-06-09 14:44 0INSERT INTO `QMPARAMDETAIL` (` ... -
20200609
2020-06-09 14:42 0INSERT INTO `QMPARAMDETAIL` (` ... -
shengxiao
2020-06-03 21:37 0生肖 原则 部首 举例 吉凶 ... -
wuge
2020-04-28 14:55 0INSERT INTO `QMPARAM` (`TYPE`, ... -
wugesancai
2020-04-28 14:53 0INSERT INTO `QMPARAM` (`TYPE`, ... -
js监控页面加载完成后执行action
2012-12-08 20:34 3164//Some scripts require that you ... -
JS 判断 null 转
2012-09-25 18:45 1325... -
js子窗口创建及父子窗口之间通信 转
2012-09-20 18:51 1676Javascript弹出子窗口 可以通过多种方式实现 ... -
js子窗口和父窗口交互 转
2012-09-20 18:44 20671。父窗口传递信息给子窗口 看代码实例: ... -
[转载]jquery获取父窗口的元素
2012-09-20 18:36 1885window.parent.document.getEleme ... -
父窗口和子窗口之间的交互 转
2012-09-20 18:26 2109转自:http://hi.baidu.com/gfan ... -
JSP传参数给Birt的两种方法 转
2012-09-06 20:01 9950JSP传参数给Birt ... -
Birt学习笔记——birt开发过程中常见的问题 (转)
2012-09-04 15:36 87292011-11-02 00:06:42| 分类: ... -
正则表达式语法
2012-08-28 16:28 1077一个正则表达式就是由普通字符(例如字符 a 到 z)以及 ... -
jquery 操作 radio checkbox select 等表单 总结 (单选、复选、下拉框)
2012-07-14 18:47 2126转载:http://tiame.iteye.com/blog/ ... -
CSS3.0 的介绍 CSS3的介绍
2011-10-27 11:31 1543CSS3中新技术:圆角、个 ... -
HTML5 详细介绍 及应用实例
2011-10-27 10:58 2073HTML5 概况 什么是 HTML5 H ... -
JavaScript Call 方法和 JavaScript Apply方法 总结
2011-10-26 11:23 1805Javascript的每个Function对象中 ... -
javascript 的保留字 Javascript未来保留字(Javascript Future Reserved Words)
2011-10-26 10:05 1256以下的保留字不可 ... -
JavaScript闭包的详细解释 深入理解javascript闭包
2011-10-26 08:04 1989javascript闭包(Closure)初探 clos ...
相关推荐
`BodyTagSupport`的`setBodyContent()`方法用于获取标签体内容,而在`doStartTag()`和`doEndTag()`中可以处理这些内容,比如进行格式化、过滤或者与其他业务逻辑结合。 在实际开发中,你可能会根据需求添加更多的...
与`TagSupport`不同,`SimpleTagSupport`不涉及开始和结束标签的概念,而是通过一个单一的方法`doTag()`来处理整个标签的逻辑。这种方法使得编写标签更加直观,特别是对于那些不需要在开始和结束标签之间进行多次...
这个类可以继承TagSupport或者BodyTagSupport,两者的差别是前者适用于没有主体的标签,而后者适用于有主体的标签。如果选择继承TagSupport,可以实现doStartTag和doEndTag两个方法实现Tag的功能,如果选择继承...
* 自定义标签要继承 TagSupport 或者 BodyTagSupport 类。 * TagSupport 类适用于没有主体的标签,而 BodyTagSupport 类适用于有主体的标签。 * 如果选择继承 TagSupport,可以实现 doStartTag 和 doEndTag 两个方法...
这个类可以继承TagSupport或者BodyTagSupport,两者的差别是前者适用于没有主体的标签,而后者适用于有主体的标签。如果选择继承TagSupport,可以实现doStartTag和doEndTag两个方法实现Tag的功能,如果选择继承...
JSP 1.2提供了TagSupport、BodyTagSupport,而JSP 2.0引入了SimpleTagSupport。BodyTagSupport同时实现了BodyTag、Tag和IterationTag接口。每个接口都有一系列的方法,例如: - `doStartTag()`:处理标签开始。 - `...
3. **接口关系说明**:从上图可以看出 JspTag 是所有标签接口的基础,Tag 和 SimpleTag 分别提供了不同的功能,而 TagSupport 和 BodyTagSupport 提供了具体的实现支持。 #### 十一、Tag 实现的关键方法 1. **方法...
【知识点详解】 ...实现一个Tag涉及创建一个继承自TagSupport或BodyTagSupport的Java类,定义属性的setter方法,以及处理doStartTag、doEndTag等生命周期方法。TLD文件用于描述标签的属性、行为和关联的Java类。
一个自定义标签其实是一个Java类,这个类需要继承自`TagSupport`或`BodyTagSupport`。这两个类由JSP容器提供,它们包含处理JSP页面与自定义标签之间交互所需的方法。选择继承哪个基类取决于标签是否需要处理内部内容...
首先,你需要编写Tag Handler,这个类需要实现Tag、IterationTag或BodyTag接口,通常会继承TagSupport或BodyTagSupport。然后,创建一个Tag Library Descriptor (TLD)文件,用于描述标签的行为、名称、类路径以及...
TagSupport类为标签提供了基础的生命周期方法,如doStartTag和doEndTag,而BodyTagSupport类则扩展了TagSupport,增加了对标签体内内容的处理能力。通过覆盖这些方法,开发者可以实现自定义标签的具体功能。 其次,...
- 创建标签处理程序类,继承TagSupport或BodyTagSupport。 - 实现必要的接口方法,如doStartTag、doEndTag等。 - 编写TLD文件,定义标签的元数据,包括标签名、处理程序类、属性等。 - 在web.xml中声明标签库,...
Tag是一个Java类,它继承自`TagSupport`或`BodyTagSupport`。这两个基类是JSP容器提供的,它们提供了与JSP页面交互的方法,如数据的输入和输出。开发者只需专注于实现业务逻辑,而无需关心与页面交互的细节。`...
首先,自定义标签的实现基于Java的`TagSupport`或`BodyTagSupport`类。`TagSupport`适用于无内容体的简单标签,而`BodyTagSupport`则适用于包含内容体的标签,即标签内部可以包含HTML或其他JSP元素。在这个场景下,...
- **实现方式**:创建一个继承自TagSupport或BodyTagSupport的Java类,实现特定业务逻辑,然后在.tld文件中定义标签的属性和行为,最后将.tld文件部署到应用中。 总结,JSP是一种服务器端技术,用于构建动态Web...
- `TagSupport`和`BodyTagSupport`允许开发者轻松扩展新的功能,同时保持良好的性能。 2. **标签库声明和使用** - 在JSP页面中通过`<%@ taglib uri="/WEB-INF/bold.tld" prefix="b" %>`声明标签库,使得标签库...
- **标签实现类**:这是自定义标签的核心,实现了javax.servlet.jsp.tagext.Tag接口或者其子接口,如TagSupport、BodyTagSupport等。这些类提供了处理标签生命周期的方法,如doStartTag()和doEndTag()。 - **TLD...
标签处理器通过`Tag`或`BodyTag`接口来实现,例如`TagSupport`和`BodyTagSupport`为这些接口提供了默认的实现。标签处理器可以访问页面上下文(`pageContext`),处理标签属性和标签体内的内容。 3. **TLD文件(Tag...
在这个问题中,代码使用了 BodyTagSupport 来生成动态内容,并输出了 2 次 "good"。 5. 如果我们的提交方式是 POST,在 HttpServlet 里没有 doPost 方法对应的话,将出现 405 错误。 答案:D 知识点:在 ...