博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义标签 (Taglib) 续一
阅读量:7229 次
发布时间:2019-06-29

本文共 2273 字,大约阅读时间需要 7 分钟。

自定义标签  (Taglib)

     可重用的标签可处理复杂的逻辑运算和事务,或定义jsp网页的输出内容和格式

自定义标签所涉及到的接口与类的层次结构

创建客户化jsp标签的步骤

1)创建标签的处理类

       创建的标签处理类要继承javax.servlet.jsp.tagext.TagSupport 类

       或 javax.servlet.jsp.tagext.BodyTagSupport 类,

       并重写 两个重要的方法 doStartTag(),doEndTag()

2)创建标签库描述文件(格式 .tld <Tag Library Description> 其实就是一个xml文档),

       这个文件要放在WEB-INF目录下

3)在jsp文件中引入标签库,然后插入标签,例如 <hello:firstTag/>

       Servlet容器编译jsp文件时,如果遇到自定义标签就会调用这个标签的处理类

实例一

1.创建标签的处理类 MyTag.java

package com.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; //定义一个标签处理类 public class MyTag extends TagSupport{ @Override //当遇到开始标签 该方法会得到调用 public int doStartTag() throws JspException { try { //往页面中输出 hello this.pageContext.getOut().println("hello") ; } catch (IOException e) { e.printStackTrace(); } //EVAL_BODY_INCLUDE 正常执行 开始标签 与结束标签之间的内容 return EVAL_BODY_INCLUDE; } @Override //当遇到结束标签 该方法会得到调用 public int doEndTag() throws JspException { try { this.pageContext.getOut().println("world"); } catch (IOException e) { e.printStackTrace(); } //EVAL_PAGE 正常执行 结束标签之后的内容 return EVAL_PAGE; } }

注意: 1)doStartTag() 返回一个整数值,用来控制执行程序的后续流程,有两个可选值:

          EVAL_BODY_INCLUDE :正常执行 开始标签 与结束标签之间的内容

          SKIP_BODY :跳过 开始标签 与结束标签之间的内容

       2)doEndTag()返回一个整数值,用来控制执行程序的后续流程,有两个可选值:

         EVAL_PAGE : 正常执行 结束标签之后的内容

         SKIP_PAGE :跳过 结束标签之后的内容

2.创建标签库描述文件myTag.tld ,,供服务器去读取

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.1</jsp-version> <short-name>myTag</short-name> <uri>/myTag</uri> <!-- 这个是 uri 而不是 url --> <tag> <name>firstTag</name> <tag-class>com.tag.MyTag</tag-class> <body-content>empty</body-content> </tag> </taglib>

3。在jsp文件中引入标签库,然后插入标签

tag.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!-- 引入标签库 , prefix 是前缀 --> <%@ taglib uri="/myTag" prefix="hello" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <hello:firstTag/>abcd </body> </html>

JSP容器在调用doStartTag或doEndTag

   方法前,会先调用setPageContext 和
   setParent 方法,设置pageContext 和
   parent。

在doStartTag或doEndTag方法中可以通
   过getParent方法获取上层标签的处理类;
   在TagSupport类中定义了protected类型
    的pageContext成员变量,因此在标签处
   理类中可以直接访问pageContext变量。

      

转载地址:http://hodfm.baihongyu.com/

你可能感兴趣的文章
在electron中实现跨域请求,无需更改服务器端设置
查看>>
gitlab-ci配置详解(一)
查看>>
听说你叫Java(二)–Servlet请求
查看>>
案例分享〡三拾众筹持续交付开发流程支撑创新业务
查看>>
FreeWheel业务系统微服务化过程经验分享
查看>>
移动互联网下半场,iOS开发者如何“高薪”成长?
查看>>
Atlassian是怎样进行持续交付的?且听 Steve Smith一一道来
查看>>
Web Storage相关
查看>>
[PHP内核探索]PHP中的哈希表
查看>>
Apache-drill Architechture
查看>>
WordPress 5.2 Beta 3 发布,要求 PHP 5.6.20 以上版本
查看>>
通通连起来——无处不在的流
查看>>
互联网+时代,看云计算如何改变传统行业
查看>>
ZFS ARC & L2ARC zfs-$ver/module/zfs/arc.c
查看>>
c++类默认拷贝构造函数---浅复制
查看>>
2019年最火热的Golang项目
查看>>
可实现RSSD云硬盘120万IOPS的SPDK IO路径优化实践
查看>>
Vue项目部署遇到的坑(你肯定会遇到!)
查看>>
资源分享计划第三期 0511
查看>>
awk 文本处理
查看>>