<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.sitcast.com" prefix="sitcast" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用简单标签控制是否执行标签体</title>
</head>
<body>
<sitcast:demo1>
aaaaa
</sitcast:demo1>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.sitcast.com" prefix="sitcast" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用简单标签迭代标签体</title>
</head>
<body>
<sitcast:demo2>
This is my JSP page. <br>
</sitcast:demo2>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.sitcast.com" prefix="sitcast" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用简单标签修改标签体</title>
</head>
<body>
<sitcast:demo3>
aaaaaa
</sitcast:demo3>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.sitcast.com" prefix="sitcast" %>
<sitcast:demo4/>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用简单标签控制标签余下JSP是否执行</title>
</head>
<body>
aaaaaa
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.sitcast.com" prefix="sitcast" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>开发带属性的标签</title>
</head>
<body>
<%--这里date属性不能写成"1980-01-01" 因为服务器只支持8种基本类型的转换,需要用脚本表达式或者EL表达式给属性赋值 --%>
<sitcast:demo5 count="9" date="<%=new Date() %>">
aaaaaa<br />
</sitcast:demo5>
</body>
</html>
package cn.itcast.web.simpletag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
//控制标签体是否执行
public class SimpleTagDemo1 extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
/*让标签体执行
//拿到标签体对象
JspFragment jf = this.getJspBody();
//调用标签体对象的输出方法,传给它一个流,代表输出到哪里去
jf.invoke(this.getJspContext().getOut());
*/
/*
* 不让标签体执行,就不输出,或者什么都不写
*/
JspFragment jf = this.getJspBody();
}
}
package cn.itcast.web.simpletag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
//迭代标签体(控制JSP页面重复执行)
//就是拿到标签体重复输出
public class SimpleTagDemo2 extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
JspFragment jf = this.getJspBody();
for(int i=0;i<5;i++) {
//jf.invoke(this.getJspContext().getOut());
jf.invoke(null);//默认就是写给浏览器
}
}
}
package cn.itcast.web.simpletag;
import java.io.IOException;
import java.io.StringWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
//修改标签体
//invoke到缓冲区修改后再输出
public class SimpleTagDemo3 extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
//拿到标签体
JspFragment jf = this.getJspBody();
//创建带有缓冲区的Writer
StringWriter sw = new StringWriter();
//invoke到缓冲区
jf.invoke(sw);
//拿出缓冲区数据
String content = sw.toString();
//修改缓冲区数据
content = content.toUpperCase();
//输出给浏览器
this.getJspContext().getOut().write(content);
}
}
package cn.itcast.web.simpletag;
import java.io.IOException;
import java.io.StringWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.SkipPageException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
//控制标签余下jsp是否执行
//抛出SkipPageException相当于返回了SKIP_PAGE,余下的JSP就不会执行了
public class SimpleTagDemo4 extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
throw new SkipPageException();
}
}
package cn.itcast.web.simpletag;
import java.io.IOException;
import java.util.Date;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
//开发带属性的标签
//定义出属性和相应的set方法,属性值会自动传递进来,在doTag方法中直接用属性
public class SimpleTagDemo5 extends SimpleTagSupport {
//在给属性赋值的时候是字符串,设置属性的时候是int,服务器只支持8种基本类型的转换
private int count;
//在赋值8种基本类型以外的属性时,用脚本表达式赋值或者用EL表达式赋值
private Date date;
public void setDate(Date date) {
this.date = date;
}
public void setCount(int count) {
this.count = count;
}
@Override
public void doTag() throws JspException, IOException {
JspFragment jf = this.getJspBody();
this.getJspContext().getOut().write(date.toLocaleString() + "<br/>");
for(int i=0;i<count;i++) {
jf.invoke(null);
}
}
}
<?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>sitcast</short-name><!-- 描述文件的名称 -->
<uri>http://www.sitcast.com</uri><!-- 描述文件的uri -->
<tag>
<name>demo1</name>
<tag-class>cn.itcast.web.simpletag.SimpleTagDemo1</tag-class>
<!-- 简单标签有标签体,scriptless代表有标签体 ,为什么不是JSP了呢,
因为在JSP2.0以后sun公司不建议在JSP页面中写代码了,如果是JSP,
页面中可以写脚本代码 scriptless(无脚本) -->
<body-content>scriptless</body-content>
</tag>
<tag>
<name>demo2</name>
<tag-class>cn.itcast.web.simpletag.SimpleTagDemo2</tag-class>
<body-content>scriptless</body-content>
</tag>
<tag>
<name>demo3</name>
<tag-class>cn.itcast.web.simpletag.SimpleTagDemo3</tag-class>
<body-content>scriptless</body-content>
</tag>
<tag>
<name>demo4</name>
<tag-class>cn.itcast.web.simpletag.SimpleTagDemo4</tag-class>
<body-content>empty</body-content><!-- 没有标签体用empty -->
</tag>
<tag>
<name>demo5</name>
<tag-class>cn.itcast.web.simpletag.SimpleTagDemo5</tag-class>
<body-content>scriptless</body-content>
<!-- 声明属性 -->
<attribute>
<name>count</name><!-- 属性名称 -->
<required>true</required><!-- 属性是否必须 -->
<!-- 运行时表达式的值,false的话在JSP页面中给属性赋值,只能是count="9"这种形式
true的话,可以是运行时的表达式,可以用脚本表达式给属性赋值<%= %>也可以使用EL表达式给属性赋值
-->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>date</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
具体文档查看上传资源中的自定义标签文档