Jsp简单标签库开发

Jsp简单标签库开发,是指从Jsp2.0开始,使用SimpleTag接口所开发的标签。大大简化了标签开发的工作。

1、Jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%--引用标签库 --%>
<%@taglib uri="http://localhost:8080/st" prefix="st" %>

//2、控制Jsp页面是否执行<br />
//写demo时,共用一个标签类冲突,注释了<br />
<%--<st:ctPage/>--%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP简单标签开发</title>
</head>
<body>
	<br />
	<br />
	<br />
	//1、控制标签内包含的内容是否执行[start]<br />
	//写demo时,共用一个标签类冲突,注释了<br />
	<%--<st:viewContent>
		看我有没有显示<br />
	</st:viewContent>--%>
	//1、控制标签内包含的内容是否执行[end]<br />
	<br />
	<br />
	<br />
	
	//3、循环输出标签内容[start]<br />
	//写demo时,共用一个标签类冲突,注释了<br />
	<%--<st:forContent>
		重复输出5次<br />
	</st:forContent>--%>
	//3、循环输出标签内容[end]<br />
	<br />
	<br />
	<br />
	
	//4、操作标签内容[start]<br />
	<st:opContent>
		Hello World!
	</st:opContent><br />
	//3、操作标签内容[end]<br />
	<br />
	<br />
	<br />
</body>
</html>

2、标签实现类

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;

public class MySimpleTag extends SimpleTagSupport
{
    @Override
    public void doTag() throws JspException, IOException
    {
        //doTag1();
        //doTag2();
        //doTag3();
        
        //1、获取Jsp标签内容所对应的JspFragment对象
        JspFragment jf= this.getJspBody();
        //2、实例化一个StringWriter对象,并将标签内容写入到此对象中
        StringWriter sw = new StringWriter();
        jf.invoke(sw);
        //3、将获取的标签内容 编辑后输出到Jsp页面
        String content = sw.toString();
        this.getJspContext().getOut().write(content + "@Yes!");
        
    }

    private void doTag1() throws JspException, IOException
    {
        /*
         * 1、是否执行标签体内容
         * 如果不执行标签内容 则将jf.invoke(null)注释即可
         */
        JspFragment jf = this.getJspBody();
        jf.invoke(null); //null默认写到Jsp页面,也可以写成jf.invoke(this.getJspContext().getOut());
    }
    
    private void doTag2() throws SkipPageException
    {
        /*
         * 2、是否执行Jsp页面内容
         * 如果不执行Jsp页面 则抛出SkipPageException异常
         * 如果不抛出异常则执行Jsp页面内容
         */
        //throw new SkipPageException();
    }
    
    private void doTag3() throws JspException, IOException
    {
        /*
         * 3、循环输出标签内容
         */
        JspFragment jf = this.getJspBody();
        for(int i = 0; i < 5; i++)
        {
            jf.invoke(null);
        }
    }
}

3、tld文件

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
        "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>st</short-name>
  <uri>http://localhost:8080/st</uri>

  <tag>
    <name>viewContent</name>
    <tag-class>com.xuhu.web.tag.MySimpleTag</tag-class>
    <description>控制标签体是否执行</description>
    <!-- 注意此处和传统标签的JSP不同,简单标签需要写成scriptless -->
    <body-content>scriptless</body-content>
  </tag>
  
  <tag>
    <name>ctPage</name>
    <tag-class>com.xuhu.web.tag.MySimpleTag</tag-class>
    <description>控制Jsp页面是否执行</description>
    <!-- 注意此处无标签体 -->
    <body-content>empty</body-content>
  </tag>
  
  <tag>
    <name>forContent</name>
    <tag-class>com.xuhu.web.tag.MySimpleTag</tag-class>
    <description>循环输出标签内容</description>
    <!-- 注意此处和传统标签的JSP不同,简单标签需要写成scriptless -->
    <body-content>scriptless</body-content>
  </tag>
  
  <tag>
    <name>opContent</name>
    <tag-class>com.xuhu.web.tag.MySimpleTag</tag-class>
    <description>操作标签内容</description>
    <!-- 注意此处和传统标签的JSP不同,简单标签需要写成scriptless -->
    <body-content>scriptless</body-content>
  </tag>
  
  </taglib>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值