一、引入标签
其实在JSP中我们已经使用过了几个标签,比如<jsp:forward>、<jsp:include>等;这些标签都是预先定义好的,如果我们需要自定义标签,就需要学习标签编程。
标签编程的优点就是灵活性+封装性。
灵活性体现在属性的赋值上,可以赋任意值。比如<jsp:forward page="A"> //A处可以赋任意的URL;
封装性体现在内部的行为的封装,因为标签是用一个类实现的,因此类的方法中能够包含任意复杂的动作。
因此标签是为了能够在JSP中使用尽可能少的Scriptlet;
比如:
这个代码非常混乱,但是如果通过标签,从这段代码都封装在一个标签里,则代码就清晰了很多。
接下来是我通过标签封装后的JSP页面效果;
是不是大大缩短了呢??再来看看我在背后干了什么。。。。
TableTagSupport.java
是不是很神奇。。。那接下来就看看实现的过程吧。
注意,在编写标签之前,必须把tomcat\lib中的jsp-api.jar文件配置在CLASSPATH中才可以;
二、基本标签编写
1、TagSupport类
如果要编写一个标签类,则必须继承javax.servlet.jsp.tagext.TagSupport;
TagSupport中提供了很多常用方法:
(1)public intdoStartTag()throwsJspException; // 标签开始时调用
能够返回SKIP_BODY(跳过标签体)、EVAL_BODY_INCLUDE(执行标签体)
(2)public intdoEndTag()throws JspException;// 标签结束时调用
能够返回SKIP_PAGE(立刻停止执行)、EVAL_PAGE(JSP正常运行完毕);
(3)intSKIP_BODY;// 跳过标签体
(4)intEVAL_BODY_INCLUDE;//执行标签体
(5)intEVAL_BODY_AGAIN;// 重复执行标签体,主要是因为集合迭代输出,只能在doAfterBody中使用;
(6)public intdoAfterBody()throws JspException;// 执行完一次标签体后调用的函数;
能够返回SKIP_BODY(结束标签体)、EVAL_BODY_AGAIN(重复执行标签体)
(7) JspWriter out = super.pageContext.getOut();//获取向网页输出的输出流;
举例讲述这些函数和常量代表什么意思:
执行流程如下:
(1)doStartTag(); <xiazdong:hello>时调用,如果是EVAL_BODY_INCLUDE,则继续;如果是SKIP_BODY,则执行(4)
(2)执行标签体;
(3)如果实现了doAfterBody,则执行;如果返回SKIP_BODY,则执行(4) ; 如果返回EVAL_BODY_AGAIN,则重复执行doAfterBody;
(4)doEndTag():标签尾调用;
2.制作无属性标签
为了清晰,我们以例子说明。
代码举例1:实现显示Hello world;
1.编写HelloTag.java
注意点:
(1)javax.servlet.jsp.tagext.TagSupport,必须记住;
(2)JspWriter out = super.pageContext.getOut();
(3)public int doStartTag()throws JspException;必须记住;
2.编写xiazdong.tld
tld文件是标签描述文件,是整个标签编程的核心,用来描述自定义的标签的名字、标签的实现类、是否有标签体、描述属性等;
一个tld文件其实类似于一个标签库,里面能够描述很多标签;每个标签都以
的形式描述;
*.tld文件的模版如下:(因为tld文件前面这些内容都不是很重要,因此可以直接复制黏贴)
3.在web.xml中编写映射
编写映射的目的类似于给一个网页配置一个映射地址,为了方便访问;
比如本来需要访问/a/b/c/d/e/f/g/1.tld,这个路径非常麻烦,但是如果通过映射,我们可以只需要用"a"表示一长串的文件路径及名称;
4.编写JSP页面并使用自定义的标签
<%@ taglib prefix="" uri=""%> prefix类似于<jsp:forward>中的jsp,uri中使用前面所说的映射;
3.制作有属性标签
其实制作有属性和制作无属性没有太大区别,
1.需要在原来的HelloTag.java 中加入属性.
如果做形如:<xiazdong:hello id="" format="" />的属性,则需要在HelloTag.java中添加两个属性,id属性和format属性;
形如:
在用户使用标签,并为id和format属性赋值时,会自动调用setter方法,将HelloTag类中的id和format赋值;
2.在tld文件中添加属性描述:
属性描述形如:
代码实例:
HelloTag.java
xiazdong.tld
需要加上attribute的描述:名字、是否必须、是否支持表达式语言
HelloTag.jsp
三、IterationTag和Tag接口的区别
Tag接口只有一些最基本的标签编程方法,而IterationTag接口是用于迭代输出,比如EVAL_BODY_AGAIN等;
分享到:
相关推荐
JSP自定义标签JSP自定义标签JSP自定义标签JSP自定义标签JSP自定义标签JSP自定义标签
JSP标签创建一个简单的自定义标签第一步,创建一个标签处理器类:实现SimpleTag接口XxxSimpleTag,方法实现,先不写内容第二步,在WEB-IF文
jsp自定义标签jsp自定义标签jsp自定义标签
本人自行研究JSP自定义标签的学习笔记 目录如下: 目录 一、概述 1 1.1 使用简单标签机制 2 1.2 使用标签文件 3 二 、自定义标签简介 3 2.1 自定义标签概念 3 2.2 标签相关概念 3 2.3 如何创建自定义标签 3 三、自...
jsp自定义标签jsp自定义标签jsp自定义标签jsp自定义标签
jsp 自定义标签 一个简单的自定义标签实现
使用jsp自定义标签的功能实现权限的控制。(如果用户没有某个模块的删除权限,就不现实这个删除按钮) 在整个项目中所有的页面都可以引入自定义的标签去做到权限的控制。 自定义标签文件 删除 可以控制页面中的每...
在网上学习jsp自定义标签的时候, 出现了异常, 在网上寻找了好久, 都没有找到合适的答案, 自己通过摸索最后成功, 分享给大家, 希望能够帮助到你, 自定义标签不能放在java Project中, 只能在java web Project中才可以.
创建JSP自定义标签.doc 创建JSP自定义标签.doc 创建JSP自定义标签.doc
java jsp自定义标签非常好用大家下载学习java jsp自定义标签非常好用大家下载学习java jsp自定义标签非常好用大家下载学习java jsp自定义标签非常好用大家下载学习java jsp自定义标签非常好用大家下载学习java jsp...
JSP自定义标签。在自定义标签的起始和结束标签之间的部分为标签体(Body)。 标签处理程序类:定义标签的行为,并在JSP引擎遇到自定义标签时调用执行。 标签库描述符(TLD)文件:描述标签库的XML文档,向JSP引擎...
JSP自定义Table标签demo JSP自定义Table标签demo JSP自定义Table标签demo
jsp、jstl自定义标签实现的分页,实现的还是比较好的,没有在request、session等范围保存过数据,在pageContext范围内保存过集合的数据, 实现的方法还是比较简单的,适用性还是比较广的,我是实在是没分了,平时也...
jsp自定义迭代标签 jsp自定义迭代标签
jsp自定义嵌套标签 自定义嵌套标签的定义和使用
jsp自定义标签库实现数据列表显示,包括代码,文档,希望对大家有帮助.