ylbtech-JSP-Runoob:JSP 自定义标签
1.返回顶部
1、

JSP 自定义标签

自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。

JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。

你可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签。


创建"Hello"标签

接下来,我们想创建一个自定义标签叫作<ex:Hello>,标签格式为:

<ex:Hello />

要创建自定义的JSP标签,你首先必须创建处理标签的Java类。所以,让我们创建一个HelloTag类,如下所示:

package com.runoob;import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;public class HelloTag extends SimpleTagSupport {public void doTag() throws JspException, IOException {JspWriter out = getJspContext().getOut();out.println("Hello Custom Tag!");}
}

以下代码重写了doTag()方法,方法中使用了getJspContext()方法来获取当前的JspContext对象,并将"Hello Custom Tag!"传递给JspWriter对象。

编译以上类,并将其复制到环境变量CLASSPATH目录中。最后创建如下标签库:<Tomcat安装目录>webapps\ROOT\WEB-INF\custom.tld。

<taglib><tlib-version>1.0</tlib-version><jsp-version>2.0</jsp-version><short-name>Example TLD</short-name><tag><name>Hello</name><tag-class>com.runoob.HelloTag</tag-class><body-content>empty</body-content></tag>
</taglib>

接下来,我们就可以在JSP文件中使用Hello标签:

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html><head><title>A sample custom tag</title></head><body><ex:Hello/></body>
</html>

以上程序输出结果为:

Hello Custom Tag!

访问标签体

你可以像标准标签库一样在标签中包含消息内容。如我们要在我们自定义的Hello中包含内容,格式如下:

<ex:Hello>This is message body
</ex:Hello>

我们可以修改标签处理类文件,代码如下:

package com.runoob;import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;public class HelloTag extends SimpleTagSupport {StringWriter sw = new StringWriter();public void doTag()throws JspException, IOException{getJspBody().invoke(sw);getJspContext().getOut().println(sw.toString());}}

接下来我们需要修改TLD文件,如下所示:

<taglib><tlib-version>1.0</tlib-version><jsp-version>2.0</jsp-version><short-name>Example TLD with Body</short-name><tag><name>Hello</name><tag-class>com.runoob.HelloTag</tag-class><body-content>scriptless</body-content></tag>
</taglib>

现在我们可以在JSP使用修改后的标签,如下所示:

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html><head><title>A sample custom tag</title></head><body><ex:Hello>This is message body</ex:Hello></body>
</html>

以上程序输出结果如下所示:

This is message body

自定义标签属性

你可以在自定义标准中设置各种属性,要接收属性,值自定义标签类必须实现setter方法, JavaBean 中的setter方法如下所示:

package com.runoob;import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;public class HelloTag extends SimpleTagSupport {private String message;public void setMessage(String msg) {this.message = msg;}StringWriter sw = new StringWriter();public void doTag()throws JspException, IOException{if (message != null) {/* 从属性中使用消息 */JspWriter out = getJspContext().getOut();out.println( message );}else {/* 从内容体中使用消息 */getJspBody().invoke(sw);getJspContext().getOut().println(sw.toString());}}}

属性的名称是"message",所以setter方法​​是的setMessage()。现在让我们在TLD文件中使用的<attribute>元素添加此属性:

<taglib><tlib-version>1.0</tlib-version><jsp-version>2.0</jsp-version><short-name>Example TLD with Body</short-name><tag><name>Hello</name><tag-class>com.runoob.HelloTag</tag-class><body-content>scriptless</body-content><attribute><name>message</name></attribute></tag>
</taglib>

现在我们就可以在JSP文件中使用message属性了,如下所示:

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html><head><title>A sample custom tag</title></head><body><ex:Hello message="This is custom tag" /></body>
</html>

以上实例数据输出结果为:

This is custom tag

你还可以包含以下属性:

属性 描述
name 定义属性的名称。每个标签的是属性名称必须是唯一的。
required 指定属性是否是必须的或者可选的,如果设置为false为可选。
rtexprvalue 声明在运行表达式时,标签属性是否有效。
type 定义该属性的Java类类型 。默认指定为 String
description 描述信息
fragment 如果声明了该属性,属性值将被视为一个 JspFragment

以下是指定相关的属性实例:

.....<attribute><name>attribute_name</name><required>false</required><type>java.util.Date</type><fragment>false</fragment></attribute>
.....

如果你使用了两个属性,修改TLD文件,如下所示:

.....<attribute><name>attribute_name1</name><required>false</required><type>java.util.Boolean</type><fragment>false</fragment></attribute><attribute><name>attribute_name2</name><required>true</required><type>java.util.Date</type></attribute>
.....

2、
2.返回顶部
3.返回顶部
4.返回顶部
5.返回顶部
0、
http://www.runoob.com/jsp/jsp-custom-tags.html
1、
6.返回顶部
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/storebook/p/9597591.html

JSP-Runoob:JSP 自定义标签相关推荐

  1. 深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会

    转载自   深入体验JavaWeb开发内幕--简述JSP中的自定义标签叫你快速学会 自定义标签,顾名思义,就是自己定义的标签.那么我们为什么要自己定义一些标签呢? 我们知道,如果要在JSP中获取数据我 ...

  2. 自定义标签的使用jsp实例_JSP自定义标签示例教程

    自定义标签的使用jsp实例 Today we will look into JSP custom tags. Earlier we learned about JSP Action Elements, ...

  3. jsp自定自定义标签

    2019独角兽企业重金招聘Python工程师标准>>> 1 先要导入一个jar包 2 自定一个标签库 ,该库放在WEB-INF/tld下面 3 需要实现 该类 extends Tag ...

  4. JSP GridView --使用自定义标签实现ASP.NET的控件

    JSP用自定义标签实现ASP.net的gridview.datasource组件 第一部分:使用说明 使用过ASP.NET的人都知道,gridview控件功能很强大,使用很方便,提高了开发效率.而且表 ...

  5. JSP笔记——7.自定义标签

    jsp标签具有与html标签一样的格式,可以用来代替jsp中的Java脚本,使代码简介.使用自定义标签之前需要建立一个*.tld文件,每个文件对应一个标签库,里面可以包含很多的自定义标签. 每一个标签 ...

  6. JSP页面tdl自定义标签的做法

    思路: 首先tdl自定义标签就是比如类似input.div.ul.li之类的标签,只是名字自己来定义,但实际上要在页面上看到效果还是需要些html代码,只是在页面上只需要写自己标签就可以代表一部分ht ...

  7. java ee jsp_EE JSP:使用自定义标签库生成动态内容

    java ee jsp 在Web应用程序中开发View层时,您希望尽量不要重复JSP文件中的内容. JSP spec API允许您通过使用标记库来减少这种重复. 定制JSP标记是用户定义的xml标记元 ...

  8. EE JSP:使用自定义标签库生成动态内容

    在Web应用程序中开发View层时,您希望尽量不要重复JSP文件中的内容. JSP spec API允许您通过使用标记库来减少这种重复. 定制JSP标记是用户定义的xml标记元素,您可以将其插入JSP ...

  9. javaweb学习总结(二十三)——jsp自定义标签开发入门

    一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...

  10. JSP自定义标签_控制标签体是否执行

    自定义标签,在类中控制该自定义标签是否显示: import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.Tag; i ...

最新文章

  1. IoT勒索软件会演化为劫持软件
  2. Java实现最电话号码的简单加密源码
  3. 用 JavaScript 操作字符串
  4. 【POJ - 1087】A Plug for UNIX(建图,网络流最大流)
  5. md5加密+盐方式一
  6. 医疗人工智能市场有多大?
  7. 设计师必备导航类网站,内有宝藏!
  8. 腾讯自动驾驶新动作!与现代合作开发无人车系统
  9. python3爬虫 - 利用浏览器cookie登录
  10. Varnish加速网站图片显示
  11. python与mongodb更新_Python对MongoDB增删改查
  12. 大学 计算机 试题,【分享】《大学计算机基础》试题题库及答案 ~~~~~~~~~~~...
  13. 虚拟服务器搭建棋牌,棋牌开源游戏服务器框架
  14. php段子老板,程序员段子 那些关于程序员的段子
  15. 编程大实践 数独破解 #Cilay #嵩天
  16. 【SSM框架 一】Mybatis
  17. faxicon.ico制作(笔记)
  18. NRF24L01多发单收配置
  19. Springboot359的医院病历管理系统
  20. 访问修饰符有哪些?及作用范围

热门文章

  1. 游戏开发之C++对C的扩展(C++基础)
  2. RS特性总结(思维导图)
  3. HDOJ--1106排序
  4. PHP 7.0 5.6 下安裝 phpLDAPadmin 发生错误的修正方法
  5. Netty 核心组件 Pipeline 源码分析(二)一个请求的 pipeline 之旅
  6. 第三篇:C++ 中的几种初始化
  7. 一分钟了解阿里云产品:弹性伸缩五大热点技术问题分析
  8. WinAPI: midiOutSetVolume - 设置 MIDI 输出设备的音量
  9. NO.128 开发团队篇:参加项目计划会议,分解任务,领取任务,每天更新任务。...
  10. CSocket实现端口扫描