`
ttitfly
  • 浏览: 620324 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

自定义标签调用资源文件

    博客分类:
  • java
阅读更多
自定义标签处理类一般都继承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,内容为:
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里引用
<%@ 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>



输出内容为:
tagTitle
tagContent
分享到:
评论

相关推荐

    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`为扩展名。而标签...

    jQuery自定义标签添加删除代码.zip

    本资源"jQuery自定义标签添加删除代码.zip"提供了一个简单的解决方案,用于在网页中实现自定义标签的动态添加与删除功能,这在诸如博客、论坛或者内容管理系统中非常常见。 在网页开发中,用户交互性是提升用户体验...

    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文件中可以指定资源文件的位置,标签处理类根据当前请求的语言环境加载相应的字符串。 **八、自定义标签的错误处理** 当标签执行过程中发生异常时,...

Global site tag (gtag.js) - Google Analytics