- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
-自定义标签
一、自定义标签入门
1. 为什么引入标签
jsp页面作为显示的模板,应尽量使用页面标签来实现,避免写java代码,移除页面中的%%
如果在jsp页面写java代码,首先会令jsp页面难以阅读,不利于页面排版,其次,作为页面美化人员有可能会看不懂java代码,如果将java代码替换成标签,那么只要是懂html标签的人都能看得懂
2. 如何实现自定义标签
移除jsp页面中的java代码其实很简单,只需要写一个java类实现Tag接口,在java类中实现jsp页面的代码,在tld标签描述文件中针对标签和java类进行映射。
案例: 实现标签显示来访者的ip
实现步骤:
1. 把标签库类的相关类的.class文件存放在WEB-INF目录下;
2. 把TLD标签库秒速文件存放在WEB-INF目录或者自定义的子目录下;
3. 在web.xml文件中声明所引用的标签库;
4. 在JSP文件中声明使用标签库的标签;
3.JSP Tag API
Servlet容器在运行JSP文件时,如果遇到自定义的标签,就会调用这个标签的处理类(Tag Handler Class)的相关方法.标签处理类可以继承JSP Tag API的TagSupport类或者BodyTagSupport类.JSP Tag API位于javax.servlet.jsp.tagext包中,下图是其中的主要接口和类的类框图.
二、传统标签
1.Tag接口
执行流程:
1)创建对象初始化
2)调用setPageContext方法传入表示jsp页面的pageContext
3)如果有父标签调用 setParent 方法传入父标签
4)调用setter方法为属性赋值
5)调用doStartTag方法
6)执行标签体可选
7)调用 doEndTag 方法
8)调用release方法释放资源
2.常用方法
void setPageContext(PageContext pc):由容器调用,传入JSP的上下文环境。
void setParent(Tag t):由容器调用,传入它的父标签(自定义的)。
int doStartTag():遇到开始标签时,由容器调用其中的代码
返回值有两个可选值:
Tag.SKIP_BODY表示标签之间的主体内容被忽略,
Tag.EVAL_BODY_INCLUDE表示标签之间的主体内容被正常执行。
int doEndTag():遇到结束标签时,由容器调用其中的代码
返回值有两个可选值:
Tag.SKIP_PAGE表示立刻停止执行标签后面的JSP代码,网页上未处理的静态内容和Java程序片段均被忽略,任何已有的输出内容立刻返回到客户的浏览器上。
Tag.EVAL_PAGE表示按正常的流程继续执行JSP文件。
void release():由容器调用,释放标签占用的资源。
javax.servlet.jsp.IterationTag接口:增加了重复执行主体内容的方法
int EVAL_BODY_AGAIN:
int doAfterBody():由容器调用,主体内容执行完后调用。如果该方法返回EVAL_BODY_AGAIN,继续调用自己。
doStartTag()方法必须返回EVAL_BODY_INCLUDE
javax.servlet.jsp.BodyTag接口:增加得到主体内容的方法
3.方法的返回值
Tag.SKIP_BODY 【0】 跳过标签体
Tag.EVAL_BODY_INCLUDE 【1】 执行标签体
IterationTag.EVAL_BODY_AGAIN 【2】 重复执行标签主体内容
Tag.SKIP_PAGE 【5】 跳过剩余页面
Tag.EVAL_PAGE 【6】 执行剩余页面
3.Tag接口的子接口以及实现类
3.1 IterationTag 接口
Iteration接口继承自Tag接口,IterationTag接口增加了重复执行标签主体内容的功能.
IterationTag接口定义了一个doAfterBody()方法,Servlet容器在执行完标签主体内容后,就会调用此方法,如果Servlet容器未执行标签主体内容,那么就不会调用此方法,doAfterBody()方法也返回一个整数值,用来决定程序后续的流程,它有两个可选值:Tag.SKIP_BODY和IterationTag.EVAL_BODY_AGAIN.
Tag_SKIP_BODY表示不再执行标签主体内容;
IterationTag.EVAL_BODY_AGAIN表示重复执行标签主体的内容.
Servlet容器在处理JSP文件中的这种标签时,会寻找缓存中的相关IterationTag对象,如
文档评论(0)