javaweb之自定义标签——简单标签库

<%@ 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>

具体文档查看上传资源中的自定义标签文档  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值