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类,叫 ...
随机推荐
- POJ2243 Knight Moves —— A*算法
题目链接:http://poj.org/problem?id=2243 Knight Moves Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- codeforces 451C. Predict Outcome of the Game 解题报告
题目链接:http://codeforces.com/problemset/problem/451/C 题目意思:有3支球队(假设编号为1.2.3),总共要打 n 场比赛,已知已经错过这n场比赛中的 ...
- (转)Vim十大必备插件
原文地址:http://www.open-open.com/lib/view/open1414227253419.html Vim十大必备插件 Taglist taglist是一个用于显示定位程序中各 ...
- BZOJ_2443_[Usaco2011 Open]奇数度数 _并查集+树形DP
BZOJ_2443_[Usaco2011 Open]奇数度数 _并查集. Description 奶牛们遭到了进攻!在他们的共和国里,有N(1 <= N <=50,000)个城市,由M(1 ...
- node.js适合游戏后台开发吗?
网站服务器和游戏服务器是怎么样联系到一起的? 百牛信息技术bainiu.ltd整理发布于博客园 1. 游戏分很多种,咱们先来看看MMORPG. 再怎么简单的RPG服务器都免不了处理多人交互的情形,上百 ...
- this调用属性
示例: class Person{ private String name; private int age; public Person(String name,int age){ this.nam ...
- nable to load bean: type:com.opensymphony.xwork2.util.ValueStackFactory
严重: Exception starting filter struts2 Unable to load bean: type:com.opensymphony.xwork2.util.ValueSt ...
- CClientDC类 CWindowDC类
CClientDC类 CClientDC类也是CDC类的派生类.它只能在窗口的客户区(即窗口中除了边框.标题栏.菜单栏以及状态栏外的中间部分)中进行绘图,坐标点(0,0)通常指的是客户区的左上角.它的 ...
- HDU6050: Funny Function(推公式+矩阵快速幂)
传送门 题意 利用给出的式子求\(F_{m,1}\) 分析 直接推公式(都是找规律大佬) \(n为偶数,F_{m,1}=\frac{2(2^n-1)^{m-1}}3\) \(n为奇数,F_{m,1}= ...
- EOJ3247:铁路修复计划
传送门 题意 分析 这题用二分做就好啦,有点卡常数,改了几下for的次数 套了个板子,连最小生成树都忘记了QAQ trick 代码 #include<cstdio> #include< ...