JSTL语法使用时,需要导入jstl.1.2包,通过引用包中的标签实现具体的语法。可以仿照其中的标签自定义一些特殊功能的标签,例如定义输出系统时间的标签。
1、创建tld文件,文件名自己定义尽量简洁,文件以tld结尾,例如:k.tld
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<description>My tag library</description>
<display-name>My JSTL core</display-name>
<tlib-version>3.2</tlib-version>
<!--下面一项前缀和文件名相同,前面三项自己定义-->
<short-name>k</short-name>
<!--uri地址自己定义-->
<uri>/my-tag</uri>
<!--下面几项格式是套路,逐一填写-->
<tag>
<description>标签描述</description>
<name>sysdate</name>
<!--标签类,包名.类名-->
<tag-class>web.SysDateTag</tag-class>
<!--双标签中的内容,如果是单标签,则是empty-->
<body-content>empty</body-content>
<attribute>
<description>属性格式></description>
<name>format</name>
<!-- 是否必须输入 -->
<required>true</required>
<!-- 是否允许EL表达式输入 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
2、创建类
package web;
import java.io.IOException;
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;
public class SysDateTag extends SimpleTagSupport {
//给方法传入参数,该变量与标签里面的属性名一致
private String format;
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
@Override
public void doTag() throws JspException, IOException {
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat(format);
String time=sdf.format(date);
// 输出时间,该方法声明返回值类型是JspContext,
// 而实现方法时的实际类型是PageContext,PageContext extends JspContext
PageContext ctx=(PageContext)getJspContext();
JspWriter out=ctx.getOut();
out.println(time);
// 此处不能关闭流,因为其他标签也要使用,Tomcat会自动关闭
}
}
3、写jsp文件
<%@ page pageEncoding="utf-8" %>
<!--使用taglib指令,prefix是标签文件的前缀-->
<%@taglib uri="/my-tag" prefix="k" %>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>自定义标签输出当前时间</title>
</head>
<body>
<h1>自定义标签输出当前时间</h1>
<p>
<!--sysdate是自定义标签中的标签名-->
<k:sysdate format="yyyy-MM-dd HH:mm:ss"/>
</p>
</html>