Servlet之自定义标签(一)

自定义标签  (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


[java]  view plain copy
  1. package com.tag;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.jsp.JspException;  
  6. import javax.servlet.jsp.tagext.TagSupport;  
  7.   
  8. //定义一个标签处理类  
  9. public class MyTag extends TagSupport{  
  10.       
  11.     @Override  
  12.     //当遇到开始标签 该方法会得到调用  
  13.     public int doStartTag() throws JspException {  
  14.           
  15.         try {  
  16.             //往页面中输出 hello  
  17.             this.pageContext.getOut().println("hello") ;  
  18.               
  19.         } catch (IOException e) {  
  20.               
  21.             e.printStackTrace();  
  22.         }  
  23.         //EVAL_BODY_INCLUDE 正常执行 开始标签 与结束标签之间的内容  
  24.         return EVAL_BODY_INCLUDE;  
  25.     }  
  26.       
  27.     @Override  
  28.     //当遇到结束标签 该方法会得到调用  
  29.     public int doEndTag() throws JspException {  
  30.           
  31.         try {  
  32.               
  33.             this.pageContext.getOut().println("world");  
  34.               
  35.         } catch (IOException e) {  
  36.               
  37.             e.printStackTrace();  
  38.         }  
  39.           
  40.         //EVAL_PAGE 正常执行 结束标签之后的内容  
  41.         return EVAL_PAGE;  
  42.     }  
  43.   
  44. }  

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

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

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

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

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

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


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

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
  3.   
  4. <taglib>  
  5.    <tlib-version>1.0</tlib-version>  
  6.    <jsp-version>1.1</jsp-version>  
  7.    <short-name>myTag</short-name>  
  8.    <uri>/myTag</uri> <!-- 这个是 uri 而不是 url -->  
  9.      
  10.    <tag>  
  11.        <name>firstTag</name>  
  12.        <tag-class>com.tag.MyTag</tag-class>  
  13.        <body-content>empty</body-content>  
  14.      
  15.    </tag>  
  16.   
  17.   
  18. </taglib>  


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

tag.jsp

[html]  view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <!-- 引入标签库  , prefix 是前缀 -->  
  3. <%@ taglib uri="/myTag"  prefix="hello" %>  
  4.   
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  6. <html>  
  7.   <head>  
  8.   
  9.   </head>  
  10.     
  11.   <body>  
  12.       
  13.     <hello:firstTag/>abcd  
  14.       
  15.   </body>  
  16. </html>  


JSP容器在调用doStartTag或doEndTag
   方法前,会先调用setPageContext 和 
   setParent 方法,设置pageContext 和 
   parent。


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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值