自定义JSP中的Taglib标签之一简单入门篇(无参数的自定义标签)

今天写了个简单的基于jsp2.0的自定义Taglib标签,JSP2规范简化了标签库的开发,在JSP2中开发标签库只需如下几个步骤:

  1. 开发自定义标签处理类;
  2. 建立一个*.tld文件,每个*.tld文件对应一个标签库,每个标签库对应多个标签;
  3. 在JSP文件中使用自定义标签。

1 开发自定义标签类
当我们在JSP页面使用一个简单的标签时,底层实际上由标签处理类提供支持,从而可以使用简单的标签来封装复杂的功能,从而使团队更好地协作开发(能让美工人员更好地参与JSP页面的开发)。
自定义标签类都必须继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,或者TagSupport除此之外,JSP自定义标签类还有如下要求。

  1. 如果标签类包含属性,每个属性都有对应的getter和setter方法。
  2. 重写doTag()或者doStartTag()或doEndTag()方法方法,这个方法负责生成页面内容。

首先介绍是不带属性的标签以HelloWorld为例:

Java代码如下:

public class HelloWorldTag extends TagSupport {

	private static final long serialVersionUID = -3382691015235241708L;
	@Override
	public int doEndTag() throws JspException {
		try {
			pageContext.getOut().write("Hello World !");
			return super.doEndTag();
		} catch (JspException e) {
			e.printStackTrace();
			return 0;
		} catch (IOException e) {
			e.printStackTrace();
			return 0;
		}
	}

	@Override
	public int doStartTag() {
		try {
			pageContext.getOut().write("Hello World");
			return super.doStartTag();
		} catch (JspException e) {
			e.printStackTrace();
			return 0;
		} catch (IOException e) {
			e.printStackTrace();
			return 0;
		}
	}
}

注意:

问题1:tagsupport中的dostartTag和doEndTag这两个方法有什么区别

doStartTag是在扫描到起始标签时调用,doEndTag是在扫描到结束标签是调用。  
  例如:<helloWorld>  helloWorld</helloWorld>  
  则jsp引擎分析到<helloWorld>   时调用doStratTag,   分析到</helloWorld>时调用doEndTag

2 建立TLD文件
TLD是Tag Library Definition的缩写,即标签库定义,文件的后缀是tld,每个TLD文件对应一个标签库,一个标签库中可包含多个标签,TLD文件也称为标签库定义文件。
标签库定义文件的根元素是taglib,它可以包含多个tag子元素,每个tag子元素都定义一个标签。通常我们可以到Web容器下复制一个标签库定义文件,并在此基础上进行修改即可。例如Tomcat6.0,在webapps\examples\WEB-INF\jsp2路径下包含了一个jsp2-example-taglib.tld文件,这就是示范用的标签库定义文件。
将该文件复制到Web应用的WEB-INF/路径,或WEB-INF的任意子路径下,并对该文件进行简单修改,修改后的helloworld.tld文件代码如下:

<?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 web-jsptaglibrary_2_0.xsd"
	version="2.0">
	<tlib-version>1.0</tlib-version>
	<short-name>myhelloworld</short-name>
	<!-- 定义该标签库的URI 必须添加但可以空-->
	<uri></uri>
		<!-- 定义第一个标签 -->
		<tag>
			<!-- 定义标签名 -->
			<name>helloWorld</name>
			<!-- 定义标签处理类 -->
			<tag-class>org.lxh.taglib.HelloWorldTag</tag-class>
			<!-- 定义标签体为空 -->
			<body-content>empty</body-content>
		</tag>
</taglib>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSP使用自定义标签可以让我们更加方便地重用一些功能组件,提高代码的可维护性和重用性。下面是使用自定义标签的步骤: 1. 创建一个标签处理器类,该类必须继承 javax.servlet.jsp.tagext.SimpleTagSupport 类,并且实现 doTag() 方法。doTag() 方法是自定义标签的核心处理方法,它会被 JSP 引擎在页面解析时自动调用。 2. 在 WEB-INF 目录下创建 tld 文件,该文件是自定义标签的描述文件,用于告诉 JSP 引擎如何使用自定义标签。tld 文件必须符合标准的 TLD(Tag Library Descriptor)格式。 3. 在 JSP 页面引入自定义标签库。例如,如果我们的标签库名为 mytaglib,那么可以在 JSP 页面使用以下代码引入标签库: <%@ taglib prefix="my" uri="/WEB-INF/mytaglib.tld" %> 4. 在 JSP 页面使用自定义标签。例如,如果我们的标签名为 mytag,那么可以在 JSP 页面使用以下代码调用自定义标签: <my:mytag /> 需要注意的是,使用自定义标签前需要先编译标签处理器类,并且将编译后的 class 文件放在 WEB-INF/classes 目录下。 下面是一个简单的例子,演示如何在 JSP 使用自定义标签: 1. 创建标签处理器类 MyTagHandler.java: ``` package com.example; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class MyTagHandler extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { getJspContext().getOut().write("Hello, world!"); } } ``` 2. 创建标签描述文件 mytaglib.tld: ``` <?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/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <short-name>mytaglib</short-name> <uri>/WEB-INF/mytaglib.tld</uri> <tag> <name>mytag</name> <tag-class>com.example.MyTagHandler</tag-class> </tag> </taglib> ``` 3. 在 JSP 页面引入标签库并使用自定义标签: ``` <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="my" uri="/WEB-INF/mytaglib.tld" %> <html> <head> <title>MyTag Test</title> </head> <body> <my:mytag /> </body> </html> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值