在J2EE开发中,标签是一个很重要的内容,自2001年诞生后就将那混杂的代码的进行分离,形成多层的结构。彻底将页面与开发人员分开。
本例基于学习的目的,让大家体验一下自定义标签的实现过程,follow me,go :~
一、步骤及目录结构
2、编写*.tld文件,放置于WEB-INF目录或子目录下
二、示例程序
/**
* copyright reserved,zhangym 2008
*/
package org.zym.tags;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
/**
* 通过给定的日期字符串,根据指定的格式进行日期时间的格式化.<br>
* <ul>
* <li>完全指定属性:<util:datetime date="1978-03-28 20:58:58 " pattern="yyyy年MM月dd日 hh:mm:ss"/>,输出结果为:yyyy年MM月dd日 hh:mm:ss
* <li>取系统时间:<util:datetime />,输出内容为:yyyy-MM-dd hh:mm:ss
* </ul>
* @param pattern 格式化日期时间的字符串,如 "yyyy-MM-dd hh:mm:ss" .
* @param dateString 时间字符串,为空则为系统当前时间
* @return 按要求格式化的日期时间字符串
* @author zhangym <br>
*/
public class DateTimeTag extends TagSupport {
private static final long serialVersionUID = -2132806052574019882L;
private String pattern = "yyyy-MM-dd hh:mm:ss"; //时间日期格式字符串
private String dateStr; //时间日期字符串属性
private Date date;
public void setPattern(String pattern) {
this.pattern = pattern;
}
public void setDate(String dateStr) {
this.dateStr = dateStr;
}
@Override
public int doEndTag() throws JspTagException{
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
SimpleDateFormat sdfi = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
if(dateStr == null){
date = new Date();
}else
{
try {
date = sdfi.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
}
JspWriter out = pageContext.getOut();
try {
out.println(sdf.format(date));
} catch (IOException e) {
e.printStackTrace();
}
//继续计算页面
return EVAL_PAGE;
}
}
2)编写.tld文件,命名为util.tld,放在目录WEB-INF下面的tlds文件夹下,其实名此文件的名称和在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"> <description>A tag library SimpleTag handlers.</description> <tlib-version>1.0</tlib-version> <short-name>util</short-name> <uri>/util/tags</uri> <tag> <description>Outputs date time</description> <name>datetime</name> <tag-class>org.zym.tags.DateTimeTag</tag-class> <body-content>empty</body-content> <attribute> <name>date</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>pattern</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> </taglib>
3)在页面中使用标签
需在页面中进行引用,此引用的信息是在tld文件中进行了规定的,如prefix=”util”和uri=”/util/tags”
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/util/tags" prefix="util" %>
<html>
<head>
<title>自定义标签</title>
</head>
<body>
指定时间:<util:datetime date="1978-03-28 20:58:58 " pattern="yyyy年MM月dd日 hh:mm:ss"/>
<hr/>
当前日期:<util:datetime pattern="yyyy-MM-dd"/>
<hr/>
当前时间:<util:datetime />
<hr/>
</body>
</html>
三、标签类打包
在完成了标签类之后,交给网页开发人员进行使用时,我们应该尽量让其使用简单,并透明。打包需要两个步骤:
1) 整理文件并规划目录
a)将项目目录下的WEB-INF目录下的classes下的包及编译好的标签类复制出来,放在一个临时目录下
b)在临时目录下,创建一个META-INF目录,将util.tld文件复制到其下
2) 进入目录下,使用jar命令进行打包,命令如下:
F:\util\> jar -cvf util.jar *
解释:将此目录下的所有文件打包util.jar文件
四、自定义标签jar包使用
将其放于WEB-INF目录下的lib目录中,就可以了。跟使用JSP的其他标签一样,只要在JSP页面中正常引用就可以。