Tiglib指令与自定义标签
<!--[if !supportLists]-->1.
<!--[endif]-->taglib指令
在JSP页面中,可以直接使用JSP提供的一些动作元素标记来完成特定功能,如使用<jsp:include>包含一个文件。通过使用taglib指令,开发者就可以在页面中使用这些基本标记或自定义的标记来完成特殊的功能。
taglib指令的使用格式如下:
<%@
taglib uri="tagURI" prefix="tagPrefix" %>
参数说明
uri属性:该属性指定了JSP要在web.xml文件中查找的标签库描述符,该描述符是一个标签描述文件(*.tld)的映射。在tld标签描述文件中定义了该标签库中的各个标签名称,并为每个标签指定一个标签处理类。另外,通过uri属性直接指定标签描述文件的路径,而无需在web.xml文件中进性配置,同样可以使用指定的标记。
prefix属性:该属性指定一个在页面中使用由uri属性指定的标签库的前缀。但是前缀命名不能为:jsp、jspx、java、javax、sun、servlet和sunw开发者可以通过前缀来引用标签库中的标签。
如
一个简单的使用JSTL的代码:
<%@
taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>
<c:set
var="name" value="hello"/>
上述代码通过<c:set>标签将“hello”值赋给了变量“name”。
引入strut2的标签:
<%@ tablig=”/struts-tag” prefix=”s”%>
2. 自定义标签
步骤如下
1) 实现自己的处理类,一般是从TagSupport,BodyTagSupport继承
2) 写自定义Tag的tld文件
3) web.xml中指定你的tld文件(现在的服务器可以不需要此步骤)
4) 在JSP页面使用自定义标签
Tag属性
Tag.EVAL_BODY_INCLUDE 包含主体内容
Tag.SKIP_BODY 不包含主体内容
Tag.EVAL_PAGE 包含后面的页面内容
Tag.SKIP_PAGE 不包含主体的内容
Tag的生命周期:
3 通过继承TagSupport来实现自定义标签
示例,一个简单的标签:
1)自定义类:
package mytag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class OutputTag extends TagSupport {
private static final long serialVersionUID = -1696650192224172611L;
@Override
public int doStartTag() throws JspException {
// TODO Auto-generated
method stub
JspWriter out = this.pageContext.getOut();
try {
out.println("Hello
World!");
} catch (IOException e) {
// TODO Auto-generated
catch block
e.printStackTrace();
}
return super.doStartTag();
}
}
2)自定义Tag的tld文
<?xml version="1.0"
encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun
Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "web-jsptaglibrary_1_2.dtd" >
<taglib>
<tlibversion>1.0</tlibversion> <!-- 你自定义标签的版本数 -->
<jsp-version>1.2</jsp-version> <!-- 指定你的JSP版本,扩张签是在JSP1.2之后兼容的 -->
<shortname>out</shortname> <!-- 标签的简写 -->
<tag>
<name>tags</name> <!-- 标签名字 -->
<tagclass>mytag.OutputTag</tagclass> <!-- 指定你的标签的类 -->
</tag>
</taglib>
其中,标签库元素<taglib>属性:表格如下
<taglib>属性表格</taglib>
|
属性
|
描述
|
tlib-version
|
本标签库实现版本
|
jsp-version
|
标签库依赖的JSP版本
|
short-name
|
被JSP创作工具使用的一个短的默认名词
|
uri
|
指定这个标签库的uri信息
|
display-name
|
被工具使用的显示用的名字
|
small-icon
|
被工具使用的小图标
|
large-icon
|
被工具使用的大图标
|
description
|
本标签的描述
|
validator
|
TLD验证信息
|
listener
|
实践监听器规范
|
tag标签相关属性:
tag标签相关属性表
|
属性
|
描述
|
name
|
tag标签唯一的名称
|
tag-class
|
tag标签的处理类
|
tei-class
|
tag标签的TagExtraInfo类
|
body-content
|
标签主体的内容
|
display-name
|
显示的名称
|
small-icon
|
被工具使用的小图标
|
large-icon
|
被工具使用的大图标
|
description
|
本标签的描述
|
variable
|
脚本变量的信息
|
attribute
|
标签属性的信息
|
3)web.xml中指定你的tld文件
<jsp-config>
<taglib>
<!--设置自定义标签的uri(不一定存在,但是一定要唯一),为页面的部署做好准备 -->
<taglib-uri>http://test.com/mytag.tld</taglib-uri>
<!--定位你的tld文件的相对路径 -->
<taglib-location>/WEB-INF/mytag.tld</taglib-location>
</taglib>
</jsp-config>
4)在JSP页面中使用
<%@ page language="java"
import="java.util.*" pageEncoding="ISO-8859-1"%>
<%-- <%@ taglib uri="/WEB-INF/mytag.tld"
prefix="out" %> --%>
<%@ taglib uri="http://test.com/mytag.tld"
prefix="out" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.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>
<out:tags/>
</body>
</html>
4.通过继承BodyTagSupport来实现自定义标签
BodyTagSupport的生命周期
<!--[endif]-->
BodyTagSupport的处理流程:
1) 当容器创建一个新的标签实例后,通过setPageContext来设置标签的页面上下文.
2) 使用setParent方法设置这个标签的上一级标签,如果没有上一级嵌套,设置为null.
3) 设置标签的属性,这个属性在标签库描述文件中定义,如果没有定义属性,就不调用此类方法.
4) 调用doStartTag方法,这个方法可以返回EVAL_BODY_INCLUDE和SKIP_BODY,当返回EVAL_BODY_INCLUDE时,就计算标签的body,如果返回SKIP_BODY,就不再计算标签的body.
5) 调用setBodyContent设置当前的BodyContent.
6) 调用doInitBody,如果计算BodyContent时需要进行一些初始化,就在这个方法中进行.
7) 每次计算完Body后调用doAfterBody,如果返回EVAL_BODY_AGAIN,表示继续计算一次Body,直到返回SKIP_BODY才继续往下执行.
8) 调用doEndTag方法,这个方法可以返回EVAL_PAGE或者SKIP_PAGE,当返回EVAL_PAGE时,容器将在标签结束时继续计算JSP页面其他的部分;如果返回SKIP_PAGE,容器将在标签结束时停止计算JSP页面其他的部分.
9) 调用release()方法释放标签程序占用的任何资源。
一个简单的示例
1)自定义类:
package mytag;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class PrintBodyTag extends BodyTagSupport {
private int counts;
public PrintBodyTag() {
super();
}
public void setCounts(int counts) {
this.counts = counts;
}
public int doStartTag() throws JspTagException {
System.out.println("doStartTag...");
if (counts > 0) {
return EVAL_BODY_AGAIN;
} else {
return SKIP_BODY;
}
}
public void setBodyContent(BodyContent bodyContent)
{
System.out.println("setBodyContent...");
this.bodyContent = bodyContent;
}
public void doInitBody() throws JspTagException {
System.out.println("doInitBody....");
}
public int doAfterBody() throws JspTagException {
System.out.println("do After body..." + counts);
if (counts > 1) {
counts--;
return EVAL_BODY_AGAIN;
} else {
return SKIP_BODY;
}
}
public int doEndTag() throws JspTagException {
System.out.println("do end Tag...");
try {
if (bodyContent != null) {
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}
} catch (java.io.IOException e) {
throw new JspTagException("IO Error: " +
e.getMessage());
}
return EVAL_PAGE;
}
}
2)自定义Tag的tld文
<?xml version="1.0"
encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun
Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "web-jsptaglibrary_1_2.dtd" >
<taglib>
<tlibversion>1.0</tlibversion> <!-- 你自定义标签的版本数 -->
<jsp-version>1.2</jsp-version> <!-- 指定你的JSP版本,扩张标签是在JSP1.2之后兼容的 -->
<shortname>out</shortname> <!-- 标签的简写 -->
<tag>
<name>tags</name> <!-- 标签名字 -->
<tagclass>mytag.OutputTag</tagclass> <!-- 指定你的标签的类 -->
</tag>
<tag>
<name>bodytags</name> <!-- 标签名字 -->
<tagclass>mytag.PrintBodyTag</tagclass> <!-- 指定你的标签的类 -->
<attribute>
<name>counts</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
3)在JSP页面中使用
<out:bodytags counts="5">HHHHHHHHHHH
<br/>
</out:bodytags>
4)执行效果
JSP页面的效果
HHHHHHHHHHH
HHHHHHHHHHH
HHHHHHHHHHH
HHHHHHHHHHH
HHHHHHHHHHH
<!--[endif]-->
控制打印的效果:
doStartTag...
setBodyContent...
doInitBody....
do After body...5
do After body...4
do After body...3
do After body...2
do After body...1
do end Tag...
- 大小: 25 KB
- 大小: 28.8 KB
分享到:
相关推荐
2. **标签处理程序(Tag Handler)**:与自定义标签对应的Java类,实现了`javax.servlet.jsp.tagext.Tag`接口或其子接口。当JSP引擎遇到自定义标签时,会实例化这个类并调用相应的方法。 3. **标签文件(Tag File)...
之后,在JSP页面中通过导入taglib指令来使用这个带属性的自定义标签,并通过count属性来控制输出内容的重复次数。 8. 注意事项:在创建自定义标签时需要注意,属性的数据类型必须是JSP容器能够自动转换的类型,否则...
jsp、jstl自定义标签实现的分页,实现的还是比较好的,没有在request、session等范围保存过数据,在pageContext范围内保存过集合的数据, 实现的方法还是比较简单的,适用性还是比较广的,我是实在是没分了,平时也...
**JSP20Examples-自定义标签** JSP(JavaServer Pages)是Java技术中用于构建动态网页的应用程序,它允许开发者将静态HTML与动态Java代码结合在一起,以实现更灵活的网页设计。在JSP20Examples这个压缩包中,我们...
3. 在JSP页面中引入标签库:通过`<%@ taglib %>`指令,引入TLD文件,并指定标签库的URI。 在实现过程中,开发者可能遇到了以下几个关键点: - 数据绑定:要像ASP.NET GridView那样展示数据,需要将数据源(可能是...
3. **在JSP页面中使用自定义标签**:在JSP页面中,通过`<jsp:taglib>`指令引入TLD文件,然后就可以像使用内置标签一样使用自定义标签了。例如,`<myTag:myTag attribute1="value1" attribute2="value2">`。 在给定...
- **引入TLD到JSP页面**:在JSP页面中通过`<%@ taglib %>`指令引入TLD文件,以便使用自定义标签。 **5. 使用自定义标签** 在JSP页面中,自定义标签就像使用JSTL或Struts标签一样,通过`...
在JSP页面中,通过`指令`引入自定义标签库,并使用`<tag-name>属性...</tag-name>`的格式调用自定义标签。 **二、自定义标签函数** 自定义标签函数是在JSP 2.0中引入的一种新的特性,它允许开发者像使用EL...
3. 在JSP页面中使用标签:通过`<%@ taglib %>`指令引入标签库,并在页面中使用自定义标签。 【HTML在线编辑器】 HTML在线编辑器是一种Web应用程序,允许用户在浏览器中直接编写和预览HTML代码。这种编辑器通常具有...
**标签解析:**"jsp-api" 这个标签明确了主题与JSP API有关,API(Application Programming Interface)是一组预定义的函数、类和接口,供开发者在编写软件时使用,以便与特定的系统或库进行交互。在这里,它特指JSP...
3. **在JSP页面中使用**:在JSP页面中,通过`<%@ taglib %>`指令引入自定义标签库,然后就可以像使用内置标签一样使用自定义标签了。 二、分页封装 分页是网页应用中常见的需求,通过自定义标签可以方便地实现。...
二、创建自定义标签库 创建自定义标签库首先需要编写TLD文件,该文件用于描述标签的属性、行为以及与之关联的Java类。TLD文件通常以`.tld`为扩展名,其中包含了标签的元数据,例如标签名称、类路径、属性等。 三、...
总结来说,通过自定义JSP标签“displayDate”,我们可以更方便地在JSP页面中处理日期显示,使代码更加简洁且易于复用。这不仅提高了开发效率,也使得页面逻辑与视图层分离,符合MVC设计模式的原则。在实际项目中,...
### jsp自定义嵌套标签:定义与使用详解 在JavaServer Pages(JSP)技术中,自定义标签是扩展其功能的一种强大手段。而自定义嵌套标签,则是在此基础上进一步提升灵活性和重用性的机制。本文将深入探讨自定义嵌套...
"jsp自定义标签所需jar包"主要指的是在Java Web开发中,为了创建和使用自定义JSP标签,我们需要包含特定的库,如"javax.servlet.jsp-api-2.2.1-sources.jar",它提供了Servlet和JSP API的源代码。理解并配置这些依赖...
总的来说,`jsp-api-2.1.jar`作为JSP 2.1版本的核心库,包含了处理JSP页面生命周期、自定义标签、页面指令、错误处理等所有核心功能的类和接口。对于Java Web开发者而言,深入理解并熟练运用这些API,能够提升开发...
在JavaServer Pages (JSP) 技术...总结,自定义JSP标签是JSP开发中强大的工具,通过创建自己的标签库,可以提升项目的可维护性和代码质量。理解和掌握自定义标签的创建与使用对于任何JSP开发者来说都是必要的基础技能。
在JavaServer Pages (JSP) 开发中,为了提高代码的可维护性和重用性,开发者经常使用自定义标签库。本主题将深入探讨“jsp自定义分页标签”,这是一种在网页展示大量数据时非常实用的功能,它可以有效地帮助用户浏览...
JSP(JavaServer Pages)自定义标签是JSP技术中一个重要的特性,允许开发者创建可重用的、自定义的组件,从而提高代码的可读性和可维护性。本文将深入讲解JSP自定义标签的相关概念、格式、处理过程以及创建和使用...
**正文** `jsp-api-2.1.jar`是Java...总结,`jsp-api-2.1.jar`是Java Web开发中的关键组件,它为开发者提供了实现动态网页的强大工具。理解其工作原理和特点,能有效提高开发效率,构建出高效、可扩展的Web应用。