JSP2.0中为了简化标签的复杂性,增加了制作Simple Tag的标签类SimpleTagSupport类。
SimpleTagSupport类是实现SimpleTag接口的。它只需要实现一个doTag()方法即可,而不需要一堆回传值。

举例说明:
例1:HelloSimpleTag标签
第一步:制作标签处理类
HelloSimpleTag.java

package com.newould.taglib;

import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class HelloSimpleTag extends SimpleTagSupport {

public void doTag() throws JspException, IOException {
  
      JspWriter out = getJspContext().getOut();
      out.println("Hello Simple Tag");
}
}

第二步:编写标签性质文件
MyTaglib.tld

<?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 web-jsptaglibrary_2_0.xsd"
       version="2.0">
    
       <description>My Taglib by JavaWorld.com.tw</description>
       <tlib-version>1.0</tlib-version>
       <jsp-version>2.0</jsp-version>
       <short-name>Mytaglib</short-name>
       <uri></uri>
......

<tag>
         <description>Hello Simple Tag</description>
         <name>HelloSimpleTag</name>
         <tag-class>com.newould.taglib.HelloSimpleTag</tag-class>
         <body-content>empty</body-content>
       </tag>
</taglib>

第三步:编写Jsp网页
HelloSimpleTag.jsp

<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib uri="/WEB-INF/tlds/MyTaglib.tld" prefix="mytag" %>

<html>
<head>
<title>HelloSimpleTag.jsp</title>
</head>
<body>

<h2>Simple Tag 标签</h2>

<h1><mytag:HelloSimpleTag /></h1>

</body>
</html>

=================================================================

例2:AddSimpleTag标签
第一步:制作标签处理类
AddSimpleTag.java

package com.newould.taglib;

import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class AddSimpleTag extends SimpleTagSupport {

private int num1 = 0;
private int num2 = 0;

public void setNum1(int num1) {
      this.num1 = num1;
}

public void setNum2(int num2) {
      this.num2 = num2;
}

public void doTag() throws JspException, IOException {

JspContext ctx = getJspContext();
      JspWriter out = ctx.getOut();
   
      int sum = num1 + num2;
      ctx.setAttribute("sum", Integer.toString(sum));
  
      out.println(num1 + " + " + num2 + " = " + sum);
}
}

第二步:编写标签性质文件
MyTaglib.tld

<?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 web-jsptaglibrary_2_0.xsd"
       version="2.0">
    
       <description>My Taglib by JavaWorld.com.tw</description>
       <tlib-version>1.0</tlib-version>
       <jsp-version>2.0</jsp-version>
       <short-name>Mytaglib</short-name>
       <uri></uri>
......

<tag>
         <description>Add Simple Tag</description>
         <name>Add</name>
         <tag-class>com.newould.taglib.AddSimpleTag</tag-class>
         <body-content>empty</body-content>
      
         <attribute>
           <name>num1</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
         </attribute>

<attribute>
           <name>num2</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
         </attribute>
            
       </tag>
   
</taglib>

第三步:编写Jsp网页
AddSimpleTag.jsp

%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib uri="/WEB-INF/tlds/MyTaglib.tld" prefix="mytag" %>

<html>
<head>
<title>AddSimpleTag.jsp</title>
</head>
<body>

<h2>AddSimpleTag 标签</h2>

<h1><mytag:Add num1="5" num2="9" /></h1>

最后结果:${sum}

</body>
</html>

=================================================================

例3 RepeatSimpleTag标签
RepeatSimpleTag标签 主要是用来重复显示某段文字。
这个例子在处理上与前两个例子有点不同

第一步:制作标签处理类
RepeatSimpleTag.java

package com.newould.taglib;

import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class RepeatSimpleTag extends SimpleTagSupport {

private int count = 0;//重复的次数
private JspFragment fragment;//重复的内容

public void setCount(int count) {
      this.count = count;
}

public void setFragment(JspFragment fragment) {
      this.fragment = fragment;
}

public void doTag() throws JspException, IOException {

JspContext ctx = getJspContext();
      JspWriter out = ctx.getOut();
   
      for(int i=0 ; i<count ; i++) {
       fragment.invoke(null);//表示将fragment的内容显示出来
      }
}
}

第二步:编写标签性质文件
MyTaglib.tld

<?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 web-jsptaglibrary_2_0.xsd"
       version="2.0">
    
       <description>My Taglib by JavaWorld.com.tw</description>
       <tlib-version>1.0</tlib-version>
       <jsp-version>2.0</jsp-version>
       <short-name>Mytaglib</short-name>
       <uri></uri>
......

<tag>
         <description>Repeate Simple Tag</description>
         <name>Repeat</name>
         <tag-class>com.newould.taglib.RepeatSimpleTag</tag-class>
         <body-content>empty</body-content>
      
         <attribute>
           <name>count</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
         </attribute>

<attribute>
           <name>fragment</name>
           <required>true</required>
           <fragment>true</fragment>
         </attribute>
       </tag>    
   
</taglib>

注意:<fragment>true</fragment>,一定要这样设定fragment属性。

第三步:编写Jsp网页
RepeatSimpleTag.jsp

<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib uri="/WEB-INF/tlds/MyTaglib.tld" prefix="mytag" %>

<html>
<head>
<title>RepeatSimpleTag.jsp</title>
</head>
<body>

<h2>RepeatSimpleTag 标签</h2>

<mytag:Repeat count="5" >
<jsp:attribute name="fragment">
重复执行 ....<br>
</jsp:attribute>
</mytag:Repeat>
</body>
</html>

=================================================================

DynamicAttributes接口
只要制作的标签实现了DynamicAttributes接口就有动态属性的功能。
例如:我们要做多个数的累加运算,则AddSimpleTag标签就可以通过实现DynamicAttributes接口就可以实现了.

实现DynamicAttributes接口,必须实现setDynamicAttributes()方法,此方法用来接收动态属性.

举例:第一步:制作标签处理类

package com.newould.taglib;

import java.io.*;
import java.util.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class DynamicAdd extends SimpleTagSupport implements DynamicAttributes {

//用来接收动态属性
private ArrayList keys = new ArrayList();
private ArrayList values = new ArrayList();

public void doTag() throws JspException, IOException {

JspContext ctx = getJspContext();
      JspWriter out = ctx.getOut();
   
      float num = 0;
      float sum = Float.parseFloat((String)values.get(0));
      out.print(sum);
   
      for (int i = 1 ; i < keys.size() ; i++) {
       String temp = (String)values.get(i);
       num = Float.parseFloat(temp);
       sum = sum + num;
       out.print(" + " + num);
      }
   
      out.print(" = " + sum);
      ctx.setAttribute("sum", Float.toString(sum));
   
}

public void setDynamicAttribute(String uri, String name, Object value) throws JspException {
      keys.add(name);
      values.add(value);
}
}

第二步:编写标签性质文件
<tag>
         <description>DynamicAttribute</description>
         <name>DynAdd</name>
         <tag-class>com.newould.taglib.DynamicAdd</tag-class>
         <body-content>empty</body-content>

<dynamic-attributes>true</dynamic-attributes>
       </tag>

第三步:编写Jsp网页
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="JSPBook" tagdir="/WEB-INF/tags/" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
<title>CH16 - DynAdd.jsp</title>
</head>
<body>

<h2>Tag File 范例</h2>

<JSPBook:DynAdd num1="111" num2="222" num3="444" >

<jsp:attribute name="great">
      <font color="red">SUM:${sum} ...</red>
</jsp:attribute>
<jsp:attribute name="less">
      <font color="blue">SUM:${sum} ...</red>
</jsp:attribute>
</JSPBook:DynAdd>

</body>
</html>
JSP2.0中为了简化标签的复杂性,增加了制作Simple Tag的标签类SimpleTagSupport类。
SimpleTagSupport类是实现SimpleTag接口的。它只需要实现一个doTag()方法即可,而不需要一堆回传值。

转载于:https://www.cnblogs.com/jadmin/archive/2007/08/14/2206335.html

JSP2.0中Simple Tag介绍相关推荐

  1. JSP2.0中的表达式语言(EL表达式)

    转载自   JSP2.0中的表达式语言(EL表达式) EL语法 EL的语法很简单,他最大的特点就是使用上很方便  例:  ${sessionScope.user.sex}  所有EL都是以${ 为起始 ...

  2. 在JSP2.0中使用EL表达式语言

    EL(表达式语言)是一种数据访问语言,可以方便地访问和处理应用程序数据,而无需使用scriptlet或者请求时(request-time)表达式的值.(不需要使用< % 和%>来获得数据, ...

  3. net应用程序中发生了未经处理的异常怎么办_介绍一些在.NET Core 3.0中引入的诊断改进工具...

    编者按:即使.NET Core3.1.5已经发布,在进行.NET Core的性能诊断时,我们有时依然不知该从何处下手,那这篇介绍.NET Core3.0中引入的诊断工具,或许能为我们提供参考. 在.N ...

  4. 在Struts 2.0中国际化(i18n)您的应用程序

    国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能. 其实,Struts 1.x在此部分已经做得相当不错了.它极大地简化了我们程序员在做国际化时所需的工作,例如 ...

  5. 转换器(Converter)Struts 2.0中的魔术师

    转换器(Converter)--Struts 2.0中的魔术师  在我已往的Struts 1.x项目经验中,有个问题不时的出现--在创建FormBean时,对于某个属性到底应该用String还是其它类 ...

  6. 转换器(Converter)—Struts 2.0中的魔术师

    本系列文章导航 为Struts 2.0做好准备 Struts 2的基石--拦截器(Interceptor) 常用的Struts 2.0的标志(Tag)介绍 在Struts 2.0中国际化(i18n)您 ...

  7. .Net 2.0 中的发送邮件实现小解(轉)

    记得原来在.Net 1.X中编写发送邮件的代码是使用操作系统的CDO组件中的CDO.Message来来实现的,因为这个里面可以实现SMTP服务器认证等一序列的发送邮件的详细功能,不过不管是什么错误都会 ...

  8. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  9. JSP1.0\JSP2.0 区别

    JSP2.0较JSP1.0新增功能如下: (1)Expression Language; (2)新增Simple Tag和Tag File; (3)web.xml新增<jsp-config> ...

最新文章

  1. JDBC数据源连接池(1)---DBCP
  2. 人群行为分析--Understanding Pedestrian Behaviors from Stationary Crowd Groups
  3. 隐藏1:N关系和工具
  4. 【数据结构与算法】【算法思想】拓扑排序
  5. Eclipse中使用Junit编写测试用例
  6. 【Oracle】表级别分区操作对索引(本地分区索引,全局分区索引,非分区索引)的影响
  7. java基础核心总结归纳---参考手册
  8. Photoshop CS3 中文版安装教程
  9. iOS 【iOS-切换控制器的手段及异同】
  10. 高德地图刷新当前位置_高德地图怎样实现实时定位,得到当前地点的坐标,位置...
  11. uni-app实现文件管理器(Android)
  12. 用计算机弹EXO简谱,Power钢琴简谱-数字双手-EXO
  13. 2021年京东最新炸年兽活动用脚本会怎样?JD炸年兽活动参与教程
  14. 最热门的十种编程语言,总有一种适合你
  15. Eclipse开发Android的安装配置。
  16. Java EE(进阶版)
  17. 基于《java2实用教程》的java知识点复习整理【第一章——java入门】
  18. 使用vuex保存singer每个歌星的基本信息
  19. 图片的混合空间增强操作Opencv-python实现
  20. 重磅!继“智能+”120页PPT,阿里+毕马威发布4份智能经济报告(附免费下载)

热门文章

  1. 算法 --- 二叉树的最大深度
  2. Node --- 构建一个HTTP服务
  3. WPF WebBrowser 加载 html ,出现安全警告, 运行 脚本和 activeX 控件,
  4. Open*** 服务器的搭建
  5. (原)离开,只为更好的活着
  6. 允許Linux的snmp服務被查詢
  7. Alsa中PCM参数设置
  8. 如何强制ffmpeg编码时输出一个关键帧
  9. 史陶比尔与机器人之父
  10. android自验签名证书,没有以前的互联网连接,无法验证Android自签名证书