自定义JSP标签

自定义JSP标签:简单的(simple)自定义标签和传统的(classic)自定义标签

开发自定义标签需要使用javax.servlet.jsp.tagext包中的接口和类,和javax.servlet.jsp包中定义的两个异常类:JspException和JspTagException

  1. JspTag接口是自定义标签跟接口,起到接口标识和类型安全的作用

  2. SimpleTag接口是JspTag接口的子接口,实现简单的自定义标签

  3. SimpleTagSupport类是SimpleTag接口的实现类

自定义标签的开发步骤

  1. 创建标签处理类:实现某个标签接口或继承某个标签类的实现类,实现SimpleTag接口

  2. 创建标签库描述文件,是XML格式的文件,拓展名一般为.tld一般放在WEB-INF目录或其子目录下;
    TLD文件的根元素是,子元素定义标签的URI;元素定义一个标签,包含标签名,标签处理类的完整名称,标签体类型

  3. 在JSP页面中使用标签

    通过taglib指令声明自定义标签的前缀和标签库的URI:<% @ taglib (标签的前缀)prefix="" uri="" %>

SimpleTag接口定义了五个方法

  1. public void setJspContext(JspContext pc): 该方法由容器调用,用来设置JspContext对象,使其在标签处理类中可用,
    容器为该方法传递了一个JspContext类的实例,称为JSP上下文对象,可将对象保存到一个实例变量中
    javax.servlet.jsp.JasContext类定义了允许标签处理类访问JSP页面作用域中的属性的方法,例如setAttribute(),getAttribute(),removeAttribute(),findAttribute()等,还提供getOut()返回JspWriter对象向JSP输出信息
  2. public void setParent(JspTag parent): 由容器调用,设置父标签对象 标签可以相互嵌套,外层为父标签,内层为子标签。若标签为嵌套的,容器调用setParent()设置标签的父标签对象
    setParent()返回一个JspTag对象,返回的父标签实现SimpleTag,Tag,IteraTag或BodyTag等接口的对象
  3. public void setJspBody(JspFragment jspBody); 若标签带标签体,容器调用该方法将标签体内容放到JspFragment中,设置标签体
  4. public JspTag getParent() 返回当前标签的父标签
  5. public void doTag() throws JspException,IOException 简单标签的核心方法,由容器调用完成简单标签的操作

SimpleTagSupport是SimpleTag接口的实现类,提供了三个方法

  1. protected JspContext getJspContext() 返回标签中要处理的JspContext对象
  2. protected JspFragment getJspBody() 返回JSPFrame对象,存放了标签体的内容
  3. public static final JspTag findAncestorWithClass(JspTag from,Class klass) 根据给定的实例和类型查找最接近的实例

TLD文件

<uri>元素
<uri>元素指定在JSP页面中使用taglib指令是uri属性的值。例如

<uri>http://www.mydomain.com/sample</uri>
	则在JSP页面中taglib指令如下
	<% @ taglib prefix="demo" uri="http://www.mydomain.com/sample" %>

在DD文件中定义URI

在JSP2.0之前必须在DD文件(web.xml)中为URI指定其TLE文件的位置,容器会查找web.xml文件的<taglib>元素,建立URI与TLD之间的映射
	<jsp-config>
		<taglib>
			<taglib-uri>http://www.mydomain.com/sample</taglib-uri>
			<taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
		</taglib>
	</jsp-config>

<body-content>元素
三个值

  1. empty标识标签不带标签体,不可指定标签体,起始标签和结束标签之间的空格和换行都认为是指定了标签体
  2. scriptless表示标签体中不能包含JSP脚本元素(JSP声明<%!>,表达式<%=>,小教本<%>
  3. tagdependent表示容器不会执行标签体,是在请求是传递给标签处理类,由标签处理类根据需要决定处理标签体
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值