JSP自定义标签---三分钟,两种方法

先贴出项目结构,然后分步进行讲解

方法一

1:创建标签类

package com.www.servlet;

import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

/**
 * Created by coisini on 2018/10/11.
 * 1:继承标签处理类SimpleTagSupport
 * 2:重写其doTag()方法
 */
public class HelloTag extends SimpleTagSupport{
    @Override
    public void doTag() throws JspException, IOException {
        JspWriter out = getJspContext().getOut();
        out.println("Hello Custom Tag!");
    }
}

2:写标签配置文件  -myTag.tld

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Example TLD</short-name>
  <tag>
    <name>Hello</name>
    <tag-class>com.www.servlet.HelloTag</tag-class>
    <body-content>empty</body-content>
  </tag>

</taglib>

3:引用标签--jsp页面通过 taglib指令指定标签配置文件路径,引入自定义标签即可

<!--
路径问题
  1):绝对路径
    这里要注意,uri指定标签配置文件路径时路劲一定要写对
   有的小伙伴直接从教程copy的代码,上边uri="WEB-INF/myTag.tld",报红,找不到文件,为什么会这样呢
   在这里他是想写绝对路径,那么写绝对路径,没有根目录,怎么找得到从WEB-INF,所以要先指定根目录,/ 就代表了当前web项目,所以写成uri="/WEB-INF/myTag.tld"
   你也可以在WEB-INFO下再建一个文件夹,将标签配置文件放进去,都可以的,只要路径正确即可

 2):用相对路径
   根据我当前的项目结构,标签配置文件路径我也可以这样写  uri="../WEB-INF/myTag.tld"
-->
<%@ taglib prefix="ex" uri="/WEB-INF/myTag.tld"%>
<html>
<head>
  <title>A sample custom tag</title>
</head>
<body>
<ex:Hello/>
</body>

4:展示结果--over

5:如何引入多个自定义标签

  引入多个自定义标签

    一句话,多写一个标签类,配置文件多写一个<tag>标签,jsp页面多引入一个自定义标签,

    代码很简单,但是还是贴出来吧,万一有人看不懂,还得自己倒腾半天

           ==myTag.tld==
<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>2.0</jsp-version>
  <short-name>Example TLD</short-name>
  <tag>
    <name>Hello</name>
    <tag-class>com.www.tag.HelloTag</tag-class>
    <body-content>empty</body-content>
  </tag>
  <tag>
    <name>World</name>
    <tag-class>com.www.tag.WorldTag</tag-class>
    <body-content>empty</body-content>
  </tag>
</taglib>

    ==index.jsp==
<%@ taglib prefix="ex" uri="../WEB-INF/myTag.tld"%>
<html>
<head>
  <title>A sample custom tag</title>
</head>
<body>
  <ex:Hello/>
  <ex:World/>
</body>
</html>

    

方法二

1:创建标签类

2:写标签配置文件

3:在web.xml中配置标签配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <jsp-config>
        <taglib>
            <!--
            这里相当于映射
            taglib-location,
                指定标签配置文件的路径
            taglib-uri,
                不就是别名嘛,你可以叫aa,bb或者 http://www/coisini,随便取,都是可以映射到的
                但是,,转折来的, URI也是有规范的
            URI规范:
                第一部分是协议
                第二部分是存有该资源的主机IP地址(有时也包括端口号)
                第三部分是主机资源的具体地址,如目录和文件名等
                第一部分和第二部分之间用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。
                eg:http://coisini/myTag

             我这里呢没写规范,只是为了证明,别名可以自己取,只要能映射到就行,但是 大家还是要命名规范点
            -->
            <taglib-uri>coisini</taglib-uri>
            <taglib-location>/WEB-INF/myTag.tld</taglib-location>
        </taglib>
    </jsp-config>

</web-app>

4:jsp页面引入标签

<!--如果是使用,web.xml配置的方式引用自定义标签,这里,uri就直接写<taglib-uri>coisini</taglib-uri>的值就可以-->
<%@ taglib prefix="ex" uri="coisini"%>
<html>
<head>
  <title>A sample custom tag</title>
</head>
<body>
  <ex:Hello/>
  <ex:World/>
</body>
</html>

              总结-两种方法差别在哪

就是自定义标签配置文件的引用区别呗

方法一:直接在jsp页面引入自定义标签配置文件(一定要注意路径问题

方法二:自定义标签配置文件的路径配置在web.xml中,反射的原理,在jsp页面引用自定义标签时,uri取web.xml中<tablib-uri>的值即可(uri要规范取名

     
原文地址:https://www.cnblogs.com/coisini/p/9772408.html