1、标签的作用
自定义标签是属于JSP规范的。
开发原则:JSP中不要使用<%%>(标签替换)和<%=%>(EL表达式)
自定义标签的作用:替换掉JSP中的JSP脚本(<%%>),实现一些简单的逻辑运算。
2、标签的开发步骤
a、编写一个类,实现一个接口javax.servlet.jsp.tagext.SimpleTag.或者继承javax.servlet.jsp.tagext.SimpleTagSupport。
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
//继承 SimpleTagSupport
public class GetCurrentTime extends SimpleTagSupport {
@Override
//实现 dotag方法
public void doTag() throws JspException, IOException {
// TODO Auto-generated method stub
super.doTag();
Date now = new Date();
DateFormat formate = new SimpleDateFormat();
String str = formate.format(now);
//获取content
PageContext content = (PageContext)getJspContext();
//输出
content.getOut().write(str);
}
}
b、在WEB-INF目录下,建立一个扩展名为tld(Tag Libary
Definition)的xml文件。
注:tld如果在WEB-INF或者在jar包的META-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 exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version>
<short-name>名字</short-name>
<uri>http://www.jiangjianli.com/Demo1</uri>
<tag>
//description否用于指定属性的描述信息。
<description>demo1</description>
//name 必须有 用于指定属性的名称。属性名称是大小写敏感的,并且不能以jsp、_jsp、java和sun开头。
<name></name>
//完整类名
<tag-class></tag-class>
//•empty:没有标签体
//scriptless:标签体可以包含el表达式和JSP动作元素,但不能包含JSP的脚本元素 <前缀名:tagname></前缀名:tagname> 这种方式调用
//如果是empty 在JSP可<前缀名:tagname/>调用
<body-content>scriptless</body-content>
<attribute>//标签中有参数是需配置参数名
<name></name>
<required>true</required>
//是否支持el表达式
<rtexprvalue>true</rtexprvalue>
</attribtue>
</tag>
在标签调用时传递了内容如<demo:demo1>abcdef</demo:demo1>将会调用setJspBody方法
/*. 若存在标签体, JSP 引擎将把标签体封装成一个 JspFragment
对象,调用setJspBody方法将JspFragment对象传递给标
签处理器对象。若标签体为空,这setJspBody将不会被
JSP引擎调用
*/
可以通过在dotag方法中通过下面代码获取到内容
StringWriter sw = new StringWriter();
//将内容写到SW中
getJspBody().invoke(sw);
//转换为字符串
String str = sw.getBuffer().toString();
//输出到浏览器
PageContext page = (PageContext)getJspContext();
page.getOut().write(str);
网友评论