开发自定义标记需要有两个组件:
1、一个是描述标记特征的标记库描述文件(TLD文件)
2、另一个是Java类,也称为标记处理器,为了完成标记的行为,JSP容器要执行标记处理器。
自定义标签实现过程:
1、写标签处理器类:TestTag.java。
2、写tld文档:用来指定标签的名字,标签库等。
3、用JSP来测试(指定标签库的位置tld,指定前缀名,使用标签)。
首先编写标签处理器类,标签处理器类需要继承javax.servlet.jsp.tagext.TagSupport或者javax.servlet.jsp.tagext.BodyTagSupport,二者区别暂时不知道,如果有高手知道,请给与指导,谢谢先。一般实现doStartTag和doEndTag方法,例如:
public class ExampleTag extends TagSupport{
public int doStartTag(){
//当处理开始标记的时候调用该方法
}
public int doEndTag(){
//当处理结束标记的时候调用该方法
}
}
doStartTag方法和doEndTag方法的返回值说明:
SKIP_BODY:跳过自定义标签间的代码, 跳过了开始和结束标签之间的代码,一般是在doStartTag中使用;
SKIP_PAGE:跳过在此之后的所有页面内容,忽略剩下的页面,一般是在doEndTag中使用;
EVAL_BODY_INCLUDE:执行自定义标签间内容,处理嵌套的标签,一般是在doStartTag中使用,由负责处理标签正文的tag接口提供 ;
EVAL_BODY_BUFFERED :对包含的内容进行解析 一般是在doStartTag中使用,由负责处理标签正文的bodyTag接口提供,目的是通知jsp容器作好读取正文的工作(创建一个body-content包装正文和获取存放操作结果的out对象,便于以后的操作和输出).
EVAL_BODY_AGAIN:再次执行自定义标签间内容,处理标签正文,嵌套标签的iteratorTag接口的使用 ;
EVAL_PAGE:执行标签后页面内容, 继续执行下面的页, 一般是在doEndTag中使用 ;
常用的返回值为:EVAL_BODY_INCLUDE。
常用的属性有pageContex。
例如:
package com.test;
import java.io.IOException;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class TestAttributeTag extends BodyTagSupport {
//自定义标签支持带参数
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int doStartTag(){
try {
pageContext.getOut().print("Hello "+name);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return EVAL_BODY_INCLUDE;
}
public int doEndTag(){
return EVAL_BODY_INCLUDE;
}
}
然后讨论一下TLD文档编写,
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version> //标签版本
<jsp-version>1.2</jsp-version> //标签依赖jsp的版本
<short-name>zl</short-name> //默认前缀名称
<uri>http://www.test.com</uri> //指定标签库德uri
<tag>
<name>testtag</name> //标签名称
<tag-class>com.test.TestAttributeTag</tag-class> //标签处理器类
<body-content>JSP</body-content> //标签主体内容,一般选择JSP
<attribute> //标签的参数name
<name>name</name>
<required>true</required> //参数是否必须,true表示必须,false反之
<rtexprvalue>true</rtexprvalue> //是否支持EL表达式
<type>java.lang.String</type> //参数类型
<description>用户名称</description> //参数描述
</attribute>
</tag>
</taglib>
最后用jsp页面测试自定义标签,例如:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="zl" uri="http://www.test.com" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'ZidingyiTag.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is my JSP page. <br>
<zl:testtagname="test"></zl:testtag>
</body>
</html>
例子比较简单,有什么不对地方,欢迎大家批评!
转:http://beautifulsmallsnow.blog.163.com/blog/static/280985012010122111644689/
参考:http://www.iteye.com/topic/157737
相关推荐
自己做的一个小例子,实现JSTL自定义标签。功能:输入x和y,点击按钮后循环输出y次x。
这次整理自定义标签主要是项目的需要,要将一些写死的url信息配置于配置文件中,这样发版的时候改动起来相当方便
JSTL 以及自定义标签开发相关 JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out、set、remove、catch 2.流程控制标签:if、choose、when、otherwise 3.循环标签:forEach、forTokens 4.URL...
jstl自定义标签和函数思维导图
NULL 博文链接:https://zhouxianglh.iteye.com/blog/858182
这个压缩包里有我在学习JSTL自定义标签时写的一些自定义标签实例,如果你也在学JavaWeb技术,那么我相信这些源码会对你有帮助的
JSTL 开发自定义标签使用的jar jstl.jar standard.jar
jsp、jstl自定义标签实现的分页,实现的还是比较好的,没有在request、session等范围保存过数据,在pageContext范围内保存过集合的数据, 实现的方法还是比较简单的,适用性还是比较广的,我是实在是没分了,平时也...
NULL 博文链接:https://wushenbao.iteye.com/blog/810955
EL、JSTL、自定义标签、过滤器的ppt
jh-plugins是一项基于JSTL的自定义标签(插件)库,致力于打造一处实现、任何项目通用的开源项目。 jh-plugins已实现标签库:分页 jh-plugins特点:高效、轻巧、简单、适用(可融合与任何B/S架构的java项目) jh-...
java中用到的jstl标签 ,大家都知道 jstl自定义标签的很多使用性 所以都喜欢用 但是有些找不到jar包的麻烦
本资源代码中包含jstl的标签库定义以及自定义EL标签使用的详细说明,参见压缩文件中说明即可,欢迎各位技术员下载参考及使用
JavaWeb-12:自定义标签库开发&JSTL标签库
JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的。在告别modle1模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定义标签的开发难度较大...
自己写的自定义标签库,实现JSTL常用的功能。
jstl 文档标准标签库JSTL – JSP Standard Tag Library,是JSP的标准标签库 自定义标签库 自定义函数
从JSP 1.1规范开始JSP就支持使用自定义标签,使用自定义标签大大降低了JSP页面的复杂度,同时增强了代码的重用性,因此自定义标签在WEB应用中被广泛使用。许多WEB应用厂商都开发出了自己的一套标签库提供给用户使用...
jstl标签包,用于jsp自定义标签,内包含jstl.jar standard.jar两个包