Taglib学习笔记

原创 2004年12月31日 13:04:00

一、第一种方法:仅声明TLD位置<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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,在jsp页面调用时

<mytag:helloMan><mytag:param name=”diego” ></mytag:param></mytag: helloMan>

 会得到 hello diego 的值。

 

二、编写两个Tag

1.编写ParamTag

package mytag;

 

import java.net.*;

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

 

public class ParamTag extends TagSupport {

    private String name;

 

    public void setName(String name) {

        this.name = name;

    }

    public int doEndTag() throws JspException {

        Tag parent = findAncestorWithClass(this, ParamParent.class);

 

        ParamParent paramParent = (ParamParent) parent;

        paramParent.setParam(name);

        return EVAL_PAGE;

    }

   

    public void release() {

        name = null;

        super.release();

    }

}

 

2.编写HelloParamTag

package mytag;

 

import java.io.*;

import javax.servlet.http.*;

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

 

public class HelloParamTag extends TagSupport implements ParamParent {

    private String name;

 

    public void setParam(String name) {

        this.name = name;

    }

 

    public int doStartTag() {

        return EVAL_BODY_INCLUDE;

    }

 

    public int doEndTag() throws JspException {

        JspWriter out = pageContext.getOut();

        try{

     out.print("hello " + this.name );   

     }

catch(IOException e){

         }            

        return EVAL_PAGE;

    }

 

    public void release() {

     name = null;

        super.release();

    }

}

 

3.编写辅助的接口ParamParent

package mytag;

 

public interface ParamParent {

    void setParam(String name);

}

 

三、修改tld文件

    <tag>

        <name>helloMan</name>

        <tagclass>mytag.HelloParamTag</tagclass>

    </tag>

     

    <tag>

        <name>param</name>

        <tagclass>mytag.ParamTag</tagclass>

        <attribute>

            <name>name</name>

            <required>false</required>

        </attribute>

    </tag>

四、编写testtag3.jsp进行测试

<%@ page language="java"%>

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

<html>

<body>

<mytag:helloMan><mytag:param name="diego" ></mytag:param></mytag:helloMan>

</body>

</html>

五、设计思路

1.嵌套行为中,一般父Tag实现业务逻辑,子Tag为父Tag提供参数

2.子Tag通过findAncestorWithClass 找到父Tag,为了达到通用化,设计接口ParamParent

3.在父Tag内实现了接口的setParam方法,子Tag通过调用该方法,设置了父Tag的参数

4.父Tag实现业务逻辑。打印Hello

Taglib学习笔记

第一章:怎样使用Taglib一、第一种方法:仅声明TLD位置在jsp文件头部,声明:这样就ok了二、第二种方法:定义库名称在jsp文件头部,声明: 在WEB.XML添加如下声明:/orataglib/...
  • WalkingWithJava
  • WalkingWithJava
  • 2004年11月06日 02:00
  • 1114

jsp的taglib指令用法

Taglib 指令是定义一个标签库以及其自定义标签的前缀.。 需要导入standard.jar jsp-api.jar 两个包 下载地址prefix 是一个标签库别名 taglib的uri ...
  • q601115211
  • q601115211
  • 2017年01月11日 07:33
  • 9360

taglib-html:浏览器会自动解析

引用: jsp页面使用 生成一个元素 生成一个元素 "生成当前页面的绝对路径,意义不大 生成一个元素 login 由struts-config.xml中的全局转发创建链接 ...
  • OutRoading
  • OutRoading
  • 2016年05月18日 13:07
  • 954

JSP自定义标记taglib学习笔记

一、什么是Taglib? 标记库(tag library),是指由在JSP页面中使用的标记所组成的库。JSP容器推出时带有一个小型的、默认的标记库。而自定义标记库是为了某种特定的用途或者目的,将一些...
  • wiinder
  • wiinder
  • 2016年03月20日 22:23
  • 2696

Taglib的打包部署和使用方式详解(转载)

1. Taglib的编写   Taglib用于将呈现逻辑进行封装。   它必须继承自TagSupport类。   下面是一个简单的例子:     ...
  • airjordon
  • airjordon
  • 2016年07月26日 16:02
  • 976

(六)Webxml文件中添加taglib以及在页面中使用标签

在web.xml文件中添加tablib 标签库唯一访问标识(必须与标签库tld描述文件中的uri一致) 标签库tld描述文件本地路径(如/WEB-INF/mytag.tld) ...
  • liaoxiaohua1981
  • liaoxiaohua1981
  • 2011年10月14日 15:57
  • 2932

用taglib提取mp3文件中的图片和一些其它信息的实例

//taglib可以从网上下载,解压包文件中,test and examples 里面有些很好的学习例子,taglib也有API ,可以参考//reference size:http://sql.co...
  • yang_rong_yong
  • yang_rong_yong
  • 2008年10月20日 17:26
  • 3500

taglib标签库详解

  • yuyazhang
  • yuyazhang
  • 2007年07月13日 10:04
  • 2960

Java WEB开发实战 之 第六部分:Taglib基本知识和基本开发

Taglib:自定义标签库,是一种Java Web开发的组件技术,通过在页面上使用自定义的标记,实现一些相应的功能处理的技术 Taglib有什么:任何一个Taglib都包含两个部分 1:标...
  • wangshfa
  • wangshfa
  • 2014年03月20日 13:34
  • 1528

第四章 Taglib Struts标签库

第四章 Tablib Struts标签库Struts2 Taglib抽象了不同表示技术,现在Struts2主要支持三种表示技术:JSP,FreeMarker和Velocity。但部分的Tag在三种表示...
  • struts2
  • struts2
  • 2007年08月03日 13:36
  • 38958
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Taglib学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)