Taglib使用

本文介绍了JSP中Taglib的使用。首先说明了声明TLD位置和定义库名称两种引用TLD的方法及区别。接着详细阐述了编写最简单的Taglib、带BODY的Taglib的步骤,包括编写类、TLD文件和JSP调用文件等。最后讲解了让行为互相协作的Taglib编写,涉及编写Tag类、修改TLD文件和测试等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、第一种方法:仅声明TLD位置

jsp文件头部,声明:

<%@ taglib uri=”/WEB-INF/tlds/orataglib_1_0.tld” prefix=”ora”%>

这样就ok

二、第二种方法:定义库名称

jsp文件头部,声明:

<%@ taglib uri=”/orataglib” prefix=”ora”%>

 

WEB.XML添加如下声明:

<taglib>

<taglib-uri>/orataglib</taglib-uri>

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

</taglib>

 

tld里加上:

<shortname>ora</shortname>

<uri>/orataglib</uri>

 

三、区别

  如果类不多,用tld引用就行了。否则就用库形式,便于升级,改动。

第二章:编写最简单的Taglib

一、编写HelloWorldTag

package mytag; 

import java.io.IOException;

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

public class HelloWorldTag extends TagSupport{

    public int doStartTag() throws JspTagException{

        return EVAL_BODY_INCLUDE;

    }

    public int doEndTag() throws JspTagException{

    try{

            pageContext.getOut().write("Hello World");

        }

    catch (IOException ex){

             throw new JspTagException("Error!");

        }

    return EVAL_PAGE;

    }

}

二、编写相应TLD文件

取名为hello.tld

 

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE taglib

        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"

    "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>

  <tlibversion>1.0</tlibversion>

  <jspversion>1.1</jspversion>

  <shortname>myTag</shortname> 

    <tag>

        <name>hello</name>

        <tagclass>mytag.HelloWorldTag</tagclass>

        <bodycontent>empty</bodycontent>

   </tag>

</taglib>

三、编写testtag1.jsp进行调用

<%@ page language="java"%>

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

<html>

<body>

<mytag:hello></mytag:hello>

</body>

</html>

四、注意点

1.   实际生成的类在包mytag内,要把该包放到WEB-INF/classes目录下

2.   tld文件里的shortname 就是 jsp里的 prefix

3.   tld文件里的<tag>标签中,<name>表示实际类的一个别名,供jsp页面引用。<tagclass>表示实际的类

 4。把tld文件放到WEB-INF 下的tlds文件夹内。

五、概述

1.   必须导入javax.servlet.jsp.* javax.servlet.jsp.tagext.* 两个包

2.   让自己的类继承TagSupport 类,并且实现doStartTag doEndTag 方法。

3.   编写tld标签,只需指定<shortname>标签,和编写具体的类标签<tag>,其他的可以复制粘贴。

4.   jsp页面是用导入tld的办法。然后用前缀:类名的方式调用。

 

第三章:编写带BODYTaglib

一、编写HelloBodyTag

package mytag;

import java.io.*;

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

 

public class HelloBodyTag extends BodyTagSupport {

    public int doAfterBody() throws JspException {

        BodyContent bc = getBodyContent();

        JspWriter out = getPreviousOut();

        try {

            out.write(bc.getString());

        }

        catch (IOException e) {} // Ignore

        return SKIP_BODY;

    }

}

 

二、修改tld文件

加入:

     <tag>

        <name>HelloBodyTag</name>

        <tagclass>mytag.HelloBodyTag</tagclass>

     </tag>

三、        testtag2.jsp调用

<%@ page language="java"%>

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

<html>

<body>

<mytag:HelloBodyTag>Hello,BodyTag!</mytag:HelloBodyTag>

</body>

</html>

四、概述

1类最好继承BodyTagSupport

2BodyContent JspWriter 都是容器内的对象

3GetPreviousOut表示外层输出。对于某个tag来说,外层输出就是jsp页面。对于某个嵌套的tag,外层输出就是父tag

第四章:让行为互相协作

一、编写互相协作的行为

编写这样的tag