【自己定义标签开发】04-简单标签库功能具体解释

我们回想一下jsp的Tag自己定义标签技术

我们的SimpleTag接口能够实现左边3种接口的功能。

这个接口的默认实现类是SimpleSupport。

接口中的方法有:

doTag()//标签開始和结束都是在这种方法中定义。标签体是setJspBody方法中的JspFragment对象。

能够抛出SkipPageException。就相当于返回了“SKIP_PAGE”。余下的jsp内容就不再运行了。

getParent()//得到父标签对象

setJspBody(JspFragment jspBody)//server在调用你的标签前。会将标签作为一个JspFragment对象传送过来。

setJspContext(JspContext pc)//获得JspContext(JspContext继承了PageContext)

setParent()//设置父标签对象

我们以下举一些样例来測试。

1.隐藏页面信息

我们仍然要借助标签来隐藏我们的页面信息:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/simpleTag" prefix="zyg2" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>用简单标签控制是否运行标签体</title>
  </head>

  <body>

     <zyg2:heddin>
         Helloworld。
     </zyg2:heddin>
  </body>

</html>

着手使用SimpleTag来实现这个<zyg2:heddin>标签。首先创建该标签类。继承了SimpleTagSupport:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

接下来实现doTag()方法:

package org.zyg.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 HeddinSimpleTag extends SimpleTagSupport {

	@Override
	public void doTag() throws JspException, IOException {
		JspFragment jf=this.getJspBody();//拿到标签体对象
		jf.invoke(this.getJspContext().getOut());//控制标签体运行:输出标签体

	}
}

我们这里选择了先输出标签体。

然后在WEB-INF下的lib目录中创建zygSimple.tld文件,并注冊标签:

<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>2.0</tlib-version>
    <short-name>zyg2</short-name>
    <uri>h/simpleTag</uri><!-- 标签绑定的uri。用于引入 -->

    <tag>
        <name>heddin</name><!-- 标签名 -->
		<tag-class>org.zyg.web.simpletag.HeddinSimpleTag</tag-class>
		<body-content>scriptless</body-content><!-- 有无标签体(单标签还是成对标签) -->
    </tag>

</taglib>

我们重新启动Webproject,測试页面:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

这是能够看到标签体内容的。

假设不想显示的话。更简单,获得标签体的时候什么也不做即可了:

package org.zyg.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 HeddinSimpleTag extends SimpleTagSupport {

	@Override
	public void doTag() throws JspException, IOException {
		JspFragment jf=this.getJspBody();//拿到标签体对象
	}
}

重新启动Web项目測试,訪问后发现信息不见了:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

简单Tag就是那么简单o(^▽^)o

2.用简单标签迭代标签体

我们让“嘻嘻嘻。好犀利(*^__^*)”运行5遍

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/simpleTag" prefix="zyg2" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>用简单标签循环标签体</title>
  </head>

  <body>

     <zyg2:repeat>
        嘻嘻嘻,好犀利(*^__^*) <br/>
     </zyg2:repeat>
  </body>

</html>

然后创建并标签类:

package org.zyg.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 RepeatSimpleTag 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());
		}
	}
}

然后在zygSimple.tld中注冊这个标签:

<tag>
    <name>repeat</name><!-- 标签名 -->
	<tag-class>org.zyg.web.simpletag.RepeatSimpleTag</tag-class>
	<body-content>scriptless</body-content><!-- 有无标签体(单标签还是成对标签) -->
</tag>

重新启动Webproject測试:

測试成功。

3.用简单标签改动标签体

让标签体文字变大写:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/simpleTag" prefix="zyg2" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>用简单标签循环标签体</title>
  </head>

  <body>

     <zyg2:upper>
       	   abcdefg <br/>
     </zyg2:upper>
  </body>

</html>

以下来实现<zyg2:upper>标签。

创建并编辑标签处理类:

package org.zyg.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;

//改动标签体
public class UpperSimpleTag extends SimpleTagSupport {

	@Override
	public void doTag() throws JspException, IOException {
		JspFragment jf=this.getJspBody();//拿到标签体对象
		StringWriter sw=new StringWriter();
		jf.invoke(sw);//运行一个带缓冲的Writer

		String content=sw.toString();//获得标签体的内容
		content = content.toUpperCase();//将内容变为大写

		this.getJspContext().getOut().write(content);
	}

}

然后在zygSimple.tld中注冊这个标签:

<tag>
    <name>upper</name><!-- 标签名 -->
    <tag-class>org.zyg.web.simpletag.UpperSimpleTag</tag-class>
    <body-content>scriptless</body-content><!-- 有无标签体(单标签还是成对标签) -->
</tag>

重新启动Webproject測试:

測试成功!

4.用简单标签控制jsp页面的显示

前端标签效果:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/simpleTag" prefix="zyg2" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>用简单标签控制jsp页面的显示</title>
  </head>

  <zyg2:heddinPage/>

  <body> 

  	  Hello ! 

  </body>

</html>

以下来实现<zyg2:heddinPage/>标签。

创建并编辑标签处理类:

package org.zyg.web.simpletag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.SkipPageException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

//控制标签余下的jsp不运行
public class HeddinPageSimpleTag extends SimpleTagSupport {

	@Override
	public void doTag() throws JspException, IOException {
		//仅仅要这个异常抛给jsp。该标签以下的jsp代码就不会运行
		throw new SkipPageException();
	}

}

然后在zygSimple.tld中注冊这个标签:

<tag>
    <name>heddinPage</name><!-- 标签名 -->
    <tag-class>org.zyg.web.simpletag.HeddinPageSimpleTag</tag-class>
    <body-content>empty</body-content><!-- 有无标签体(单标签还是成对标签) -->
</tag>

重新启动Webproject測试:

能够看到</head>之后的代码没有显示,測试成功!

最后总结一下简单标签的运行流程:

转载请注明出处:http://blog.csdn.net/acmman/article/details/51093287

时间: 2024-10-21 00:22:25

【自己定义标签开发】04-简单标签库功能具体解释的相关文章

自定义标签库开发(简单标签开发)

实现Tag接口,BodyTag接口,IterationTag接口的标签开发技术一般称为传统标签开发技术. 实现SimpleTag接口的标签开发技术,一般称为简单标签开发技术. JSP2.0里新增了SimpleTag. 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编写和调用的SimpleTag接口来实现标签的功能.实现SimpleTag接口的标签通常称为简单标签.简单标签共定义了5

django+sae微信开发-简单的鹦鹉学舌功能

转自个人博客:http://ningning.today/2015/02/09/python/django-sae%E5%BE%AE%E4%BF%A1%E5%BC%80%E5%8F%91%EF%BC%8D%E7%AE%80%E5%8D%95%E7%9A%84%E9%B9%A6%E9%B9%89%E5%AD%A6%E8%88%8C%E5%8A%9F%E8%83%BD/ 网上已经有一些优秀的教程了,但是大多数基于web.py,最近学了点django,就用django写个简单的demo. 准备工作 基

iOS开发 -- 实现简单的定位功能

一.定位的说明 现在的应用很多都拥有定位功能.确实,定位功能是很好用的,对我们的生活也有很大的帮助.例如帮你找酒店,找银行等等... 要实现定位有三种方式:   1. 手机基站:(依赖于手机机战(信号塔)的密集程度)  2. GPS:卫星定位,精确度高,但是费电     3. WIFI:根据上网的IP地址,(必须要能上网) 而我们开发中一般都是用GPS定位比较多,我们要实现定位需要用到CoreLocation框架,CoreLocation中主要包含了定位.地理编码(包括反编码)功能. 在iOS8

JSP简单标签标签库开发

1.定制标签的实现类称为标签处理器,简单标签处理器指实现SimpleTag接口的类,如下图的SimpleTagSupport类,该类为SimpleTag接口的默认实现类. 注:不要直接实现SimpleTag接口,应该继承SimpleTagSupport类,可以直接使用该类已经实现的方法,若该类方法不能满足业务需求,可重写相应方法. . 2.SimpleTag接口定义了5个方法: setJspContext方法 setParent和getParent方法 setJspBody方法 doTag方法(

javaweb学习总结(二十五)——jsp简单标签开发(一)

一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编写和调用的SimpleTag接口来实现标签的功能. 实现SimpleTag接口的标签通常称为简单标签.简单标签共定义了5个方法: setJspContext方法 setParent和getParent方法 setJspBody方法 doTag方法(非常重要),简单标签使用这个方法就可以完成所有的业务

javaweb学习总结(二十七)——jsp简单标签开发案例和打包

一.开发标签库 1.1.开发防盗链标签 1.编写标签处理器类:RefererTag.java 1 package me.gacl.web.simpletag; 2 3 import java.io.IOException; 4 import javax.servlet.http.HttpServletRequest; 5 import javax.servlet.http.HttpServletResponse; 6 import javax.servlet.jsp.JspException;

深入分析JavaWeb Item25 -- 自定义标签开发案例和打包自定义标签库

一.开发标签库案例 1.1.开发防盗链标签 1.编写标签处理器类:RefererTag.java package me.gacl.web.simpletag; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import jav

JSP简单标签开发(1)

一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编写和调用的SimpleTag接口来实现标签的功能. 实现SimpleTag接口的标签通常称为简单标签.简单标签共定义了5个方法: setJspContext方法 setParent和getParent方法 setJspBody方法 doTag方法(非常重要),简单标签使用这个方法就可以完成所有的业务

javaweb学习总结(十一)——自定义标签开发库

一.自定义标签开发库简介: Tag接口的方法:   二.自定义标签入门:输出客户机ip 1.编写一个实现tag接口的java类 ViewIPTag.java 1 package com.web.tag; 2 3 import java.io.IOException; 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.jsp.JspException; 7 import javax.servlet.js