BodyTag和Tag接口的关系、SimpleTag接口的方法(第四天)

BodyTagTag接口的关系

interface javax.servlet.jsp.tagext.BodyTag-->interface javax.servlet.jsp.tagext.Tag

------------------------------------------

+EVAL_BODY_AGAIN:int//继续执行标签体

-----------------------------------------

+doInitBody():void

+setBodyContent(javax.servlet.jsp.tagext.BodyContext):void

+doAfterBody():int

BodyTag的处理过程

1setPageContext(javax.servlet.jsp.PageContext):void

2setParent(javax.servlet.jsp.tagext.Tag):void //设置此标签的父标签,也就是上一层标签

3setParent()

4doStartTag():int

5setBodyContent(javax.servlet.jsp.tagext.BodyContent):void//设置方法体

6doInitBody():void//

7doAfterBody():int

/* 这个方法会被不断的调用直到不再满足条件,通过这个方法来控制返回,从而控制循环是否中断

  SKIP_BODY是跳出标签体的,EVAL_BODY_INCLUDE是继续执行标签体,通过返回这两个值来控制循环是否*/

8doEndTag():int

9release():void

SimpleTag接口的方法

javax.servlet.jsp.tagext.SimpleTag

------------------------------------------

+doTag():void

+getParent():JspTag

+setJspBody(JspFragment jspBody):void

+setJspContext(JspContext pc):void

+setParent(JspTag parent):void

SimpleTage接口的生命周期(JSP2.0的自定义标签接口)

 

1new:      

   每次遇到标签,容器构造一个SimpleTag的实例,这个构造方法没有参数。和红典的标签一样,          SimpleTag不能缓冲,故不能重用,每次都需要构造新的实例。

2setJspContext()setParent(): 只有这个标签在另一个标签之,才调用setParent()方法;

3,设置属性:调用每个属性的setter方法;

4setJspBody();

5doTag(): 所有标签的逻辑、迭代和Body计算,都在这个方法中;

6return

例:

package com.tag;

public class HelloTag implements Tag

{

        private PageContext pageContext;

        private Tag parent;

     public HelloTag(){ 

          super();

     }

    

    /**

      *设置标签的页面的上下文

      */

     public void setPageContext(final PageContext pageContext) {

           this.pageContext=pageContext; 

     }

    /**

      *设置上一级标签

      */

     public void setParent(final Tag parent) {  

          this.parent=parent;  

     }

     /**

      *开始标签时的操作

      */

     public int doStartTag() throws JspTagException{  

          return SKIP_BODY;  //返回SKIP_BODY,表示不计算标签体

     }

     /**

      *结束标签时的操作

      */

     public int doEndTag() throws JspTagException{

            try{  

                 pageContext.getOut().write("Hello World!你好,世界!");

            }                  

          catch(java.io.IOException e){

                throw new JspTagException("IO Error: " + e.getMessage());

          } 

          return EVAL_PAGE;

      }

     /**

      *release用于释放标签程序占用的资源,比如使用了数据库,那么应该关闭这个连接。

      */

     public void release() {}   

     public Tag getParent(){   

        return parent;

     }

}

xxx.tld

<?xml version="1.0" encoding="ISO-8859-1" ?>

<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 web-jsptaglibrary_2_0.xsd"

    version="2.0">

  <tag>

    <description>Extends TagSupport</description>

    <name>hello</name>

    <tag-class>com.tag.HelloWorldTag</tag-class>

    <body-content>jsp</body-content>

  </tag>

</taglib>

web.xml

<web-app>

<taglib-uri>/xxx</taglib-uri>

       <taglib-location>/WEB-INF/tlds/xxx.tld</taglib-location>

</web-app>

xxx.jsp

<%@ taglib uri="/xxx" prefix="mytag" %>

<%@ page contentType="text/html; charset=gb2312" %>

<html><head><title>first cumstomed tag</title></head><body>

<p>以下的内容从Taglib中显示: </p>

<p><i><mytag:hello_int/></i>

<br>

<p><mytag:hello_int></mytag:hello_int>

</body></html>

JSP2.0中的表达式语言(EL表达式)

你可能感兴趣的:(jsp,Web,xml,servlet,sun)