自定义标签库

自定义标签库入门

  

  代码

  MyTag1.java

public class MyTag1 implements SimpleTag {
    
    private PageContext pageContext;
    private JspFragment body;
    
    /**
     * 所有的setXxx()方法都会在doTag()方法之前被tomcat调用!
     * 所以在doTag()方法中就可以使用tomcat传递过来的对象了。
     */
    @Override
    public void doTag() throws JspException, IOException {
        pageContext.getOut().print("hell cmlx!");
    }

    @Override
    public JspTag getParent() {
        return null;
    }

    @Override
    public void setJspBody(JspFragment body) {
        this.body = body;
    }

    @Override
    public void setJspContext(JspContext context) {
        this.pageContext = (PageContext) context;
    }

    @Override
    public void setParent(JspTag arg0) {

    }
MyTag1.java

  MyTag2.java

public class MyTag2 extends SimpleTagSupport {
    /**
     * SimpleTagSupport它实现了SimpleTag接口
     * 它已经把所有的tomcat传递过来的数据保存起来了!而且还提供了get方法子类调用!
     */
    @Override
    public void doTag() throws JspException, IOException {
        this.getJspContext().getOut().print("Hello CMLX!!!");
    }

}
MyTag2.java

  cmlx.tld

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd" >
<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>jsp-version</jsp-version>
  <short-name>short-name</short-name>
  <tag>
    <name>myTag1</name>
    <tag-class>cn.cmlx.tag.MyTag1</tag-class>
    <body-content>body-content</body-content>
  </tag>
  <tag>
    <name>myTag2</name>
    <tag-class>cn.cmlx.tag.MyTag2</tag-class>
    <body-content>body-content</body-content>
  </tag>
</taglib>
cmlx.tld

  tag.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="cm" uri="/WEB-INF/tlds/cmlx.tld" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1><cm:myTag1/></h1>
    <h2><cm:myTag2></cm:myTag2></h2>
</body>
</html>
tag.jsp

 自定义标签进阶

  

  MyTag3.java

public class MyTag3 extends SimpleTagSupport{
    @Override
    public void doTag() throws JspException, IOException {
        Writer out = this.getJspContext().getOut();//获取当前jsp页面的输出流
        out.write("*************</br>");
        this.getJspBody().invoke(out);//执行标签体的内容,把结果写在指定的流中,即页面上。
        out.write("</br>*************");
    }
}
MyTag3.java

  cmlx.tld

  <tag>
    <name>myTag3</name>
    <tag-class>cn.cmlx.tag.MyTag3</tag-class>
    <body-content>scriptless</body-content>
  </tag>
cmlx.tld

  tag.jsp

<body>
    <h1><cm:myTag1/></h1>
    <h2><cm:myTag2></cm:myTag2></h2>
    <hr>
    <%
        request.setAttribute("cmlx", "cmlx");
    %>
    <cm:myTag3>${cmlx}</cm:myTag3>
    <cm:myTag3>我愛你!</cm:myTag3>
</body>
tag.jsp

不在执行本标签下面内容的标签

  

  MyTag4.java

public class MyTag4 extends SimpleTagSupport{
    @Override
    public void doTag() throws JspException, IOException {
        this.getJspContext().getOut().print("只能看到我其他的看不见!");
        throw new SkipPageException();//抛出这个异常后,本标签后面的内容,将看不到!
    }
}

  cmlx.tld

    <tag>
        <name>myTag4</name>
        <tag-class>cn.cmlx.tag.MyTag4</tag-class>
        <body-content>body-content</body-content>
    </tag>

  tag.jsp

<body>
    <h1><cm:myTag1/></h1>
    <cm:myTag4></cm:myTag4>
    <h1>看得见我吗?</h1>
    <h2><cm:myTag2/></h2>
    <hr>
    <%
        request.setAttribute("cmlx", "cmlx");
    %>
    <cm:myTag3>${cmlx }</cm:myTag3>
    <cm:myTag3>我愛你!</cm:myTag3> 
</body>

  运行结果

标签属性

 

posted @ 2018-08-08 21:20  cmlx  阅读(200)  评论(0)    收藏  举报