自定义的标签库
一、基本概念:

1.标签(Tag):
标签,通常也成为动作,是一组按照XML语法格式编写的代码片段,在JSP中,用来封装在页面中可重复利用的逻辑,通过标签可以使JSP网页变得简洁并且易于维护。由于标签是XML元素,所以它的名称和属性都是大小写敏感的

2.标签库(Tag library):
由一系列功能相似、逻辑上互相联系的标签构成的集合称为标签库。
SUN就推出了标准的JSTL。

3.标签库描述文件(Tag Library Descriptor): tld
标签库描述文件是一个XML文件,这个文件提供了标签库中类和JSP中对标签引用的映射关系。它是一个配置文件,和web.xml是类似的。
loginServlet web.xml <servelt>
outTag xxx.tld <tag>

4.标签处理类(Tag Handle Class):
标签处理类是一个Java类,这个类继承了TagSupport或者扩展了SimpleTag接口,通过这个类可以实现自定义JSP标签的具体功能

案例:
1. <c:hello> hello标签,jsp页面使用标签时输出hello
2. <c:out value="" default=""> 输出输入的值,如果没有值,输出default的值
3. <c:forEach items="${requestScope.book_list}" var="book">

二、创建和使用一个Tag Library的基本步骤:

---------------------------------------------
1. 创建标签的处理类
-- 继承TagSupport
-- 实现doStartTag和doEndTag方法
2. 创建标签库描述文件tld
3. 在JSP文件中引入标签库
4. 执行时如果有属性,会调用setXXX方法。

重点掌握:
pageContext属性
doStartTag()
doEndTag()
doAfterBody()

---------------------------------------------

统一资源定位符(URL,英语 Uniform / Universal Resource Locator 的缩写)也被称为网页地址,是因特网上标准的资源的地址(Address)

Web上可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通用资源标志符(Uniform Resource Identifier, 简称"URI")进行定位。

1.创建标签的处理类(Tag Handler Class)
hello标签,在jsp页面使用标签时输出helloworld
out标签,功能类似JSTL的<c:out>
forEach标签,功能类似JSTL的<c:forEach>

-- 以继承TagSupport的方式去开发一个标签.TagSupport是Tag的一个实现,
我们只需去扩展它,并覆盖相应的方法,那么就可以实现标签的开发了
-- 实现doStartTag和doEndTag方法
--doStartTag()和doEndTag()返回值是在Tag Interface里定义的静态int
SKIP_BODY隐含0 就是跳过了开始和结束标签之间的代码。
EVAL_BODY_INCLUDE 隐含1 将body的内容输出到存在的输出流中。包括是jsp代码,也可以被输出
SKIP_PAGE 隐含5 忽略标签剩下的页面。
EVAL_PAGE 隐含6 继续执行标签下面的页

pageContex属性:代表Web应用中的javax.servlet.jsp.PageContext对象
JSP容器在调用doStartTag或者doEndTag方法前,会先调用setPageContext方法,
设置pageContext。因此在标签处理类中可以直接访问pageContext变量

doAfterBody()这个方法是在显示完标签间文字之后呼叫的,其返回值有EVAL_BODY_AGAIN与SKIP_BODY,
如果标签体决定需要再计算一次则从doStartTag和doAfterBody返回EVAL_BODY_AGAIN。
前者会再显示一次标签间的文字,后者则继续执行标签处理的下一步。

2.创建标签库描述文件(Tag Library Descrptor File)
-- 在WEB-INF下添加一个mytag.tld文件
tld是taglib description 的缩写

<tag>
<name>out</name> 标签名称
<tag-class>org.hellohowlow.tags.OutTag</tag-class> 标签实现类
<body-content>JSP</body-content> 标签里面支持的内容
<attribute>
<name>var</name>
<required>true</required> 是否必须
<rtexprvalue>true</rtexprvalue> rtexprvalue的全称是 Run-time Expression Value, 它指定使用标签时能不能使用表达式来动态指定数据${name}.。true是可以,false是不可以。
</attribute>
</tag>

body-content的值:
tagdependent:标签体内容直接被写入BodyContent,由自定义标签类来进行处理,而不被JSP容器解释
JSP:接受所有JSP语法,如定制的或内部的tag、scripts、静态HTML、脚本元素、JSP指令和动作。
empty:空标记,即起始标记和结束标记之间没有内容。
scriptless:接受文本、EL和JSP动作。最少用

3.在JSP文件中引人标签库

三、自定义JSP标签的处理过程:

1.在JSP中引入标签库:
<%@ taglib uri="http://org.hellohowlow.1401/jsp/jstl/core" prefix="hh" %>
2.在JSP中使用标签库标签:
<hh:hello/>
3.Web容器根据第二个步骤中的prefix,获得第一个步骤中声明的taglib的uri属性值
prefix="hh" uri="http://org.hellohowlow.1401/jsp/jstl/core"
4.Web容器自动到WEB-INF下面的tld文件中找到
<uri>http://org.hellohowlow.1401/jsp/jstl/core</uri>
5.从元素中获得对应的元素的值 hello
6.从.tld文件中找到与tagname对应的元素
<tag>
<name>hello</name> <!-- 标签的名称 -->
<tag-class>org.hellohowlow.tags.HelloTag</tag-class><!-- 标签的实现类 -->
<body-content>JSP</body-content> <!-- 标签里面支持的内容 -->
</tag>
7.Web容器根据元素的值创建相应的tag handle class的实例
<tag-class>org.hellohowlow.tags.HelloTag</tag-class>
8. Web容器调用这个实例的doStartTag/doEndTag方法完成相应的处理

总结:
1. 创建标签的处理类
-- 继承TagSupport
-- 实现doStartTag和doEndTag方法,如果需要多次在body之后进行业务处理,需要重写doAfterBody方法。
2. 创建标签库描述文件tld
注意:tld中的attribute对应标签处理类的property属性(set/get)。
3. 在JSP文件中引入标签库
<%@ taglib uri="http://org.hellohowlow.1401/jsp/jstl/core" prefix="hh"%>
4. 执行时如果有属性,会调用setXXX方法。

JSP自定义标签开发步骤的更多相关文章

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

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

  2. JSP自定义标签开发入门《转》

    JSP自定义标签开发入门 一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; ...

  3. javaweb(二十三)——jsp自定义标签开发入门

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

  4. JSP自定义标签开发入门

    一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发 ...

  5. JEECMS自定义标签开发步骤2

    JEECMS自带的只有[@cms_advertising]标签,并且官方没有给文档,用法: [@cms_advertising id='3']             <img src=&quo ...

  6. JEECMS自定义标签开发步骤

    JEECMS自带的只有[@cms_advertising]标签,并且官方没有给文档,用法: [@cms_advertising id='3']             <img src=&quo ...

  7. jsp自定义标签开发

    参考:http://blog.csdn.net/lw001x/article/details/7589302

  8. 【JSP】自定义标签开发入门

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

  9. Java jsp 自定义标签

    1 自定义标签 1.1 引入 需求: 向浏览器输出当前客户的IP地址 (只能使用jsp标签) 1.2 第一个自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫 ...

随机推荐

  1. dedecms文章内页获取缩略图的调用标签

    点评:文章内容页缩略图的调用,图片集内容页缩略图的调用很容易混淆,内页想调用缩略图用[filed:picname/]来实现是错误的 文章内容页缩略图的调用,图片集内容页缩略图的调用,相信大家都想找这个 ...

  2. highchart学习网址

    http://www.highcharts.me/api/index.html   

  3. .NET 的 WebSocket 开发包比较 【已翻译100%】--网址:http://www.oschina.net/translate/websocket-libraries-comparison-2

    编者按 本文出现在第三方产品评论部分中.在这一部分的文章只提供给会员,不允许工具供应商用来以任何方式和形式来促销或宣传产品.请会员报告任何垃圾信息或广告. Web项目常常需要将数据尽可能快地推送给客户 ...

  4. 利用百度地图API制作房产酒店地图

    摘要: 想亲手制作一张酷讯.去哪儿.安居客.链接地产那样的房产.酒店地图麼?那赶快来学习吧.(以酷讯为例,如下图) 更多成功案例请点击:http://dev.baidu.com/wiki/map/in ...

  5. IOS:程序的退出、App间的跳转

    今天在做一个音乐播放器的项目,发现这个点击退出程序的功能不能实现终于找到了一些有用的资料,就去网上看了半天资料,下面是退出程序的代码: 在动画里面可以自己添加一些,动画,达到相应的效果. AppDel ...

  6. CreateThread创建线程 互斥量锁

    HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,//SD:线程安全相关的属性,常置为NULL SIZE_T dwStackS ...

  7. 一个NodeJS写的基于MVC的服务器

    目前实现了静态文件下载.根据地址导航到控制器相应的控制器方法,但视图模版功能目前还未实现. 服务器代码(httpserver.js): var http = require("http&qu ...

  8. 用C++调用C的库函数(转载)

    转自:http://linhs.blog.51cto.com/370259/140927 C++调用C的库函数时,如果头文件定义得不恰当,可能会出现明明某函数在obj文件中存在,但是却发生链接失败的情 ...

  9. 关于<?php exit;?>"的绕过问题

    在Moctf中看到一道题目: <?php show_source(__FILE__); $c="<?php exit;?>"; @$c.=$_POST['c']; ...

  10. HDU6069:Counting Divisors(因子数统计|区间筛)

    题意 计算\(\sum_{i=l}^kd(i^k)(d_i代表i的因子数)\) 分析 比赛搞了3个小时都没搞出来,有两个思维上的trick 1.要先遍历素数,再遍历[L,R],而不是枚举每个数,然后对 ...