JSP Tag

        从jsp1.1开始就可以在jsp页面中使用自定义标签了,使用自定义标签不但可以实现代码重用,而且可以使jsp代码更简洁。Jsp2.0的标签扩展API中又增加了SimpleTag接口和其实现类SimpleTagSupport。

        标签扩展API层次结构:


JSP Tag
 

实例: 编写一个tag按格式输出时间:

1.CommonTag.java

package com.example.tag;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;

import com.mysql.jdbc.StringUtils;

public class CommonTag extends SimpleTagSupport{
	
	private String format;
	private String date;
	
	@Override
	public void doTag()  throws JspException, java.io.IOException{
		if(StringUtils.isNullOrEmpty(format))			
			format="yyyy-MM-dd";
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		
		Date now = new Date();
		if(!StringUtils.isNullOrEmpty(date))
		{
			try {
				DateFormat df = DateFormat.getDateInstance();
				now = df.parse(date);
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}

		PageContext pc = (PageContext)getJspContext();
		JspWriter out = pc.getOut();
		out.write(sdf.format(now));
	}

	public void setFormat(String format) {
		this.format = format;
	}

	public void setDate(String date) {
		this.date = date;
	}

}

2.commonTag.tld 放到WEB-INF目录下

<?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">   
	<tlib-version>1.1</tlib-version>  
	<short-name>commontag</short-name>   
	<uri>http://www.example.com/mytag</uri>  
	<tag>  
		<name>date</name>
		<tag-class>com.example.tag.CommonTag</tag-class>		   
		<body-content>empty</body-content>   
		<attribute>
			<name>date</name>
			<required>false</required>
		</attribute>
		<attribute>
			<name>format</name>
			<required>false</required>
		</attribute>
	</tag> 
</taglib>

 <注> tld中的一些属性:

body-content
此标签的主体部分的内容。其值可为 JSP\scriptless\tagdependent\empty,默认为empty.

attribute -> rtexprvalue
表示属性是否可以接受一个jsp表达式<%= %>的值,默认false

attribute -> type  
当rtexprvalue为true时,指定JSP表达式放回的类型,默认String。

3. 在JSP中使用Tag

<%@taglib  prefix="commontag"  uri="http://www.example.com/mytag"%>
...
<commontag:date date="2017-02-8" format="yyyy/MM/dd"/>

 TagSupport 执行逻辑:
JSP Tag
 

BodyTagSupport的执行逻辑:
JSP Tag
 

标记库打包

1. 先把class文件和tld文件按如下路径组织好:

    tag文件夹

                   |

                   |--------class 文件

                   |--------META-INF文件夹

                                                             |

                                                             |------------tld文件

2. 进入tag文件夹 所在目录,执行命令 jar  -cvf  mytag.jar *

3. 使用时只需将mytag.jar 复制到WEB-INF/lib 目录下

常用开源JSP tag 库

--JSTL

--Display tag

jsp

相关推荐