跟我学J2EE JSP自定义标签技术——不带属性和标签体的简单JSP自定义标签的开发实例

合集下载

跟我学J2EE JSP自定义标签技术——Html标签与JSP脚本代码相互分离技术

跟我学J2EE JSP自定义标签技术——Html标签与JSP脚本代码相互分离技术
熟悉的语法就像<foo:weather/>,这些与其它的任何标记看起来非常相似。 在页面中包含 现在的天气状况的 HTML 字符串的地方插入它。
杨教授工作室,版权所3有,盗版必究, 3/6 页
通过标记库可以定义出现在 JSP 页面中的作为类 XML 元素的自定义标签,可以把特定的 Java 代码与每个标记都关联起来。 例如,假定你可以访问一个天气情况数据库,而且你需 要输出现在的天气状况。 那么,你可以在 JSP 中插入 JDBC 程序代码直接查询数据库(虽 然这并不是一个好的选择),把这些代码封装到一个 JavaBean 内,或者把它包装成一个标 记库。
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1 Html 标签与 JSP 脚本代码相互分离技术
1.1.1 Html 标签与 JSP 脚本代码相互分离技术概述
1、JSP+JavaBean 编程的实现 在传统的 JSP 程序中,我们将 HTML 代码与 Java 代码混合在一起编写,这样虽然方便,
杨教授工作室,版权所2有,盗版必究, 2/6 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
<td><shopping:goodsdetail detail="vendor"/></td> </tr> </shopping:goodsheader> </table> 以上 JSP 页面中 Java 代码几乎为零。网页制作人员会欣喜的说:"这才是我想要的"。代 码第一行指定了自定义标记库描述文件(Tag Liabary Descriptor)的位置。这是一个 xml 的 描述文件(注意后缀必须是 tld),用来描述自定义标记。以上代码使用了两个标记 (goodsheader 和 goodsdetail),在标记库描述文件 taglib.tld 中对它们的描述。

jsp自定义标签用法实例详解

jsp自定义标签用法实例详解

jsp⾃定义标签⽤法实例详解本⽂实例讲述了jsp⾃定义标签⽤法。

分享给⼤家供⼤家参考。

具体如下:在JSP中有⼀种机制,可以让你在JSP页⾯中插⼊与HTML类似的标记。

本⽂介绍JSP定制标记的基本概念和构成,以及如何开发和应⽤JSP定制标记。

什么是标记使⽤HTML语⾔我们可以这样去编辑我们的⽹页:<HTML><HEAD><TITLE>HELLO WORLD</TITLE></HEAD><BODY>HELLO WORLD</BODY></HTML>在这⾥我们把</HEAD>,<TITLE>,<BODY>称为标记。

HTML 标记( HTML Markup)是HTML⽂档的控制语⾔,⽤于指定浏览器显⽰和打印⽂档的⽅式.它是⽤⼩于号"<"和⼤于号">"括起来的短语和符号,如 <Html>、</Body>等。

许多HTMl标记以成对的⽅式出现,如<TITLE>< /TITLE>、<Body></Body> 等。

在JSP中我们也可以定制⾃⼰的标记,以供JSP页⾯使⽤,如下例所⽰<!—login.jsp--><%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %><html><head><title>login</title></head><body><tagclass:login width="200" height= "100" ></tagclass:login></body></html>在上例中</tagclass:login>就是⼀个JSP定制标记符。

jsp自定义标签

jsp自定义标签

jsp自定义标签
1.自定义标签类
标签类就是一个普通的类,只需要继承标签的支持类(接口)就可以,这里关于标签的支持类有如下关系图
这里可以继承BodyTagSupport,TagSupport,SimpleTagSupport等,具体继承哪个,看操作方便和实际需要。

下面是一个简单demo
2.创建标签描述文件(.tld)
标签描述文件主要是将这个标签与一个类对应起来,同时对标签的一些属性做相应现限制。

该文件定义在web项目的/WEB-INF/目录下的一个.tld文件,对上面定义的标签类有如下描述文件:WEB-INF/tag/aaa.tld
3.使用自定义标签
使用自定义标签,需要在jsp页面中先引入该标签,引入格式为:
<%@ taglib prefix="cc" uri="/WEB-INF/tag/aaa.tld" %>
其中prefix为该标签的前缀(自定义),uri为上面定义的标签描述文件的相对路径
结果截图:
参考博文:/lw001x/article/details/7589302。

JSP自定义标签的开发与应用

JSP自定义标签的开发与应用

JSP自定义标签的开发与应用在JSTL提供了四个标签库(核心标签库、国际化标签库、数据库标签库和XML标签库),涉及到了几十个标签。

虽然这些标签可以完成比较复杂的工作,但它们仍然无法满足程序中的特殊需求。

因此,就需要用户根据自己的需要来定制JSP标签,这种由用户自己实现的JSP标签被称为自定义标签。

.1 自定义标签基础自定义标签和JSTL中的标签从技术上看没有任何区别,可以将这些标签统称为JSP标签。

JSP标签在JSP页面中通过XML语法格式被调用,当JSP引擎将JSP页面翻译成Servlet时,就将这些调用转换成执行相应的Java代码。

也就是说,JSP标签实际上就是调用了某些Java 代码,只是在JSP页面中以另外一种形式(XML语法格式)表现出来。

1.1 编写输出随机数的标签开始自定义标签的学习之前,在这一节先来实现一个简单的自定义标签,以使读者做一下热身,同时读者通过本节的例子可以对自定义标签的实现方法和过程有一个感性的认识。

【实例1-1】实现输出随机数的标签1. 实例说明在本例实现的自定义标签(random标签)的功能是输出一个指定范围的随机整数。

random 标签有如下几个特征:没有标签体。

有两个属性:min和max。

其中min属性表示生成随机数的最小值,max属性表示生成随机数的最大值。

min属性的默认值是0,max属性的默认值是Integer.MAX_V ALUE。

生成随机数的范围是min <= random < max。

random标签的标准调用形式如下:<ct:random min="1" max="100" />其中“ct”是调用标签时的前缀,通过taglib指定的prefix属性指定。

上面的代码的功能是输出一个在1(包括)和100(不包括)之间的随机数。

2. 编写标签类标签类是自定义标签的核心部分。

实现标签类的方法有很多,但最简单的方法是编写一个从javax.servlet.jsp.tagext.TagSupport类继承的Java类,并在该类中覆盖TagSupport类的doStartTag方法。

JSP自定义标签-标签属性

JSP自定义标签-标签属性

JSP自定义标签-标签属性对自定义标签添加一些属性,可以使我们的标签功能更加灵活和复用。

例如前一篇博客使用简单标签来对标签体内容执行一定的次数,就无法在标签上规定要执行的次数,必须在标签处理器类中修改,很不方便,如果使用带属性的标签就能很好的解决这个问题。

要想使简单标签具有属性,通常需要满足以下两个步骤:①在标签处理器类中定义属性,同时为每个属性生成setter方法;②在TLD文件中对于的<tag>标签下添加属性的<attribute>标签,同时<attribute>标签下定义其从标签,其中<name>从标签是必须要有的。

<attribute>标签所拥有的从标签如下:name标签:用于指定标签中属性的名称。

required标签:指定该属性是否必须。

rtexprvalue标签:指定该属性是否支持运行时表达式,如JSP表达式(<%=value %>)和EL表达式( ${value} )。

如果我们设定为“false”的话,那么该属性只能支持字符串。

例1:使用简单标签来控制标签体内容执行次数(带属性标签方式)编写标签处理器类:1package com.bjpowernode.simpletag;2public class LoopTagBody extends SimpleTagSupport {3private int count; //定义一个属性,用来指定循环次数45public void setCount(int count) { //为该属性设置setter方法6this.count = count;7}8@Override9public void doTag() throws JspException, IOException {10JspFragment fragment = this.getJspBody();11for(int i=0;i<this.count;i++) { //使用属性就可以指定循环次数12fragment.invoke(null);13}14}15 }在TLD文件中定义和描述标签处理器类,同时指定标签所在的uri:1 <?xml version="1.0" encoding="UTF-8" ?>2 <taglib xmlns="/xml/ns/j2ee"3xmlns:xsi="/2001/XMLSchema-instance"4xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"5version="2.0">6<description>A tag library exercising SimpleTag handlers.</description> 7<tlib-version>1.0</tlib-version>8<short-name>SimpleTagLibrary</short-name>9 <uri>simpletag</uri>1011<tag>12<name>loopbody</name>13<tag-class>com.bjpowernode.simpletag.LoopTagBody</tag-class> 14<body-content>scriptless</body-content>15<attribute>16<name>count</name>17<required>true</required>18<rtexprvalue>true</rtexprvalue>19</attribute>20</tag>21 </taglib>在JSP页面的开头导入taglib指令:<%@ taglib uri="simpletag" prefix="simple" %>最后就能在JSP页面的主体中使用刚才定义好的带属性的简单标签了,使用“count”属性就能指定标签体循环的次数:1<simple:loopbody count="5">2神乐!<br>3</simple:loopbody>在浏览器中观察:通过上面的例子我们也可以看到,虽然“count”属性在标签处理器LoopTagBody类中的类型为int整型,但是在标签上传入的是字符串类型,这是因为JSP容器支持将标签的属性类型(字符串)转换为八大基本数据类型。

第23讲_JSP自定义标签的实现

第23讲_JSP自定义标签的实现
<tag-class>examples.DemoTag</tag-class> <body-content>empty</body-content> <description> Tags with Attribute </description> <attribute> 属性的名字 <name>Count</name> 标签的说明信息 <required>false</required> </attribute> </tag> </taglib> Demo.tld
自定义标签实现(步骤 ) 自定义标签实现(步骤3)
编写使用自定义的JSP标签 标签 编写使用自定义的
需要通过使用taglib指令来指定标签库的位置 指令来指定标签库的位置 需要通过使用
<%@ taglib uri="Demo.tld" prefix="demo" %><!—指明 指明TLD文件位置 文件位置--> 指明 文件位置 ... ... <demo: ListCustomer name=”test” /><!—在JSP页面中使用标签 页面中使用标签--> 在 页面中使用标签
TLD文件的扩展名必须是 文件的扩展名必须是.tld 文件的扩展名必须是 TLD文件保存在存放项目文件的 文件保存在存放项目文件的WEB-INF目录中或者是 文件保存在存放项目文件的 目录中或者是 其子目录中 TLD文件的根元素必须为 文件的根元素必须为taglib元素 文件的根元素必须为 元素
示例4.1.1 自定义标签 自定义标签<ListCustomer>,有一个 示例 , Count属性,请创建该标签的标签描述符文件 属性, 属性 Demo.tld

JSP自定义标签-简单标签

JSP自定义标签-简单标签

JSP自定义标签-简单标签使用传统标签非常的麻烦,而且接口还多,现在传统标签基本都没用了,除了一些比较久的框架。

Sun公司之后推出了一个新的标签使用方式,称之为简单标签。

简单标签也作为JSP2.0以后的标准标签使用方式,下面是一张传统标签和简单标签的对比,可以看到简单标签真的简化了不少:与传统标签的使用步骤是类似的,需要满足以下两个步骤:①编写一个实现SimpleTag接口(实际上我们更常的是继承SimpleTagSupport接口的实现类从而免于覆写所有的方法)的Java类,这个Java类也称为标签处理器类。

②编写标签的TLD文件,用于指定标签的URI和对标签的声明描述,这一点和EL函数时一样的,TLD文件必须放置在web应用下的【WEB-INF】文件中,可以是除【classes】和【lib】目录以外的任何子目录中。

TLD文件的模板可以从【Tomcat】--->【webapps】--->【examples】--->【WEB-INF】--->【jsp2】中有一个“jsp2-example-taglib.tld”文件复制首尾和其中的<Tag>标签。

注:在TLD文件中我们使用<tag>标签来对每一个自定义标签的Java类进行描述,其中每个<tag>标签下还需要指定<body-content>的值,这个是描述标签体的类型:对于简单标签使用:“empty”(无标签体内容时) 或“scriptless” (有标签体内容时)。

注意:简单标签在JSP页面中,标签体内容中是不允许使用JSP脚本的。

与传统标签需要使用doStartTag()方法和doEndTag()方法不同,简单标签只需要doTag()方法来处理标签,所有的标签体内容逻辑,迭代,是否执行标签体内容等等都只需要调用doTag()方法即可。

因此简单标签能和传统标签的bodyTagSupport能有一样的功能,但是生命周期方式更简单并且只有一个接口。

JSP页面中自定义标签详解教程

JSP页面中自定义标签详解教程

JSP页面中自定义标签详解教程标准JSP标签是用来调用JavaBean组件的操作,处理定向请求以简化JSP页面开发与维护。

JSP技术提供了一种封装其它动态类型的机制——自定义标签,它扩展了JSP语言。

自定义标签通常发布在标签库中,该库定义了一个自定义标签集并包含实现标签的对象。

一些功能可以通过自定义标签来实现,包括对隐含对象的操作,处理表单,访问数据库集其它企业级服务,如e-mail,目录服务,处理流控制。

JSP标签库由精通Java语言的开发者及精于访问数据机器它服务的专家来创建,由网络应用设计者来使用,以集中精力来解决表现而不是如何访问企业服务。

业就是鼓励分开库的开发者与使用者相分离,自定义标签通过封装实现了生产率的提高。

标签库在JSP技术中受到广泛注意。

要更多的了解标签库可以访问以下网址:/products/jsp/taglibraries.html什么是自定义标签?自定义标签是用户定义的JSP语言元素。

当JSP页面包含一个自定义标签时被转化为servlet,标签转化为对称为tag handler的对象的操作。

接着当servlet执行时Web container 调用那些操作。

自定义标签有着丰富的特点,它们可以:1、可以通过调用页面传递的属性进行自定义;2、可以访问对于JSP页面可能的所有对象;3、可以修改由调用页面产生的响应。

4、可以相互间通信。

你可以创建并初始化一个JavaBean组件,创建一个变量引用标签中的bean,接着在其它的标签中引用该bean.5、可以在一个标签中嵌套另一个,可以在JSP页面中进行复杂的交互。

JSP页面的例子这章描述的任务包括使用及定义标签。

标签库Struts为建立一个国际化的网络应用提供了一个实现设计模式为Model-View-Control的框架。

该标签库包括全面的功能用于处理:。

HTML forms。

Templates。

JavaBeans components。

JSP教程_自定义标签的开发

JSP教程_自定义标签的开发

·222·
Eclipse 从入门到精通
<!-- 以上为描述性文件的头部 --> <description>mytag 1.1 print library</description> <display-name>mytag 标签库</display-name> 工具 --> <tlib-version>1.0</tlib-version> <jsp-version>1.2></jsp-version> <short-name>mytag</short-name> --> <uri>/mytag</uri> <tag> <description>打印页面 taglib</description> <name>print</name> <!-- 惟一标签名 --> <tag-class>cn. tag.mytagPrint</tag-class> <body-content>JSP</body-content> <attribute> <name>value</name> <required>true</required> </attribute> <attribute> <name>type</name> <required>false</required> </attribute> </tag> </taglib>

跟我学J2EE JSP自定义标签技术——采用成对的标签但并不处理标签体的正文自定义标签开发实例

跟我学J2EE JSP自定义标签技术——采用成对的标签但并不处理标签体的正文自定义标签开发实例

1.1采用成对的标签但并不处理标签体的正文自定义标签开发实例1、设计采用成对的标签但并不处理标签体的正文(如:<userTag:JSPTagTest >这是成对的标签正文内容</userTag:JSPTagTest>)(1)编程要点1)此时应该在标记Java程序类中同时重载doStartTag()和doEndTag()方法,上面的两个标签分别调用这两个方法。

2)而如果要求将“这是成对的标签正文内容”字符串原样输出,则应该注意的是在doStartTag()中对TagSupport类需要返回return(EV AL_BODY_INCLUDE)或者对从BodyTagSupport类继承时,则需要返回EV AL_BODY_BUFFERED表示要求计算标签体正文内容,而不是return(SKIP_BODY)表示跳过标签体正文内容3)而doEndTag()需要return(EV AL_PAGE)表示要求容器在标签结束时继续计算JSP页面其他的部分。

2、编写带属性的标签处理程序的JAVA类文件package jsptaglib;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.JspWriter;import java.io.IOException;import javax.servlet.jsp.JspException;public class JSPTagTest2 extends TagSupport{private String tagproperty="属性的缺省值"; //其名称应该与标签中的属性名称相同public void setTagproperty(String tagproperty) {this.tagproperty = tagproperty;}public JSPTagTest2()}public int doStartTag() throws JspException{JspWriter out=this.pageContext.getOut();try{if (tagproperty.equals("属性的缺省值")){out.println("这是定制JSP标签所输出的文字并且没有设置属性");}else{out.println("这是定制带属性的JSP标签所输出的文字,您所设置的tagproperty属性的值为:" +tagproperty);}}catch (IOException ex){System.out.println("标签出现了下面的错误:"+ex.getMessage());}// return this.SKIP_BODY; //由于没有标签体,因此返回SKIP_BODY,表示标签功能已执行完成return this.EVAL_BODY_INCLUDE; //表示有标签体的内容}public int doEndTag() throws JspExceptionreturn (EVAL_PAGE);}}注意:JSP引擎在分析了结束标记之后就会调用doEndTag ()方法。

第六章--JSP自定义标记

第六章--JSP自定义标记

简朴旳自定义标识由下面旳元素构成
标识处理器 标识库描述符(TLD文件)
阐明:标识扩展与JavaBean旳相同点在于都是某些公 共旳Java模块,不是为某一页面或某一组页面设计旳; 区别在于,标识是从使用它旳JSP页面中接受属性来控 制自己旳行为,而JavaBean旳工作原理是:JSP页面 祈求获取JavaBean旳属性进行动态显示。从这个意义 上说,自定义标识与JSP页面旳交互是一种主动性旳交 互,而JavaBean与JSP页面旳交互是一种被动性旳交 互。
JSPWriterOutput.print("Hello Tag!");
} catch (IOException ioEx) {
System.out.println("IOException in HelloTag " + ioEx);
}
return (SKIP_BODY);
}
public int doEndTag() {
(4)Web容器调用标识处理器旳doStartTag()措施。措施返回SKIP_BODY,引 导Web容器忽视体内容;返回EVAL_BODY_INCLUDE,Web容器分析体内容及其 包括旳子标识。
(5)调用SetBodyContent()措施。 (6)调用doInitBody()措施。措施返回SKIP_BODY,引导Web容器忽视体内容;
return sex;
}
public void setsex(String sex) {
this.sex =sex;
}
public int doEndTag() {
String prefix=new String();
try {
JspWriter JSPWriterOutput = pageContext.getOut();

J2EE JSP自定义标签技术及应用实例

J2EE JSP自定义标签技术及应用实例
JSP标签在进行开发时要比JavaBean复杂很多,体现在JSP标签
库描述文件(*.tld)和web.xml等的配置上; JSP标签实现的功能相对比较单一,同时不及 JavaBean编程方便。
(4)标签库的应用场合
对由“美工和程序员”所构成的开发团队,在表示层中则 更多地采用标签技术
5、对标签的处理过程说明
6、定制标签的编程实现步骤
(1)设计标签所对应的功能处理的JavaBean类
它是标签库用来执行所分配任务的基础代码模块
(2)编写标签库所需要的描述符(TLD)文件
这是一种XML文件,TLD文件描述和说明了标签的属性、
信息和标签处理器的Java类文件位置等信息。 JSP 容器使用这一文件来映射被调用标签库的位置和用 法。
(2)编写标签库描述符TLD文件(Tag Library Descriptor,文件扩展名为*.tld) (3)修改WEB-INF目录下的web.xml文件以定位标签的 *.tld文件(对JSP2.0技术可以不需要它) (4)在JSP页面中使用以上自定义的标记
9、标签的内部转换机制
(1)应用服务器容器首先调用JSP引擎把JSP页面翻译成对应的 Servlet,然后再编译该Servlet。 (2)与标记库相关联的方法都被包含在该Servlet中并一起编译, 合成在一起
BodyTagSupport类并重写doStartTag方法
一个标签能接受输入参数,只需要在该标签所对应的 Java类程序
中增加setXXX()方法即可,其中xxx为该标签的属性名称
修改*.tld文件 编写标签库描述符TLD文件并在tag之间加入 <attribute>标签
12、成对的标签并且不需要处理标签对间的信息 <userTag:JSPTagTest >这是成对的标签正文内容 </userTag:JSPTagTest> 设计要点

JSP自定义标签(展示)

JSP自定义标签(展示)

二、标签库描述文件
标签库描述文件( 标签库描述文件(Tag Library Descriptor) ) 包含了自定义标签的描述信息。 包含了自定义标签的描述信息。它把自定义标 签和对应的处理程序关联起来。 签和对应的处理程序关联起来。一个标签库对 应一个标签库描述文件, 应一个标签库描述文件,一个标签库描述文件 可以包含多个自定义标签的声明。 可以包含多个自定义标签的声明。
自定义标签
自定义标签就是我们根据自己要求来制定、组合一些已存 自定义标签就是我们根据自己要求来制定、 在的脚本代码,形成一个新的脚本代码。 在的脚本代码,形成一个新的脚本代码。 自定义标签其实是一个Java类,他封装了一些标签代码, 类 他封装了一些标签代码, 自定义标签其实是一个 形成一个具有某个功能的新标签。 形成一个具有某个功能的新标签。 封装为一个Java类的好处: 封装为一个Java类的好处: 类的好处 1.增加了可扩展性。我们可以在不同标签之间可以建立 增加了可扩展性。 增加了可扩展性 起一个继承关系,这样构建新的自定义标签时,可以对已有 起一个继承关系,这样构建新的自定义标签时, 的标签进行某种程度的升级或改进,而不需要重新创建, 的标签进行某种程度的升级或改进,而不需要重新创建,提 高了开发效率。 高了开发效率。 2.增加了可复用性。我们可以将自定义标签打包成一个 增加了可复用性。 增加了可复用性 Java档案文件,以便在不同应用之间自由移植。 档案文件, 档案文件 以便在不同应用之间自由移植。
JSP标签 JSP标签
JSP标签库是生成脚本的一种机制。 标签库是生成脚本的一种机制。 标签库是生成脚本的一种机制 标签是规划页面的工具。在编写页面时, 标签是规划页面的工具。在编写页面时,经 常会碰到一些基本的页面标签。 常会碰到一些基本的页面标签。如编辑表格标 签“<table>…</table>”,页面控件标 , 及在JSP开 签”<input type=“button” …>“及在 及在 开 发中已经占有了很大比重的JavaBean标签 发中已经占有了很大比重的 标签 “<jsp:useBean>”等,这些都是页面默认配 等 置的标签。 置的标签。

JSP自定义标签及函数的使用

JSP自定义标签及函数的使用

JSP⾃定义标签及函数的使⽤JSP⾃定义标签及函数⾃定义标签tags⽂件⽅式在WEB-INF/tags⽬录下创建⼀个myTag.tag⽂件<%@ tag language="java" pageEncoding="UTF-8"%><%@ attribute name="message" type="ng.String" required="true" description="消息"%><h2>Hello ${message}!</h2>在JSP⽂件中使⽤myTag标签<%@ page pageEncoding="UTF-8"%><%@ taglib prefix="tags" tagdir="/WEB-INF/tags"%><html><body><tags:myTag message="this is my tag"></tags:myTag></body></html>输出结果为:Hello this is myTag!⾃定义标签TLD⽂件⽅式创建处理标签的类,重写doTag⽅法package com.yeyun.web.taglib.tags;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.SimpleTagSupport;public class MyTagSupport extends SimpleTagSupport{private String message;public void doTag() throws JspException, IOException {JspWriter writer = getJspContext().getOut();writer.println("Hello " + message + "!");}public void setMessage(String message) {this.message = message;}}在WEB-INF/tlds⽬录下创建⼀个myTld.tld⽂件(taglib description,标签库描述符)<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"version="2.0"><description>JSTL 1.1 tag library</description><display-name>⾃定义标签</display-name><tlib-version>1.1</tlib-version><short-name>t</short-name><uri>/WEB-INF/tlds/myTld.tld</uri><tag><description>my⾃定义标签</description><name>myTag</name><tag-class>com.yeyun.web.taglib.tags.MyTagSupport</tag-class><body-content>empty</body-content><attribute><name>message</name><required>true</required><type>ng.String</type><description>消息</description></attribute></tag></taglib>JSP⽂件中使⽤myTag标签(uri与TLD⽂件中的uri⼀致)<%@ page pageEncoding="UTF-8"%><%@ taglib prefix="t" uri="/WEB-INF/tlds/myTld.tld"%><html><body><t:myTag message="this is my tld"/></body></html>输出结果为:Hello this is my tld!⾃定义标签函数创建⼀个静态⽅法package com.yeyun.web.taglib.fns;public class MyFunction {public static String getMessage(String message) {return "Hello " + message + "!";}}在WEB-INF/tlds⽬录下创建⼀个myFn.tld⽂件<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"version="2.0"><description>JSTL 1.1 functions library</description><display-name>JSTL functions</display-name><tlib-version>1.1</tlib-version><short-name>fns</short-name><uri>/WEB-INF/tlds/myFn.tld</uri><function><description>获取信息</description><name>getMessage</name><function-class>com.yeyun.web.taglib.fns.MyFunction</function-class><function-signature>ng.String getMessage(ng.String)</function-signature><example>${fns:getMessage(message)}</example></function></taglib>JSP⽂件中使⽤⾃定义函数<%@ page pageEncoding="UTF-8"%><%@ taglib prefix="fns" uri="/WEB-INF/tlds/myFn.tld"%><html><body>${fns:getMessage("this is my function!")}</body></html>输出结果为:Hello this is my function!总结在使⽤任何标签库之前,必须在每个JSP⽂件的头部先引⼊标签库,然后在使⽤*.tld⽂件的格式参考jstl.jar下META-INF⽬录下的fn.tld及c.tldtag⽂件⽅式类似于freemarker的宏,可以创建⾃定义页⾯模板⽚段,供其他页⾯复⽤。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注意: 只需要将该 JSPTagTest.java 文件放在 WEB-INF\classes 目录下,然后对它进行编译
将自动会形成上述目录位置。
将产生出下面的状态
杨教授工作室,版权所有3 ,盗版必究, 3/13 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
(2)编程标签处理程序的 JAVA 类文件( TAG 处理器) 当一个 JSP 引擎遇到一个定制的标签时,它首先检查是否能够确定这个标签类的物理位
置。如果能够确定,就会执行标签类中对应的代码。 该标签类的 Java 文件执行由标签所标示的具体工作,并应该被放置在 WEB-INF 下的
杨教授工作室,版权所有6 ,盗版必究, 6/13 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
( 3 ) 在 JCreator 中 编 译 该 程 序 时 要 注 意 : 由servlet.jsp.*、javax.servlet.jsp.tagext.*等包,应该在 JCreator 中引入这些包, 这些包可以从 Tomcat\common\lib\jsp-api.jar 和 servlet-api.jar 文件获得 (4)将编译好的 class 文件放于服务器的 WEB-INF 下的 classes 目录下(由于该 Java 程序 有包的定义,因此应该将它的*.class 文件放在 WEB-INF\classes\jspTagLib 目录下,其中 jspTagLib 为包名)。
*/
package jspTagLib;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;
public class JSPTagTest extends TagSupport
//(1)
{
public int doStartTag() throws JspException //程序的执行起始点 (2)
classes 目录或者其下的某一子目录(取决于是否有包的定义)下。标签类通常页可以被制 作成一个 JAR 文件,放置在 WEB-INF 目录下的 lib 目录中。
需要在 tld 标签库描述文件里的每个 TAG 标签中指明是应用哪一个类文件来对这个 TAG 进行处理。
杨教授工作室,版权所有4 ,盗版必究, 4/13 页
2、在该项目中添加一个 Web 组件,名称为 WebTagApp
杨教授工作室,版权所有1 ,盗版必究, 1/13 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
最后产生下面的状态 3、在该 Web 组件中添加一个 JSP 页面,名称为 index.jsp
<%@ page contentType="text/html; charset=GBK" %>
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1 不带属性和标签体的简单 JSP 自定义标签的开发实例
JSP 标签的开发需要编写两种独立的文件。一种是定义标签功能的 java 类文件,一种是 将 xml 元素名称(标签)映射到标签实现的标签库描述符文件。 1、新建项目,名称为 WebTag
JspWriter out=pageContext.getOut(); out.println("这是定制 JSP 标签所输出的文字"); //向 jsp 网页上下文输出 } catch (IOException ex) {
System.out.println("标签出现了下面的错误:"+ex.getMessage()); } return(this.SKIP_BODY); //由于没有标签体,因此返回 SKIP_BODY,表示标签功能已执 行完成(3) } } 编程要点: (1)需要继承 javax.servlet.jsp.tagext.TagSupport 类并重写 doStartTag 方法。JSP 服 务器引擎当它第一次遇到这个标记的时候,引擎就会调用 doStartTag ()方法。 1) 可以使这个方法为空或者当需要的时候才执行应用程序逻辑。 2) 当该方法返回 SKIP_BODY 时,那么引擎跳过这个标记体。 3) 当它返回 EVAL_BODY_INCLUDE 时,引擎将会处理这个标记以及它的子标记。
{
try
{
/*
杨教授工作室,版权所有5 ,盗版必究, 5/13 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
out 是一个 JspWriter 类型的隐含对象,用于向 jsp 网页输出内容。输出的目标由 pageContext.getout 提供 ,其中 pageContext 是 TagSupport 类中的一个 PageContext 类的 对象 */
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
/*
在 JCreator 中编译该程序时要注意:由于在 JDK.14 中并没有包含 javax.servlet.jsp.*、
javax.servlet.jsp.tagext.*等包,应该在 JCreator 中引入这些包,这些包可以从
Tomcat\common\lib\jsp-api.jar 和 servlet-api.jar 文件
<html>
杨教授工作室,版权所有2 ,盗版必究, 2/13 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
<head> <title> 本页面为标签的应用测试页面 </title> </head> <body bgcolor="#ffffff"> <h1> 下面为标签的执行结果 </h1> </body> </html> 4、在该 Web 组件中添加我们的标签所对应的 JavaBean(TAG 处理器) ( 1 ) 类 名 称 为 JSPTagTest , 包 名 称 为 jsptaglib , 基 类 为 javax.servlet.jsp.tagext.TagSupport
相关文档
最新文档