JSP Tag
从jsp1.1开始就可以在jsp页面中使用自定义标签了,使用自定义标签不但可以实现代码重用,而且可以使jsp代码更简洁。Jsp2.0的标签扩展API中又增加了SimpleTag接口和其实现类SimpleTagSupport。
标签扩展API层次结构:
实例: 编写一个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 执行逻辑:
BodyTagSupport的执行逻辑:
标记库打包
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