自定义标签

创建客户化JSP标签的步骤:
1创建标签的处理类
2创建标签库描述文件
3在JSP文件中引入标签库,然后插入标签,例如:<mm:hello/>


Servlet容器编译JSP网页时,如果遇到自定义标签,就会调用这个标签的处理类;
标签处理类必须扩展以下两个类之一
--javax.servlet.jsp.tagext.TagSupport
--javax.servlet.jsp.tagext.BodyTagSupport

TagSupport的两个重要方法:doStartTag和doEndTag
doStartTag返回skipbody int类型常量
doEndTag返回EVAL_PAGE int类型常量

BodyTagSupport的父类是TagSupport

TagSupport类的主要方法:
setValue(String k,Object o) 在标签处理类中设置key/value
getValue(String k) 在标签处理类中根据参数key返回匹配的value
removeValue(String k) 在标签处理类中删除key/value
setPageContext(PageCOntext pc) 设置PageContext对象,该方法由Servlet
容器在调用doStartTag或doEndTag方法前调用
setParent(Tag t) 设置嵌套了当前标签的上层标签的处理类,该方法由Servlet容器在
调用doStartTag或doEndTag方法前调用
getParent() 返回嵌套了当前标签的上层标签的处理类

TagSupport类的两个重要属性
parent:代表嵌套了当前标签的上层标签的处理类
pageContext :代表Web应用中的javax.servlet.jsp.PageContext对象


JSP容器在调用doStartTag或doEndTag方法前,会先调用setPageContext和setParent方法,设置pageContext和parent.
在doStartTag或doEndTag方法中可以通过getParent方法获取上层标签的处理类;在TagSupport类中定义了protected类型的pageContext成员变量,因此在标签处理类中可以直接访问pageContext变量


PageContext类
pageContext类提供了保存和Web应用的共享数据的方法:
public void setAttribute(String name ,Object value, int scope)
public Object getAttribute(String name, int scope)

其中,scope参数用来指定属性存在的范围,它的可选值包括PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE PageContext.SESSION_SCOPE PageContext.APPLICATIO_SCOPE 例如:pageContext.setAttribute("username","zhagnsan",PageContext.SESSION_SCOPE);


doStartTag()方法
当Servlet容器遇到自定义标签的起始标志,就会调用doStartTag()方法。
doStartTag()方法返回一个整数值,用来决定程序的后续流程,它有两个可选值:
---Tag.SKIP_BODY
表示标签之间的内容被忽略
---Tag.EVAL_BODY_INCLUDE
表示标签之间的内容被正常执行
例如以下代码:
<prefix:Mytag>
hello
......
</prefix:Mytag>假若<Mytag>的doStartTag()方法返回Tag.SKIP_BODY,"hello"字符串不会显示在网页上,若返回Tag.EVAL_BODY_INCLUDE,"hello"字符串将显示在网页上


doEndTag()方法
当Servlet容器遇到自定义标签的结束标签,就会调用doStartTag()方法。
doEndtTag()方法返回一个整数值,用来决定程序的后续流程,它有两个可选值:
---Tag.SKIP_PAGE 表示立刻停止执行JSP网页,网页上未处理的静态内容和JSP程序均被忽略,任何已有的输出内容立刻返回到客户的浏览器上。
---Tag.EVAL_PAGE 表示按正常的流程继续执行JSP网页
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值