`

JSP自定义标签的创建和使用

阅读更多
摘自http://jzinfo.iteye.com/blog/507387
http://wing123.iteye.com/blog/356585
参照http://my.oschina.net/aps/blog/107922
第一种方法:
创建的标签类,必须实现javax.servlet.jsp.tag接口.

下面是编写的一个简单的使用标签类的例子,该标签用来输出一行文字信息:

Tag类:userTagLib

Java代码

    /*
     * 标签处理类UserTagLibrary直接实现接口javax.servlet.jsp.tagext.tag接口
     * 已经全部实现了Tag接口中的6个方法
     * **/ 
    package com.longweir.taglib; 
     
    import javax.servlet.jsp.PageContext; 
    import javax.servlet.jsp.tagext.*; 
    import javax.servlet.http.*; 
    import java.io.*; 
     
    //实现接口Tag中的6个方法来编写Tag处理类 
     
    public class userTagLib implements javax.servlet.jsp.tagext.Tag  
    { 
        private PageContext pagecontext; 
        private Tag Parent; 
         
         
        public void setPageContext(PageContext pagecontext) 
        { 
            this.pagecontext=pagecontext; 
             
        } 
         
        public void setParent(Tag parent) 
        { 
            this.Parent=parent; 
        } 
         
        public Tag getParent() 
        { 
            return Parent; 
        }    
         
        //开始标签处理 
        public int doStartTag() 
        { 
            return SKIP_BODY;  //此处是空标签体,所以直接跳过 
        } 
         
        //结束标签体处理 
        public int doEndTag() 
        { 
            try 
            { 
                pagecontext.getOut().print("Hello,欢迎使用JSP标签对象"); 
            } 
            catch (Exception e) 
            {}       
            return EVAL_PAGE; //继续执行后续JSP页面代码 
        } 
         
        //空实现release方法 
        public void release() 
        { 
            //空实现 
        } 
     
    } 



编写tld标签库文件userTagLib.tld,用来映射处理的标签所对应的标签类:


Xml代码  收藏代码

    <?xml version="1.0" encoding="UTF-8" ?> 
    <!DOCTYPE taglib 
            PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" 
            "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> 
    <taglib> 
      <tlib-version>1.1</tlib-version> 
      <jsp-version>2.1</jsp-version> 
      <short-name>userTagLib</short-name> 
      <uri>/MyuserTagLib</uri> 
       
      <tag> 
          <name>Hello</name> 
          <tag-class>com.longweir.taglib.userTagLib</tag-class> 
          <body-content>empyt</body-content>   
      </tag> 
     
    </taglib> 



在web.xml文件中,配置标签库的信息


Xml代码  收藏代码

     <jsp-config> 
        <taglib> 
        <taglib-uri>/userTagLib</taglib-uri> 
        <taglib-location>/WEB-INF/tlds/userTagLib.tld</taglib-location> 
    </taglib> 
     </jsp-config> 





编写一个简单的hello01.jsp文件来显示标签内容:
Java代码  收藏代码

    <%@ page contentType="text/html;charset=GBK"%> 
    <%@ taglib uri="/userTagLib" prefix="myTag" %> 
     
    <html> 
      <head>   
        <title>HelloApp</title>     
        <meta http-equiv="pragma" content="no-cache"> 
        <meta http-equiv="cache-control" content="no-cache"> 
        <meta http-equiv="expires" content="0">  
      </head>   
      <body> 
        <b>Nice to meet you:${param.username}</b> <br> 
         
        <p>显示标签库中的信息</p> 
        <h1><myTag:Hello/></h1> 
      </body> 
    </html> 



提交页面:http://localhost:8085/hello/hello01.jsp?username=luoxianqiao   (username是提交的request参数)

显示结果为:


    Nice to meet you:luoxianqiao  
     
    显示标签库中的信息 
     
    Hello,欢迎使用JSP标签对象 





一般编写标签类直接继承自TagSupport即可,该类实现了接口IetreationTag接口,直接继承类实现的代码更简单,如下:

    package com.longweir.taglib; 
     
    import javax.servlet.http.*; 
    import javax.servlet.jsp.tagext.*; 
    import java.io.*; 
    import javax.servlet.jsp.PageContext; 
    import javax.servlet.jsp.JspWriter; 
     
    public class userTagLib2 extends javax.servlet.jsp.tagext.TagSupport  
    { 
     
        
        //结束标签体处理  
        public int doEndTag() 
        { 
            /*
            String paramvalue=null;
            paramvalue=pageContext.getRequest().getParameter(name);  //pageContext已在TagSupport中定义 
            JspWriter out=pageContext.getOut();     
            try
            {
                if (paramvalue!=null) 
                    out.print(paramvalue);
                else
                    out.print("参数未能获取");
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            
            */ 
            JspWriter out=pageContext.getOut(); 
            try 
            { 
                out.print("成功显示了标签内容"); 
            } 
            catch (Exception e) 
            { 
                e.printStackTrace(); 
            }        
            return EVAL_PAGE; //继续执行后续JSP页面代码 
        }    
     
    }
第二种方法:
jstl标签库的配置
* 将jstl.jar和standard.jar拷贝到WEB-INF/lib下(如果使用el表达式,不用拷贝这两个jar)

注意:jstl必须在能够支持j2ee1.4/servlet2.4/jsp2.0版本上的容器才能运行,这个环境
      是目前较为常用的环境
    
标签库的使用
* 采用taglib指令引入
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

 
自定义函数库:
1、定义类和方法(方法必须是public static)
2、编写自定义tld文件,并且将此文件放到WEB-INF或WEB-INF任意子目录下
3、在jsp中采用taglib指令引入自定义函数库
4、采用 前缀+冒号(:)+函数名 调用即可

MyFunctions.java

Myfunctions.java代码 
public class MyFunctions { 
   
   public static String sayHello(String name) { 
      return "Hello " + name; 
   } 
  
}  
  
myfunctions.tld
自定义标签

Xml代码 
<?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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 
  version="2.0"> 
    
  <description>my functions library</description> 
  <display-name>my functions</display-name> 
  <tlib-version>1.0</tlib-version> 
  <short-name>my</short-name> 
  <uri>http://www.bjsxt.com/functions</uri> 
  
  <function> 
    <name>sayHello</name> 
    <function-class>com.bjsxt.struts.MyFunctions</function-class> 
    <function-signature>java.lang.String sayHello(java.lang.String)</function-signature> 
  </function> 
  
</taglib> 
  
jstl_fn.jsp

注意与前面的配置文件myfunctions.tld相对应,
prefix对应<short-name>my</short-name>
uri对应 <uri>http://www.bjsxt.com/functions</uri>
可使用以下面两种方式给name赋值:
1、${my:sayHello("David") }
2、request.setAttribute("name", "David");

Java代码 
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> 
<%@ taglib uri="http://www.bjsxt.com/functions" prefix="my" %> 
 
<% 
request.setAttribute("name", "David"); 
%> 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
  <head> 
    <title>testTemplate</title> 
  </head> 
  <body> 
    ${my:sayHello(name) } 
  </body> 
</html> 
 

补充:web-app version="2.4"
有时也需要在web.xml中添加对标签的定义:

Xml代码 
<jsp-config> 
    <taglib> 
        <taglib-uri>www.bjsxt.com/functions</taglib-uri> 
        <taglib-location>/WEB-INF/my.tld</taglib-location> 
    </taglib> 
</jsp-config> 


注意:
 
可能出现的异常
1、The function xxx must be used with a prefix when a default namespace is not specified
--- 在jsp页面中调用方式不正确,可能将 ":" 写成了 "."

2、The function xxx cannot be located with the specified prefix
--- a) 类中定义的方法不是 public static 的方法
      b) 类中的方法名称和jsp自带的标签元素冲突,重名等
分享到:
评论

相关推荐

    jsp 自定义标签的使用

    本教程将深入探讨JSP自定义标签的使用,同时结合实例介绍分页和下拉框绑定值的封装。 一、JSP自定义标签基础 1. **定义标签库(Tag Library)**:自定义标签首先需要定义一个TLD(Tag Library Descriptor)文件,它...

    jsp 自定义标签实例

    在JavaServer Pages (JSP) 技术中,自定义标签是扩展JSP功能的关键手段,它允许开发者创建可重用的组件,提高...在给定的实例中,我们可以看到一个简单的自定义标签的实现和使用过程,涵盖了JSP自定义标签的基本流程。

    JSP自定义标签学习笔记

    通过以上内容的学习,我们可以理解JSP自定义标签的基本原理,掌握创建和使用自定义标签的方法,从而提升JSP应用的开发效率和代码质量。在实际项目中,合理利用自定义标签,可以构建出模块化、易于维护的Web应用程序...

    创建JSP自定义标签.doc

    本篇将详细介绍如何创建JSP自定义标签。 首先,了解自定义标签的基本结构。一个自定义标签其实是一个Java类,这个类需要继承自`TagSupport`或`BodyTagSupport`。这两个类由JSP容器提供,它们包含处理JSP页面与...

    jsp2.0 自定义标签和自定标签函数

    "jsp 2.0自定义标签.doc"文件很可能包含了一个关于如何创建和使用自定义标签的详细教程。它可能涵盖了从创建TLD文件,编写标签处理类,到在JSP页面上实际使用自定义标签的全过程。同时,这个文档可能会提供一些实际...

    jsp自定义标签例子,能在Tomcat下直接运行

    总之,JSP自定义标签是提高JSP开发效率和代码复用性的重要工具,通过创建和使用自定义标签,我们可以构建出更加模块化、易于维护的Web应用程序。结合Tomcat这样的Servlet容器,可以快速地部署和测试这些自定义组件。

    jsp自定义标签库实现数据列表显示

    总的来说,JSP自定义标签库允许开发者创建自己的标签,提高代码的可读性和可维护性。在这个案例中,`UserListTag`实现了数据列表的展示,`UserInfo`提供了数据模型,`my_cms_tag.tld`定义了标签的使用规则,而`user...

    JSP自定义标签之日期显示

    本篇将深入探讨“JSP自定义标签之日期显示”,以及如何通过自定义标签来优雅地处理日期格式化和展示。 首先,我们要理解JSP自定义标签的基本概念。自定义标签是JSP的一种扩展,它不是Java内置的标签,而是由开发者...

    JSP自定义标签实例与详细讲解

    总结,JSP自定义标签是JSP技术的重要组成部分,它们提供了扩展JSP功能的能力,使开发者能够创建高度定制且易于维护的页面组件。通过理解自定义标签的工作原理,开发者可以更好地构建高效、可扩展的Web应用。

    jsp自定义标签报错的问题

    在使用JSP自定义标签时,开发者可能会遇到一些报错问题,这通常涉及到项目结构、类路径设置或自定义标签的编译与打包方式。在本文中,我们将深入探讨这些问题,以及如何解决“JspException”这个特定异常。 首先,...

    JSP自定义标签之自动完成框

    首先,我们要理解JSP自定义标签的概念。自定义标签是JSP的一种扩展机制,它允许开发者创建自己的标签库,以更加清晰和可维护的方式编写页面。自定义标签的实现通常涉及三个主要部分:标签库描述符(TLD)、标签处理...

    jsp自定义分页标签

    JSP自定义标签是JSP技术的一部分,它允许开发者创建自己的标签,以扩展HTML或XML文档。这些自定义标签可以封装复杂的Java代码,使JSP页面更加清晰,易于理解和维护。自定义标签由两部分组成:标签处理类(Tag ...

    jsp自定义标签编写的分页

    总结来说,通过学习和实践JSP自定义标签,我们可以构建高效、灵活的Web应用程序,比如这里的分页系统,它不仅简化了页面的开发,还增强了系统的扩展性和可维护性。在实际项目中,结合良好的设计原则和最佳实践,...

    jsp自定义标签库注意事项

    通过理解和熟练运用这些知识点,你可以更有效地创建和使用JSP自定义标签库,提升项目开发效率。在实际应用中,务必遵循最佳实践,保持代码的清晰和规范,以便团队成员之间的协作和代码的长期维护。

    jsp自定义标签大全.rar

    本资源“jsp自定义标签大全”包含了一系列示例和详细教程,涵盖了从基础到高级的自定义标签使用方法,对于想要深入了解和掌握JSP自定义标签的开发者来说是一份宝贵的参考资料。通过学习和实践这些示例,你可以更好地...

    权威实用jsp自定义标签demo<select,checkbox,radio>

    综上所述,“权威实用jsp自定义标签demo,checkbox,radio&gt;”教程旨在帮助开发者掌握如何创建和使用与选择器相关的自定义标签,从而提升JSP开发的效率和质量。通过学习这个教程,你可以了解到自定义标签的核心概念、...

    JSP自定义标签的开发及使用

    本篇文章将深入探讨JSP自定义标签的开发与使用,以及如何通过实例`Demo1_JspTag`来理解这一过程。 首先,我们需要了解自定义标签的基本概念。自定义标签是JSP的一种扩展机制,它允许我们封装复杂的Java代码或业务...

    jsp自定义嵌套标签

    ### jsp自定义嵌套标签:定义与使用详解 在JavaServer Pages(JSP)技术中,自定义标签是扩展其功能的一种强大手段。而自定义嵌套标签,则是在此基础上进一步提升灵活性和重用性的机制。本文将深入探讨自定义嵌套...

    由浅到深详细讲解JSP自定义标签

    本文将深入讲解JSP自定义标签的相关概念、格式、处理过程以及创建和使用自定义标签库的基本步骤。 1. 基本概念: - **标签**:JSP标签是XML元素,用于简化JSP页面,使其更易读且支持多语言版本。标签名和属性区分...

    JSP自定义Table标签demo

    总结起来,"JSP自定义Table标签demo"是一个教育性的示例,它演示了如何利用JSP自定义标签的灵活性和强大功能,来创建复杂且可复用的组件,如动态表格。通过学习和理解这个demo,开发者可以提升自己的JSP开发能力,...

Global site tag (gtag.js) - Google Analytics