zoukankan      html  css  js  c++  java
  • 传统标签的使用

    Tag接口的执行流程
    JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法。
    1、public void setPageContext(PageContext pc), JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面的pageContext对象传递给标签处理器,标签处理器以后可以通过这个pageContext对象与JSP页面进行通信。
    2、public void setParent(Tag t),setPageContext方法执行完后,WEB容器接着调用的setParent方法将当前标签的父标签传递给当前标签处理器,如果当前标签没有父标签,则传递给setParent方法的参数值为null。
    3、public int doStartTag(),调用了setPageContext方法和setParent方法之后,WEB容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag方法。
    4、public int doEndTag(),WEB容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,WEB容器会去调用标签处理器的doEndTag方法。
    5、public void release(),通常WEB容器执行完自定义标签后,标签处理器会驻留在内存中,为其它请求服务器,直至停止web应用时,web容器才会调用release方法。

    开发人员在编写Jsp页面时,经常还需要在页面中引入一些逻辑,例如:
    1:控制jsp页面某一部分内容是否执行。
    2:控制整个jsp页面是否执行。
    3:控制jsp页面内容重复执行。
    4:修改jsp页面内容输出。
    自定义标签除了可以移除jsp页面java代码外,它也可以实现以上功能。

    tld文件中的四种标签体类型
    EMPTY JSP scriptless tagdepentend

    1:控制jsp页面某一部分内容是否执行。

    public class TagDemo1 extends TagSupport {
    
    	@Override
    	public int doStartTag() throws JspException {
    		return Tag.EVAL_BODY_INCLUDE; //控制标签内容显示
    //		return Tag.SKIP_BODY;   ////控制标签内容不显示
    	}
    }
    

     

     <tag>
            <name>demo1</name>
            <tag-class>cn.gbx.web.tag.TagDemo1</tag-class>
            <body-content>JSP</body-content>
        </tag>
    

      

    2:控制整个jsp页面是否执行。

    public class TagDemo2 extends TagSupport {
    	@Override
    	public int doEndTag() throws JspException {
    		return Tag.SKIP_PAGE; // 控制余下的jsp是否执行    Tag.EVAL_PAGE 执行
    	}
    
    }
    
    <tag>
            <name>demo2</name>
            <tag-class>cn.gbx.web.tag.TagDemo2</tag-class>
            <body-content>empty</body-content>
        </tag>
    

      

    3:控制jsp页面内容重复执行。

    public class TagDemo3 extends TagSupport{
    
    	private int x = 5;
    	@Override
    	public int doStartTag() throws JspException {
    		return Tag.EVAL_BODY_INCLUDE;
    	}
    	@Override
    	public int doAfterBody() throws JspException {
    		x--;
    		if (x > 0) {
    			return IterationTag.EVAL_BODY_AGAIN;
    		} else {
    			return IterationTag.SKIP_BODY;
    		}
    	}
    }
    
     <tag>
            <name>demo3</name>
            <tag-class>cn.gbx.web.tag.TagDemo3</tag-class>
            <body-content>JSP</body-content>
        </tag>
    

      

    4:修改jsp页面内容输出。

    public class TagDemo4 extends BodyTagSupport {
    
    	@Override
    	public int doStartTag() throws JspException {
    		return BodyTag.EVAL_BODY_BUFFERED;  //标志的setBodyContent的执行, 然后我们就能够获得标签体的内容
    	}
    
    	@Override
    	public int doEndTag() throws JspException {
    		//获得标签体的内容
    		BodyContent bodyContent = this.getBodyContent(); 
    		String content = bodyContent.getString(); 
    		//修改
    		content = content.toUpperCase();
    		try {
    			this.pageContext.getOut().write(content);
    		} catch (IOException e) {
    			throw new RuntimeException(e);
    		}
    		return super.doEndTag();
    	}
    }
      <tag>
            <name>demo4</name>
            <tag-class>cn.gbx.web.tag.TagDemo4</tag-class>
            <body-content>JSP</body-content>
        </tag>
    

      

  • 相关阅读:
    Java之内部类
    java之对象的前世今生
    java之继承
    java之接口
    何为大学 大学何为?
    丁香般的姑娘
    MySQL创建数据库与创建用户以及授权
    CentOS6.8手动安装MySQL5.6
    linux 修改myql 编码配置等信息参考
    Centos6.8 Mysql5.6 安装配置教程
  • 原文地址:https://www.cnblogs.com/E-star/p/3554386.html
Copyright © 2011-2022 走看看