随笔-124  评论-49  文章-56  trackbacks-0

定制标记库
1 编写标记处理类
public class TimerTag extends TagSupport{
 private long start;
 private long end;
 public int doStartTag(){       //doStartTag标记开始方法
  start=System.currentTimeMillis();
  return EVAL_BODY_INCLUDE;//
 }
 public int doEndTag() throws JspTagException {//doEndTag标记结束方法
  end=System.currentTimeMillis();
  long elapsed=end-start;
  try{
   JspWriter out=pageContext.getOut();
   out.println("running time:"+elapsed+"ms.");
  }catch(IOException e){
   throw new JspTagException(e);
  }
  return EVAL_PAGE;//
 }
}
2 编写.tld文件
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 
    version="2.0"> 
 
    <description>custion web utility tags</description> //对当前标记库的描述 
    <tlib-version>1.0</tlib-version>   //当前标记库的版本 
    <short-name>util</short-name>  //对当前标记库使用时的前缀名称 
    <uri>http://163.com</uri> //可任意
    
     <tag> 
         <description>calc code running time</description>  //对当前标记的描述 
         <name>timer</name>  //标记我名称
           <tag-class>com.tags.TimerTag</tag-class> 当前标记对应的处理类的具体名称
           <body-content>JSP</body-content>  //可有empty,JSP 
     </tag> 
 </taglib> 
3 使用格式
jsp页面
<%@ taglib prefix="util" uri="http://163.com" %> 添加指令
<util:timer></util:timer>

总结:
TLD是一个XML文件,在WEB-INF目录下
<taglib>根元素
 <tlib-version>version</tlib-version>标记库的版本
 <short-name>prefix</short-name>前缀名称
 <uri>uri</uri>引用的地址
 ...
 <tag>
  <name>tagname</name>标记名称
  <tag-class>classname</tag-class>标记对应的处理类
  <tei-class>classname</tei-class>标记处理类的辅助处理类
  <body-content>[JSP,empty,scriptless,tagdependent]</body-content>
  //jsp表示标记中可以包含html,java代码,这些代码可以被运行
  //empty表示标记中不包含内容
  //scriptless表示标记中可以包含EL,jsp的动作代码,不可以包括JAVA脚本代码
  //tagdependent表示标记中可以包含
  <attribute>标记的属性
             <name>pattern</name>属性的名称
             <required>false</required>表示该属性是否是必须的
             <rtexprvalue>false</rtexprvalue>该属性是否可以是JSP的表达式
    </attribute>  
 </tag>
</taglib>

TagSupport运行原理(不能对标记所包含的内容进行二次加工)
 
        
BodyTagSupport运行原理(可以对开始和结束标记所包含的内容进行处理)
   
          
 public int doAfterBody()throws JspTagException{
  BodyContent bc=getBodyContent();取内容
  String input=bc.getString();取内容
  JspWriter out=bc.getEnclosingWriter();
  
  String newContent=input;
  try{
   out.println(newContent);
  }catch(IOException e){
   throw new JspTagException(e);
  }
  return 1;
 }

posted on 2009-11-29 22:29 junly 阅读(1483) 评论(0)  编辑  收藏 所属分类: jsp/servlet

只有注册用户登录后才能发表评论。


网站导航: