空标签

需要集成TagSupport类,并覆写doStartTage方法

package com.ming.TagDome;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class HelloTag extends TagSupport {
    @Override
    public int doStartTag() throws JspException {
        // 获得输出流对象
        JspWriter out = super.pageContext.getOut();
        try{
            out.println("<h2>hello world</h2>");
        }catch (Exception e){
            e.printStackTrace();
        }
        // 没有便签体
        return TagSupport.SKIP_BODY;
    }
}

然后需要再次定义标签描述文件,即web-inf文件下的helloTage.tld文件

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="jar:///snap/intellij-idea-ultimate/122/plugins/jsp/lib/jsp-impl.jar!/standardSchemas/jspdirectives.xsd"
    version="2.1"
>
    <tlib-version>1.0</tlib-version>
    <short-name>firsttag</short-name>
    <tag>
        <name>hello</name>
        <tag-class>
            com.ming.TagDome.HelloTag
        </tag-class>
        <body-content>empty</body-content>
    </tag>
</taglib>

最后,在页面引入相关内容

<%--
  Created by IntelliJ IDEA.
  User: ming
  Date: 19-3-20
  Time: 下午10:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="myTag" uri="/WEB-INF/hellotag.tld"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <myTag:hello/>
</body>
</html>

进行文件映射

在web.xml文件中对所有的tld文件进行映射.

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
        <taglib>
            <taglib-uri>hello_tag</taglib-uri>
            <taglib-location>/WEB-INF/hellotag.tld</taglib-location>
        </taglib>
    <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/ming</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
</web-app>

运行原理 访问的时候,如果遇到标签,则会根据uri去寻找对应的配置文件,根据配置文件,读取相应的标签类class,然后,进行输出

定义有属性的标签

一个栗子,格式化日期标签类

package com.ming.TagDome;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTag  extends TagSupport {
    // 接收魔板
    private String format;
    @Override
    public int doStartTag() throws JspException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(this.format);
        try{
            // 输出格式化后的日期
            super.pageContext.getOut().write(simpleDateFormat.format(new Date()));
        }catch (IOException e){
            e.printStackTrace();
        }
        return TagSupport.SKIP_BODY;
    }

    public String getFormat(){
        return format;
    }

    public void setFormat(String _format){
        this.format = _format;
    }
}


<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="jar:///snap/intellij-idea-ultimate/122/plugins/jsp/lib/jsp-impl.jar!/standardSchemas/jspdirectives.xsd"
        version = "2.1">
    <tlib-version>1.0</tlib-version>
    <short-name>datetag</short-name>
    <tag>
        <name>date</name>
        <tag-class>
            com.ming.TagDome.DateTag
        </tag-class>
        <body-content>empty</body-content>
        <attribute>
            <!-- 数据初始化 -->
            <name>format</name>
            <required>true</required>
            <rtxprvalue>true</rtxprvalue>
        </attribute>
    </tag>
</taglib>

<%--
  Created by IntelliJ IDEA.
  User: ming
  Date: 19-3-20
  Time: 下午10:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="myTag" uri="ming_date"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<myTag:date format="yyy-MM-dd HH:mm:ss:SSS"/>
</body>
</html>

在设置标签属性的时候,属性为format的时候,会自动调用set方法进行赋值

剩下的大概也没啥了.就是继承一些接口,一些类即可,感觉和微信小程序的模板类似.