Head First Servlets&Jsp 读书摘记8——【自定义标签】

标签继续,这章实战性还是有那么些的,从读书时就想自己折腾个自定义标签,今天终于重新燃起热情,赶紧把第十章内容采摘下:

86、标记文件:很像include。建立和使用的最简方法:

1)取一个被包括的文件如(Header.jsp),把它重命名为带有一个.tag扩展名。

2)把标记文件(Header.tag)放在WEB-INF目录下一个名为tags目录中。

3)在JSP中放一个taglib指令,并调用这个标记:

<%@ taglib perfix="myTags" tagdir="/WEB-INF/tags"%>

<html><body>...

<myTags:Header/>(去掉.tag扩展名)(P492);

87、对于标记文件,发生的不是请求参数,而是标记属性!

<myTags:Header subTitle="this is the title here">

标记文件中直接用

<%@ attribut name="subTitle"re ....(required="true" rtexprvalue="true")%>

${subTitle}(P494, 496);

88、对有体标记文件,在Header中可用<jsp:doBody />获取体内容(P497);

89、标记文件标记的体中不能使用脚步代码!(498);

90、容器在哪查找标记文件:

1)在WEB-INF/tags及其子目录中查找;

2)在WEB-INF/lib下JAR文件的META-INF/tags目录及其子目录中查找;

3)如果标记文件部署在一个JAR中,这个标记文件必须有一个TLD。

91、简单标记处理器的生命周期:

1)加载类(SimpleTagHandler.class)

2)实例化类(无参构造)

3)调用setJspContext(JspContext jspContext)方法(为处理提供对PageContext的一个引用。PageContext是JspContext的一个子类)。

4)如果标记嵌套的(由另一个标记调用),则调用setParent(JspTag jspTag)方法。(嵌套标记可以与“包围”它的其他外层标记通信)。

5)如果标记有属性,调用属性的设置方法。

6)如果标记的<body-content> 未声明为empty,而且标记有体,则调用setJspBody(JspFragment jspFragment)方法。

7)调用doTag()方法(一定要始终覆盖这个方法)。——终于要做标记该做的事情了。(P506);

92、JspFragment是表示JSP代码的一个对象,它存在的意义就是让别人调用。如果标记调用了一个简单标记处理器,这个标记的体就会被封装在JspFragment对象中,然后在setJspBody()方法中发送给标记处理器。(JspFragment中不能包含任何脚步元素!)(P512);

93、SkipPageException:停止处理页面……只停止直接调用标记的页面,如PageA 包含PageB,PageB报错了,PageA中includePageB下面的内容仍然执行。(P513, 516);

94、SimpleTag处理器不会重用!每个标记处理器实例只负责一次调用。(P517)

95、传统标记的生命周期:

1)~5)和91相同

6)调用doStartTag()方法。

7)如果没有声明标记体的体为空,而且调用标记时体确实不为空,另外doStartTag()方法返回EVAL_BODY_INCLUDE,则计算体。

8)如何计算了体内容,则调用doAfterBody()方法。(可多次调用)

9)调用doEndTag()方法。(只调用一次)。(P525);

96、传统标记生命周期取决于返回值(下图忽略红色框框)(P526);

97、容器可以重用传统标记处理器,可以在doStartTag()中重置这些实例变量;(P531);

98、基于BodyTag的传统标记处理器生命周期:如下图(含红色框框)

(P533);

99、标记调用父标记可用getParent()方法,用父标记从子标记获取信息折腾,麻烦……(P540~542);

还差两个图,明天找了工具再补充,(今天日本点球输了:(亚洲球队全军覆没)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值