JSP自定义标签开发步骤
自定义的标签库
一、基本概念:
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自定义标签开发步骤的更多相关文章
- javaweb学习总结(二十三)——jsp自定义标签开发入门
一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...
- JSP自定义标签开发入门《转》
JSP自定义标签开发入门 一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; ...
- javaweb(二十三)——jsp自定义标签开发入门
一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...
- JSP自定义标签开发入门
一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发 ...
- JEECMS自定义标签开发步骤2
JEECMS自带的只有[@cms_advertising]标签,并且官方没有给文档,用法: [@cms_advertising id='3'] <img src=&quo ...
- JEECMS自定义标签开发步骤
JEECMS自带的只有[@cms_advertising]标签,并且官方没有给文档,用法: [@cms_advertising id='3'] <img src=&quo ...
- jsp自定义标签开发
参考:http://blog.csdn.net/lw001x/article/details/7589302
- 【JSP】自定义标签开发入门
JSP 自定义标签 自定义标签是用户定义的JSP语言元素.当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时We ...
- Java jsp 自定义标签
1 自定义标签 1.1 引入 需求: 向浏览器输出当前客户的IP地址 (只能使用jsp标签) 1.2 第一个自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫 ...
随机推荐
- java.lang.IllegalArgumentException: No converter found for return value of type: class com.st.bean.User
原因:springmvc默认是没有对象转换成json的转换器的,要添加jackson依赖 在pom.xml中添加 <dependency> <groupId>com.faste ...
- Python作业之购物商城
作业:购物商场 1.商品展示,价格 2.银行卡余额 3.付账 程序流程图如下: 代码如下: ShopDisplay = {'} print(ShopDisplay) ShoppingCartPrice ...
- codeforces 459 B.Pashmak and Flowers 解题报告
题目链接:http://codeforces.com/problemset/problem/459/B 题目意思:有 n 朵 flowers,每朵flower有相应的 beauty,求出最大的beau ...
- 一个小bug,关于fuse_mount_sys
在mount.c 中的 int fuse_mount_sys 函数中,如果注销掉 fd的open语句,此时fd一般为0. 然后,用普通用户运行ssfs且不加-f参数,一切显示正常 fuse_moun ...
- ubuntu 源、codename 与 sources.list 文件
查看 codename $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubunt ...
- Java 网络处理(net io URL 等)
1. URL 类 URL 类的两个重要方法: openStream():打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream. URL url = new URL(" ...
- I.MX6 MAC地址修改
/*********************************************************************** * I.MX6 MAC地址修改 * 说明: * I.M ...
- bzoj3143游走——期望+高斯消元
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3143 只需算出每条边被经过的概率,将概率从小到大排序,从大到小编号,就可得到最小期望: 每条 ...
- ORA-01843: not a valid month 错误
转自:https://blog.csdn.net/jetluning/article/details/48785599 insert into ......的场合发生ORA-01843: not a ...
- 编程 MD(d)、MT(d)编译选项的区别
转:http://blog.csdn.net/nodeathphoenix/article/details/7550546 1.各个选项代表的含义 编译选项 包含 静态链接的lib 说明 /MD _M ...