Taglib笔记--摘自http://tech.acnow.net/Html/Program/Java/2002-04/10/092611588.shtml

简介:

读完《jsp设计》后深深为大师的功力折服。这篇笔记就当是个总结。

  所有代码在win2000 + tomcat 4.1.17 下通过。

  我刚开始使用java,有不当之处,请高手多指教。 

第一章:怎样使用Taglib

一、第一种方法:仅声明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的办法。然后用前缀:类名的方式调用。

 

第三章:编写带BODY的Taglib

一、编写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

2.BodyContent 和 JspWriter 都是容器内的对象

3.GetPreviousOut表示外层输出。对于某个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

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

本文转自kenty博客园博客,原文链接http://www.cnblogs.com/kentyshang/archive/2007/06/29/800275.html如需转载请自行联系原作者


kenty

相关文章
|
1月前
|
前端开发 JavaScript C++
震惊!!!html竟然被...... 一篇博客让你从0开始熟悉并掌握html 超详细html笔记 全网独一份
本文是一份超详细的HTML学习笔记,从基础认知开始,介绍了网页的构成、五大浏览器、web标准、HTML/CSS/JavaScript的区别,然后详细讲解了HTML的概念、骨架结构、常用快捷键、注释、标签结构和关系。接着,通过大量实例深入探讨了HTML的各种标签,包括排版标签、文本格式化标签、媒体标签、链接标签、列表标签、表格标签、表单标签、语义化标签和字符实体,旨在帮助读者从0开始熟悉并掌握HTML。
35 2
震惊!!!html竟然被...... 一篇博客让你从0开始熟悉并掌握html 超详细html笔记 全网独一份
|
2月前
|
Java Maven Windows
使用Java创建集成JACOB的HTTP服务
本文介绍了如何在Java中创建一个集成JACOB的HTTP服务,使Java应用能够调用Windows的COM组件。文章详细讲解了环境配置、动态加载JACOB DLL、创建HTTP服务器、实现IP白名单及处理HTTP请求的具体步骤,帮助读者实现Java应用与Windows系统的交互。作者拥有23年编程经验,文章来源于稀土掘金。著作权归作者所有,商业转载需授权。
使用Java创建集成JACOB的HTTP服务
|
1天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
30天前
|
JSON Java fastjson
Java Http 接口对接太繁琐?试试 UniHttp 框架吧
UniHttp 是一个声明式的 HTTP 接口对接框架,旨在简化第三方 HTTP 接口的调用过程。通过注解配置,开发者可以像调用本地方法一样发起 HTTP 请求,无需关注请求的构建和响应处理细节。框架支持多种请求方式和参数类型,提供灵活的生命周期钩子以满足复杂的对接需求,适用于企业级项目的快速开发和维护。GitHub 地址:[UniAPI](https://github.com/burukeYou/UniAPI)。
|
1月前
|
JavaScript 安全 Java
谈谈UDP、HTTP、SSL、TLS协议在java中的实际应用
下面我将详细介绍UDP、HTTP、SSL、TLS协议及其工作原理,并提供Java代码示例(由于Deno是一个基于Node.js的运行时,Java代码无法直接在Deno中运行,但可以通过理解Java示例来类比Deno中的实现)。
65 1
|
1月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
52 1
|
27天前
|
Java 数据处理 开发者
Java Http 接口对接太繁琐?试试 UniHttp 框架~
【10月更文挑战第10天】在企业级项目开发中,HTTP接口对接是一项常见且重要的任务。传统的编程式HTTP客户端(如HttpClient、Okhttp)虽然功能强大,但往往需要编写大量冗长且复杂的代码,这对于项目的可维护性和可读性都是一个挑战。幸运的是,UniHttp框架的出现为这一问题提供了优雅的解决方案。
58 0
|
3月前
|
数据采集 JSON API
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
本文探讨了在.NET环境下,如何通过异步方法和HTTP请求提高Web爬虫的响应速度和数据抓取效率。介绍了使用HttpClient结合async和await关键字实现异步HTTP请求,避免阻塞主线程,并通过设置代理IP、user-agent和cookie来优化爬虫性能。提供了代码示例,演示了如何集成这些技术以绕过目标网站的反爬机制,实现高效的数据抓取。最后,通过实例展示了如何应用这些技术获取API的JSON数据,强调了这些方法在提升爬虫性能和可靠性方面的重要性。
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
|
3月前
|
Java 开发工具
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
这篇文章讲述了作者在升级JDK至17版本后遇到IDEA无法识别`tools.jar`的问题,并提供了两种解决方法:升级IDEA版本或降低JDK版本,并提供了相关版本的IDEA兼容性信息。
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
|
3月前
|
缓存 负载均衡 安全
下一篇
无影云桌面