当前位置: 代码迷 >> Web前端 >> 黑马软件工程师_标签技术
  详细解决方案

黑马软件工程师_标签技术

热度:417   发布时间:2012-08-08 14:32:45.0
黑马程序员__标签技术

---------------------- android培训java培训、期待与您交流! ----------------------

 

自定义标签:用于移除Jsp页面中的java代码。

完成自定义标签的步骤:

JSP文件:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@taglib uri="http://www.itcast.cn" prefix="itcast"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

 <title>My JSP '1.jsp' starting page</title>

  </head>

  <body>

    您的IP是:<itcast:viewIP/>

  </body>

</html>

1、  编写一个实现Tag接口的Java类,把页面java代码移到这个java类中(标签处理器类)------一般实现TagSupport

publicclass ViewIPTag extends TagSupport{

    @Override

    publicint doStartTag() throws JspException {

       HttpServletRequest request=(HttpServletRequest) this.pageContext.getRequest();

       JspWriter out=this.pageContext.getOut();

      

       String ip=request.getRemoteAddr();

       try {

           out.print(ip);

       } catch (IOException e) {

           thrownew RuntimeException(e);

       }

       returnsuper.doStartTag();

    }  

}

2、  编写标签库描述符(tld)文件,在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>A tag library exercising SimpleTag handlers.</description>

    <tlib-version>1.0</tlib-version>

   

    <short-name>itcast</short-name>

    <uri>http://www.itcast.cn</uri>

    <tag>

        <name>viewIP</name>

       <tag-class>cn.itcast.web.tag.ViewIPTag</tag-class>

       <body-content>empty</body-content>

    </tag>

</taglib>

Tag接口的执行流程:

1、  public void setPageContext(PageContext pc),JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面的pageContext对象传递给标签处理器,标签处理器以后可以通过这个pagContext对象与JSP页面进行通信

2、  public void setParent(Tag t),如果当前标签没有父标签,则传递给setParent 方法的参数值为null

3、  public int doStartTag(),web容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag方法

4、  public int doEndTag(),web容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,web容器就会调用标签处理器的doEndTag方法

5、  public void release(),通常web容器执行完自定义标签后,标签处理器会驻留在内存中,为其他请求服务器,直至停止web应用时,web容器才会调用release方法。

自定义标签功能扩展:

1、  控制JSP页面某一部分内容是否执行;à改变doStartTag( )的返回值(Tag.EVAL_BODY_INCLUDESKIP_BODY

2、  控制整个JSP页面是否执行à改变doEndTag( )的返回值(Tag.SKIP_PAGETag.EVAL_PAGE

3、  控制JSP页面重复执行[IterationTagàdoAfterBody( )à标签体之后,结束标签执行之前执行àEVAL_BODY_AGAINSKIP_BODY]--à继承TagSupport,先覆盖doStartTag( ),设置为EVAL_BODY_INCLUDE,让标签体执行,然后doAfterBody();

4、  修改JSP页面内容输出[继承BodyTagSupport]

1)、先覆盖doStartTag(),返回BodyTag.EVAL_BODY_BUFFEREDà将标签体内容作为对象返回

2)、覆盖doEndTag(),

    publicint doEndTag() throws JspException {

       BodyContent bc=this.getBodyContent();

       String content=bc.getString();

       content=content.toUpperCase();

       try {

           this.pageContext.getOut().write(content);

       } catch (IOException e) {

           thrownew RuntimeException(e);

       }

       return Tag.EVAL_PAGE;

    }  

}

 

SimpleTag(简单标签)

JspFragment jf=this.getJspBody( );

控制整个Jsp不执行:Throw new SkipPageException;

简单标签的执行流程:

1、  遇到简单标签;

2、  实例化标签处理器类;

3、  调用setJspContext( ),把页面pageContext传递给标签处理器类;

4、  调用setParent把父标签传递进去,如果没有父亲,传null

5、  调用setJspBody(),把封装了标签体JspFragment传递给标签处理器类;

6、  执行页面中的自定义标签,执行标签实际上就是调用doTag()。

开发带属性的标签:

1、  在标签处理器中编写每个属性对应的setter方法

2、  在tld文件中描述标签的属性;

 ---------------------- android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima

  相关解决方案