JSP自定义标签开发(一)—— HelloWorld 采用Tag接口实现开发
来源:互联网 发布:淘宝天猫后台操作流程 编辑:程序博客网 时间:2024/05/21 00:49
传统的标签必须实现javax.servlet.jsp.tagext.Tag接口,在Tag接口中,主要定义的是和标签生命周期相关的方法,比如:doStartTag(),doEndTag()等。在Tag中,可以通过PageContext对象来访问JSP页面的上下文。结合标签的生命周期标签的处理过程:
1当容器创建一个新的标签实例后,通过setPageContext()来设置标签的页面上下文。
2使用setParent方法设置这个标签的上一级标签,如果没有上一级嵌套,设置为null。
3设置标签的属性,这个属性在标签库描述文件中定义,如果没有定义属性,就不用调用此类方法。
4调用doStartTag方法,这个方法可以返回EVAL_BODY_INCLUDE和SKIP_BODY,当返回EVAL_BODY_INCLUDE时,就计算标签的Body,如果返回SKIP_BODY,就不计算标签的Body。5调用doEndTag方法,这个方法可以返回EVAL_PAGE或者SKIP_PAGE,当返回EVAL_PAGE时,容器将在标签结束时继续计算JSP页面其他的部分;如果返回SKIP_PAGE,容器将在标签结束时停止计算JSP页面其他的部分。
6调用release方法释放标签程序占用的任何资源。
开发标签时可以有两种选择:一种是实现原始的Tag接口,另一种是从TagSupport类继承。
一)实现Tag接口
按照下面的步骤进行:
1)开发标签实现类
2)编写标签描述文件,tld为扩展名。
3)在Web.xml中映射标签库的使用。
4)在JSP网页中调用标签。
1开发实现类(HelloTag_Interface.java)
package com.wsy.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
public class HelloTag_Interface implements Tag {
private PageContext pageContext;
private Tag parent;
public HelloTag_Interface() {
super();
}
/*
* (non-Javadoc) 结束标签的操作
*
* @see javax.servlet.jsp.tagext.Tag#doEndTag()
*/
@Override
public int doEndTag() throws JspException {
try {
pageContext.getOut().write("Hello world! 你好,世界!");
} catch (IOException e) {
throw new JspTagException("IO Error" + e.getMessage());
}
return EVAL_PAGE;
}
/*
* (non-Javadoc) 开始标签的操作
*
* @see javax.servlet.jsp.tagext.Tag#doStartTag()
*/
@Override
public int doStartTag() throws JspException {
return SKIP_BODY;// 不计算标签体
}
@Override
public Tag getParent() {
return parent;
}
/*
* (non-Javadoc) 释放标签体程序所占用的空间,比如使用了数据库,那么应该关闭这个连接
*
* @see javax.servlet.jsp.tagext.Tag#release()
*/
@Override
public void release() {
}
/*
* (non-Javadoc) 设置标签页面上下文
*
* @see
* javax.servlet.jsp.tagext.Tag#setPageContext(javax.servlet.jsp.PageContext
* )
*/
@Override
public void setPageContext(PageContext pageContext) {
this.pageContext = pageContext;
}
/*
* (non-Javadoc) 设置上一级标签
*
* @see javax.servlet.jsp.tagext.Tag#setParent(javax.servlet.jsp.tagext.Tag)
*/
@Override
public void setParent(Tag parent) {
this.parent = parent;
}
}
<?xml version="1.0" encoding="gb2312" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd" version="2.0">
<tlib-version>2.0</tlib-version>
<short-name>examples</short-name>
<uri>/demotag</uri>
<tag>
<name>hello_int</name>
<tag-class>com.wsy.tag.HelloTag_Interface</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
3 在Web.xml中映射标签库的使用。
<web-app>
...
<taglib>
<taglib-uri>/demotag</taglib-uri>
<taglib-location>/WEB-INF/tlds/mytag.tld</taglib-location>
</taglib>
...
</web-app>
4 在JSP网页中调用标签
<%@ taglib uri="/demotag" prefix="hello" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<p>以下的内容从Taglib中显示:</p>
<p><i><hello:hello_int/></i></p>
</body>
</html>
运行结果如下图所示。
- JSP自定义标签开发(一)—— HelloWorld 采用Tag接口实现开发
- JSP自定义标签开发(二)—— HelloWorld 从TagSupport继承实现开发
- 开发第一个JSP自定义标签(Tag)
- JSP自定义标签开发(八)—— xx.tag自定义标签开发之分页标签(jquery + div +css 美化)
- 开发自定义tag标签
- JSP自定义标签开发(四)——带标签体的标签实现
- jsp tag 自定义标签实现
- 自定义标签库的开发——传统标签tag、IterationTag接口(TagSupport),简单标签,转义标签,打包标签,java打为exe
- JSP自定义标签(tag)
- JSP 自定义标签(Tag)
- JSP:自定义标签——开发实例
- 通过Tag接口实现自定义标签
- jsp自定义标签开发
- JSP自定义标签开发
- 【jsp】开发自定义标签
- JSP自定义标签开发
- JSP自定义标签开发
- JSP自定义标签开发
- JavaScript 类型转换
- Java基础---Java---正则表达式-----匹配、切割、替换、获取等方法
- 续谈分数求和:最小公倍数的求法
- 武大网赛预赛 Problem 1538 - B - Stones II
- 扩展commons dbutils的JavaBean转换方式
- JSP自定义标签开发(一)—— HelloWorld 采用Tag接口实现开发
- libngx 贪心算法、动态规划、分治算法 np问题
- Windows程序(C# VS 2008)杂记之GDI+只能向右下奔跑的矩形
- Java 线程/内存模型的缺陷和增强
- OSX: 禁止Spotlight对一个目的索引
- 第五周项目三对象数组操作长方柱类
- Java Socket
- 可用的github ip
- IDEA 快捷键整理