`

自定义标签调用资源文件

阅读更多
自定义标签处理类一般都继承TagSupport或BodyTagSupport
1.先看一个普通的最简单的自定义标签程序。
A:创建标签的处理类
package com.test.tag;   
  
import java.io.IOException;   
  
import javax.servlet.jsp.JspException;   
import javax.servlet.jsp.tagext.Tag;   
import javax.servlet.jsp.tagext.TagSupport;   
  
@SuppressWarnings("serial")   
public class HelloTag extends TagSupport {   
  
    //doStartTag返回的都是BODY相关,doEndTag返回的都是PAGE相关   
    @Override  
    public int doStartTag() throws JspException {   
        try {   
            //通过PageContext对象的getOut()方法获得JspWriter对象输出内容   
            this.pageContext.getOut().write("hello");   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
        return Tag.EVAL_BODY_INCLUDE;   
    }   
  
}  


B:创建标签库描述文件
<?xml version="1.0" encoding="ISO-8859-1" ?>  
<!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.0</tlib-version>  
    <jsp-version>1.2</jsp-version>  
    <short-name>hello taglib test</short-name>  
    <uri>/hellotag</uri>  
       
    <tag>  
         <!--Tag名字 -->  
        <name>hello</name>  
        <!-- 该Tag对应的处理类 -->  
        <tag-class>com.test.tag.HelloTag</tag-class>  
        <!-- 该 Tag的body内容为空  -->  
        <body-content>empty</body-content>  
    </tag>  
</taglib>  

C.在JSP文件中引入标签库,然后插入标签
jsp里有两种引用方式:
<%@ taglib uri="/WEB-INF/hello.tld" prefix="aa" %>或者
<%@ taglib uri="/hellotag" prefix="aa" %>
<%@ page language="java"  pageEncoding="UTF-8"%>   
<%@ taglib uri="/hellotag" prefix="aa" %>   
  
  
<html>   
  <body>   
    <aa:hello/>   
  </body>   
</html>  



输出结果为:hello

2.自定义标签库引用资源文件
A:首先在应用程序根目录下建立一个资源文件比如叫:helloworld.properties,内容为:
Java代码
hello.title=tagTitle   
hello.content=tagContent  

hello.title=tagTitle
hello.content=tagContent


B:建立一个Servlet,在启动时加载该Servlet,在init方法里读取helloworld.properties文件内容。
package com.test.tag;   
  
import java.io.InputStream;   
import java.util.Properties;   
  
import javax.servlet.ServletConfig;   
import javax.servlet.ServletContext;   
import javax.servlet.ServletException;   
import javax.servlet.http.HttpServlet;   
  
@SuppressWarnings("serial")   
public class TagServlet extends HttpServlet {   
    public void init() throws ServletException {   
        System.out.println("init not param");   
    }   
    //init(ServletConfig config)存在,则init()方法则不会执行。如果init(ServletConfig config)不存在,则init()方法会执行   
    @Override  
    public void init(ServletConfig config) throws ServletException {   
        try{   
            System.out.println("init have param");   
            Properties p = new Properties();   
            //通过ServletContext读取资源文件   
            ServletContext context = config.getServletContext();   
            InputStream in = context.getResourceAsStream("/helloworld.properties");   
               
            p.load(in);   
            in.close();   
            //设置属性key-value到context中   
            context.setAttribute("prop", p);   
        }catch(Exception e){   
            e.printStackTrace();   
        }   
           
    }   
       
  
}  


C:创建标签库的处理类:
package com.test.tag;   
  
import java.util.Properties;   
  
import javax.servlet.jsp.JspException;   
import javax.servlet.jsp.PageContext;   
import javax.servlet.jsp.tagext.Tag;   
import javax.servlet.jsp.tagext.TagSupport;   
  
@SuppressWarnings("serial")   
public class HelloTagByResource extends TagSupport {   
    private String title;   
    public String getTitle() {   
        return title;   
    }   
    public void setTitle(String title) {   
        this.title = title;   
    }   
    //在doStartTag和doEndTag里写都可以。不要误认为:"遇到标签的起始标记时,还没有解析到其属性title,所以放在doStartTag里写会报错"   
    @SuppressWarnings("static-access")   
    @Override  
    public int doStartTag() throws JspException {   
        try{   
//          Properties p = (Properties)this.pageContext.getAttribute("ps",this.pageContext.APPLICATION_SCOPE);   
            Properties p = (Properties)this.pageContext.getAttribute("ps",PageContext.APPLICATION_SCOPE);   
            String str = p.getProperty(title);   
            this.pageContext.getOut().print(str);   
        }catch(Exception e){   
            e.printStackTrace();   
        }   
        return Tag.EVAL_BODY_INCLUDE;   
    }   
//  @Override   
//  public int doEndTag() throws JspException {   
//      try{   
////            Properties p = (Properties)this.pageContext.getAttribute("ps",this.pageContext.APPLICATION_SCOPE);   
//          Properties p = (Properties)this.pageContext.getAttribute("ps",PageContext.APPLICATION_SCOPE);   
//          String str = p.getProperty(title);   
//          this.pageContext.getOut().print(str);   
//      }catch(Exception e){   
//          e.printStackTrace();   
//      }   
//      return Tag.EVAL_PAGE;   
//  }   
  
       
       
}  


D:创建自定义标签的描述文件 
<?xml version="1.0" encoding="ISO-8859-1" ?>  
<!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.0</tlib-version>  
    <jsp-version>1.2</jsp-version>  
    <short-name>hello taglib test</short-name>  
    <uri>/hellotag</uri>  
       
    <tag>  
         <!--Tag名字 -->  
        <name>hello</name>  
        <!-- 该Tag对应的处理类 -->  
        <tag-class>com.test.tag.HelloTag</tag-class>  
        <!-- 该 Tag的body内容为空  -->  
        <body-content>empty</body-content>  
    </tag>  
       
    <tag>  
         <!--Tag名字 -->  
        <name>message</name>  
        <!-- 该Tag对应的处理类 -->  
        <tag-class>com.test.tag.HelloTagByResource</tag-class>  
        <!-- 该 Tag的body内容为空  -->  
        <body-content>empty</body-content>  
        <!-- 属性定义 -->  
        <attribute>  
            <name>title</name>  
            <required>true</required>  
        </attribute>  
    </tag>  
</taglib>  



E:jsp里引用Java代码
<%@ page language="java"  pageEncoding="UTF-8"%>   
<%@ taglib uri="/hellotag" prefix="aa" %>   
  
  
<html>   
  <body>   
    <aa:message title="hello.title"/><br/>   
    <aa:message title="hello.content"/>   
  </body>   
</html>  
分享到:
评论

相关推荐

    JSP自定义标签学习笔记

    一个完整的自定义标签可能包含多个属性,处理类根据属性值进行不同的操作,例如输出定制的文本、调用其他服务等。 4.3 TLD 文件概述 TLD文件是XML格式,定义了标签库的元数据,包括标签名称、属性、属性类型、标签...

    freemark 自定义标签 总结

    在`.ftl`文件中,可以通过`&lt;@myTag...&gt;`调用自定义标签,其中`myTag`是Java类的别名。标签的参数可以通过`param name="value"`方式传递。例如: ```html 内容... ``` 4. **自定义标签的执行上下文** ...

    自定义标签的内容及使用

    JSP自定义标签的种类随着JSP版本的更新也在不断丰富,JSP 1.2中的传统标签与JSP 2.0中新增的简单标签和标签文件,为开发者提供了更多的选择。通过熟练掌握自定义标签的开发和使用,可以显著提高JSP应用的开发效率和...

    java中自定义标签的使用方法

    1. **定义标签库(TLD)**:自定义标签库描述文件(TLD, Tag Library Descriptor)是定义自定义标签的地方。TLD文件通常以`.tld`为扩展名,其中包含了标签的元数据,如标签名称、属性、返回类型等。例如: ```xml ...

    自定义标签学习笔记

    2. **作用**:TLD文件的作用是让Web容器能够识别并正确处理自定义标签。 3. **位置**:通常放置于`WEB-INF`目录下的`classes`或者`lib`文件夹中,也可以放置在`/META-INF/tags`目录下。 #### 五、实现自定义标签 1...

    自定义标签连数据库

    自定义标签由三部分组成:标签库描述符(TLD)、标签处理类(Tag Handler Class)和标签库文件(JSP页面上的taglib指令)。TLD文件定义了标签的属性、行为以及它所关联的处理类。处理类是Java类,实现了JSP标准标签...

    java自定义标签教程

    在Java中,自定义标签是通过实现特定的接口或继承已有的支持类来完成的。 首先,Java自定义标签是一个Java类,它可以实现`javax.servlet.jsp.tagext.Tag`接口或者其子接口。这个接口定义了标签的生命周期方法,如`...

    创建JSP自定义标签.doc

    - 在JSP页面中,可以通过`&lt;taglib&gt;`元素和`.tld`文件定义自定义标签及其属性。`.tld`文件是标签库描述符,用于描述标签的行为、属性和它们的类型。 4. **实例化和使用**: - 在JSP页面中通过`&lt;jsp:useBean&gt;`引入...

    JSP下 一个简单的自定义标签

    自定义标签由两部分组成:标签库描述符文件(TLD,Tag Library Descriptor)和标签处理类(Tag Handler Class)。TLD文件定义了标签的元数据,包括标签的名称、属性、返回类型等信息,通常以`.tld`为扩展名。而标签...

    servlet+ 自定义标签

    ### servlet与自定义标签知识点详解 #### 一、Servlet概述 Servlet是一种服务器端的应用程序接口(API),主要用于构建动态Web应用程序。它比JSP技术出现得更早,在JSP诞生前,Servlet不仅负责处理业务逻辑...

    java自定义标签分页

    "fenye.jar"是包含了自定义标签处理类和相关资源的库文件,这个库需要被添加到项目的类路径中以便使用。 分页功能的核心在于如何计算和展示当前页及周边页的数据。这通常涉及到以下几个步骤: 1. 计算总页数:根据...

    JSP自定义标签源码

    在Java服务器页面(JSP)技术中,自定义标签是扩展JSP功能的重要手段。...在提供的压缩包文件中,包含的自定义标签库源码正是实践这些概念的实际示例,通过阅读和学习,你可以更深入地了解自定义标签的工作原理。

    jsp自定义分页标签

    1. **标签库描述文件(TLD, Tag Library Descriptor)**:这是定义自定义标签的核心文件,通常以`.tld`为扩展名。在这个文件中,我们可以定义标签的名字、属性、返回类型等元信息。例如,分页标签可能需要定义如“当前...

    Java自定义标签开发.zip

    这包括创建标签处理类、编写TLD文件、在JSP页面中导入标签库以及调用自定义标签。这些教程将帮助你理解自定义标签的生命周期、方法调用顺序以及如何处理标签的属性。 在“更多场景的示例Demo”中,你可以找到各种...

    原创-自定义标签库制作

    完成上述步骤后,就可以在JSP页面中使用 `&lt;mytaglib:hello/&gt;` 来调用自定义标签了。这将触发标签处理类中的逻辑,最终在浏览器中显示 “Hello!!!”。 通过以上步骤,我们成功地创建并部署了一个简单的自定义标签库...

    JSP标签,自定义标签

    JSP标签可以分为两类:标准标签库(JSTL)和自定义标签。本教程将深入探讨JSP自定义标签的创建、使用和底层实现。 **一、JSP自定义标签概述** 自定义标签允许开发者创建自己的标签库,这些标签库可以像HTML标签一样...

    自定义标签源代码

    这个"自定义标签源代码"的学习资源应该包含了TLD文件、处理类源码以及相关的示例JSP页面,通过分析和实践这些代码,你可以更好地掌握自定义标签的运用。在压缩包`taglib`中,可能包含了这些文件,你可以解压后逐一...

    jsp中自定义标签的使用

    6. **生命周期方法**:自定义标签处理类需要实现几个关键的方法,如`doStartTag()`、`doEndTag()`、`release()`等,这些方法分别在标签开始、结束以及释放资源时被调用。 在`J2EE29_Tag`这个压缩包中,可能包含了...

    自定义标签说明例题下载

    自定义标签可以通过`java.util.ResourceBundle`类实现国际化,TLD文件中可以指定资源文件的位置,标签处理类根据当前请求的语言环境加载相应的字符串。 **八、自定义标签的错误处理** 当标签执行过程中发生异常时,...

    自定义标签库

    自定义标签库 自定义标签库是 JSP 页面...为自定义标签定义属性时,每个属性都必须按照 JavaBean 的属性命名方式,在标签处理器中定义属性名对象的 setter 方法,用来接收 JSP 页面调用自定义标签时传递进来的属性值。

Global site tag (gtag.js) - Google Analytics