[JSP]自定义标签库taglib

简介: 自定义标签的步骤自定义标签的步骤大概有三步:1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag、TagSupport、BodyTagSupport、SimpleTagSupport(JSP2.0)。

自定义标签的步骤

自定义标签的步骤大概有三步:

1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如TagTagSupportBodyTagSupportSimpleTagSupportJSP2.0)。

2.tld文件中配置标签库信息,以及标签与实现类的映射。

3.jsp文件中引用自定义标签。

 

标签API

Tag接口

doEndTag():执行当前标签实例的结束标签。在doStartTag()执行后调用

doStartTag():执行当前标签实例的开始标签。

getParent():获取当前标签的父标签

release():释放当前标签的状态

setPageContext(PageContext):设置当前标签的页面

setParent(Tag):设置当前标签的父标签

 

TagSupport

TagSupport类是实现Tag接口的一个模板类。它实现了Tag接口的大部分方法,用户只需要实现doStartTag()doEndTag()方法。

 

SimpleTag接口(JSP2.0)

JSP2.0的接口,比Tag接口更简单。

doTag():执行当前标签的所有处理任务。

getParent():获取当前标签的父标签。

setJspBody(JspFragment):提供当前标签的实体为一个JspFragment对象

setJspContext(JspContext):设置JSP页面的

setParent(JspTag):设置当前标签的父标签。


SimpleTagSupport(JSP2.0)

SimpleTagSupport类是实现SimpleTag接口的一个模板类。它实现了SimpleTag接口的大部分方法,用户只需要实现doTag()方法。


tld标签库描述文件

tld全称为Tag Library Description,即标签库描述文件。

tld文件用来配置标签库的基本信息。

 

taglib主要元素

taglib.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 web-jsptaglibrary_2_0.xsd"

version="2.0">

    <tlibversion>1.0</tlibversion>

    <jspversion>2.0</jspversion>

    <shortname>taglib</shortname>

    <uri>http://notes.javaee.jsp.com/taglib</uri>

    <info>Private Taglib</info>

    <tag>

        <name>copyright</name>

        <tagclass>notes.javaee.jsp.taglib.Copyright</tagclass>

        <bodycontent>JSP</bodycontent>

        <info>Copyright tag.</info>

    </tag>

</taglib>

l  shortname指明推荐使用的prefix

l  uri指明引用这个标签库时使用的uri

l  tag指明要定义标签的信息。

其中,tag可以设置的属性如下:

属性

描述

name

定义属性的名称。每个标签的是属性名称必须是唯一的。

tagclass

指定映射的Java类。

required

指定属性是否是必须的或者可选的,如果设置为false为可选。

rtexprvalue

声明在运行表达式时,标签属性是否有效。

type

定义该属性的Java类类型 。默认指定为String

description

描述信息。

fragment

如果声明了该属性,属性值将被视为一个JspFragment

bodycontent

指明标签体的限制,有3种取值:emptyJSPtagdependent
empty
:不允许有标签体存在。
JSP
:允许有标签体存在。
tagdependent
:允许有标签体存在,但是标签体内的JSP代码不会被执行。

 

如果tld文件位于/WEB-INF/下面,Tomcat会自动加载tld文件中的标签库。如果位于其他的位置,可以在web.xml中配置。

<jsp-config>

    <taglib>

        <taglib-uri>http://notes.javaee.jsp.com/taglib</taglib-uri>

        <taglib-location>/WEB-INF/taglib.tld</taglib-location>

    </taglib>

</jsp-config>

或者在JSP中直接使用

<%@ taglib uri="/WEB-INF/taglib.tld" prefix="taglib"%>

 

实例

使用TagSupport自定义标签

1.  继承标签API

定义一个HelloTag类,继承TagSupport类。

HelloTag.java:

package notes.javaee.jsp.taglib;

 

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.TagSupport;

 

public class HelloTag extends TagSupport {

    private static final long serialVersionUID = -8828591126748246256L;

    private String name;

 

    @Override

    public int doEndTag() throws JspException {

        try {

            this.pageContext.getOut().println("Hello, " + name);

        } catch (Exception e) {

            throw new JspException(e);

        }

 

        return EVAL_PAGE;

    }

 

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

}

 

2.  tld中配置标签库信息

/WEB-INF下新建taglib.tld文件。

<shortname>指明推荐使用的prefixtaglib

<uri>指明引用这个标签库时使用的urihttp://notes.javaee.jsp.com/taglib

<tag>定义要引用的标签信息。<name>指明标签名,<tagclass>指明映射的Java类,和前面的对应。

然后定义这个标签的属性。因为前面Java类中的属性为name,这里也要对应上。

taglib.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 web-jsptaglibrary_2_0.xsd"

version="2.0">

    <tlibversion>1.0</tlibversion>

    <jspversion>2.0</jspversion>

    <shortname>taglib</shortname>

    <uri>http://notes.javaee.jsp.com/taglib</uri>

    <info>Private Taglib</info>

    <tag>

        <name>hello</name>

        <tagclass>notes.javaee.jsp.taglib.HelloTag</tagclass>

        <bodycontent>empty</bodycontent>

        <info>Hello tag with parameters.</info>

        <attribute>

            <name>name</name>

            <required>true</required>

            <rtexprvalue>true</rtexprvalue>

        </attribute>

    </tag>

</taglib>

 

 

3.  jsp文件中引用标签

前面在tld文件中配置了各个关键信息,现在就可以直接在jsp文件中使用了。

首先,需要在jsp文件中引入标签库文件。这里和标准标签库JSTL一样,使用taglib关键字来说明要引入的是标签库。uri是引入地址,prefix是标签库关键字。

<%@ taglib uri="http://notes.javaee.jsp.com/taglib"prefix="taglib"%>

由于前面定义的标签namehello,所以可以使用的标签名为:prefix+name,即:taglib:hello

Hello.jsp:

<%@ page language="java"contentType="text/html; charset=UTF-8"%>

<%@ taglib uri="http://notes.javaee.jsp.com/taglib"prefix="taglib"%>

<html>

<head>

<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<taglib:hello name="World"/> <br/>

</body>

</html>

结果:

 

使用SimpleTagSupport自定义标签(JSP2.0)

1.   继承标签API

定义一个HelloTag类,继承SimpleTagSupport类。

PersonTag.java:

package notes.javaee.jsp.taglib2;

 

import java.io.IOException;

 

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.SimpleTagSupport;

 

public class PersonTag extends SimpleTagSupport {

    private String name;

    private String sex;

    private int age;

 

    @Override

    public void doTag() throws JspException, IOException {

        this.getJspContext().getOut().write(

                "[Person Info]name: " + name + ", sex: " + sex + ", age:" + age);

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getSex() {

        return sex;

    }

    public void setSex(String sex) {

        this.sex = sex;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

}

 

2.tld中配置标签库信息

/WEB-INF下新建taglib.tld文件。

关键配置信息基本和使用TagSupport自定义标签范例中一样。但是由于对应Java类中有3个属性,需要一一对应上。

taglib.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 web-jsptaglibrary_2_0.xsd"

version="2.0">

    <tlibversion>1.0</tlibversion>

    <jspversion>2.0</jspversion>

    <shortname>taglib</shortname>

    <uri>http://notes.javaee.jsp.com/taglib</uri>

    <info>Private Taglib</info>

    <tag>

        <name>person</name>

        <tagclass>notes.javaee.jsp.taglib2.PersonTag</tagclass>

        <bodycontent>empty</bodycontent>

        <info>person info tag</info>

        <attribute>

            <name>name</name>

            <required>true</required>

            <rtexprvalue>true</rtexprvalue>

        </attribute>

        <attribute>

            <name>sex</name>

            <required>true</required>

            <rtexprvalue>true</rtexprvalue>

        </attribute>

        <attribute>

            <name>age</name>

            <required>true</required>

            <rtexprvalue>true</rtexprvalue>

        </attribute>

    </tag>

</taglib>

 

3.jsp文件中引用标签

引用标签方式和使用TagSupport自定义标签范例一样。

personTag.jsp

<%@ page language="java"contentType="text/html; charset=UTF-8"%>

<%@ taglib uri="http://notes.javaee.jsp.com/taglib"prefix="taglib"%>

<html>

<head>

<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<taglib:person name="Alex"sex="man" age="18"/>

</body>

</html>

结果:

目录
相关文章
|
6月前
|
SQL XML Java
JSP 教程 之 JSP 标准标签库(JSTL) 4
**JSP的JSTL是用于简化Web开发的标签库,包括核心、格式化、SQL、XML和函数5个部分。SQL标签库允许与数据库交互,如设定数据源、执行查询和更新,以及处理参数。例如, `&lt;sql:setDataSource&gt;` 定义数据源, `&lt;sql:query&gt;` 执行查询。通过使用JSTL,开发者能更整洁地处理JSP页面。**
51 8
|
6月前
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 3
JSP标准标签库(JSTL)是用于JSP的实用标签集合,涵盖核心任务如迭代、条件、XML处理和国际化。它包括5个部分:核心、格式化、SQL、XML和函数标签。格式化标签(fmt)用于文本、日期、时间和数字的格式化,例如`&lt;fmt:formatNumber&gt;`和`&lt;fmt:formatDate&gt;`,以及资源管理和区域设置。这些标签简化了JSP应用中的常见操作。
42 5
|
6月前
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 1
JSP的JSTL是用于简化页面逻辑的标签库,涵盖核心、格式化、SQL、XML和函数五大类标签。要安装,下载Apache的JSTL包,将jar文件放入WEB-INF/lib,tld文件复制到WEB-INF,并在web.xml中配置相应的taglib信息。JSTL促进了JSP页面的清洁和结构化。
48 5
|
6月前
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 2
JSTL是JSP的标签库,用于简化页面开发,包含核心、格式化、SQL、XML和函数5类标签。核心标签如`&lt;c:out&gt;`显示数据,`&lt;c:set&gt;`设置变量,`&lt;c:if&gt;`进行条件判断,`&lt;c:forEach&gt;`用于迭代。通过`&lt;%@ taglib %&gt;`导入,如`&lt;c:out&gt;`来自`http://java.sun.com/jsp/jstl/core`。
54 2
|
6月前
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 5
JSP的JSTL是用于简化JSP开发的标签库,包括核心、格式化、SQL、XML和函数五大标签集。XML标签库处理XML文档,如`&lt;x:out&gt;`显示XML数据,`&lt;x:parse&gt;`解析XML,`&lt;x:forEach&gt;`遍历节点。使用前需添加XercesImpl.jar和xalan.jar到Tomcat的lib目录。
43 6
|
6月前
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 6
**JSP JSTL 摘要:** JSTL是JSP的标签库,包含核心、格式化、SQL、XML和函数5类标签。它用于执行常见任务,如迭代、条件判断和XML操作。JSTL函数库提供字符串处理函数,如`contains()`, `endsWith()`, `escapeXml()`等,方便XML和HTML处理。通过`&lt;%@ taglib %&gt;`导入,如`fn:trim()`用于去除字符串两端空白。
44 5
|
6月前
|
Java 容器
JSP 教程 之 JSP 自定义标签 3
JSP自定义标签允许开发人员创建可重用的组件,简化页面逻辑。在JSP 2.0及以上版本,可通过继承`SimpleTagSupport`并覆写`doTag()`方法来创建自定义标签,如`HelloTag`,它有一个`message`属性。属性值通过setter方法`setMessage()`设置。在TLD文件中定义该属性后,可在JSP页面使用`&lt;ex:Hello message=&quot;This is custom tag&quot;/&gt;`来调用,输出定制的文本。
29 0
|
6月前
|
Java 容器
JSP 教程 之 JSP 自定义标签 4
**JSP自定义标签允许创建用户定义的语言元素。它们转换为Servlet中的tag handler,在执行时由Web容器调用。使用SimpleTagSupport继承并重写doTag()方法可创建简单标签。标签可设置属性,如message,通过setter方法访问。TLD文件定义属性元数据,JSP页面则通过prefix和uri引用。例如,&lt;ex:Hello message=&quot;...&quot;/&gt; 显示定制消息。属性可配置为必需、类型、描述及是否为JspFragment。**
30 0
|
6月前
|
搜索推荐 Java 容器
JSP 教程 之 JSP 自定义标签 2
**JSP自定义标签允许用户创建个性化标签,简化页面逻辑。在JSP 2.0中,通过继承`SimpleTagSupport`并重写`doTag()`可创建简单标签处理器。示例展示了一个名为`Hello`的自定义标签,它接收并显示标签体内容。TLD文件配置了标签元数据,JSP页面引用该标签并展示“这是消息主体”。**
27 0
|
6月前
|
Java 容器
JSP 教程 之 JSP 自定义标签 1
**JSP自定义标签简介**:扩展JSP功能,创建用户定义标签,通过Servlet容器调用Tag Handler。在JSP 2.0中,使用SimpleTagHandlers简化定制。以&quot;Hello&quot;标签为例,创建`HelloTag`类继承`SimpleTagSupport`,重写`doTag()`打印消息。编译后,在`custom.tld`定义标签库,JSP页面引用后即可使用。例如 `&lt;ex:Hello/&gt;` 显示 &quot;Hello Custom Tag!&quot;。
32 0

相关课程

更多