当前位置: 首页 > 图文教程 > 网络编程 > JSP > JSP自定义标签的实现过程

JSP
写一个对搜索引擎友好的文章SEO分页类
ajax+jsp草稿自动保存的实现代码
什么是eclipse,eclipse的意思解析
经常听朋友说什么J2EE,终于知道点什么是J2EE了,汗一个
搭建SSH时的思考和遇到的几个问题的解决方法
RMI使用学习 小结
weblogic 8.1下重新编译java类但不用重启服务器的方法
JSP下动态INCLUDE与静态INCLUDE的区别分析
jsp中文乱码 jsp mysql 乱码的解决方法
Jsp页面实现文件上传下载类代码
下载完成后页面不自动关闭的方法
XStream使用方法总结附实例代码
惊现支撑1亿pv/天的超级数据库解决方案
jsp遍历文件夹下的文件的代码
JSP中include指令和include行为的区别
FCKeditor使用方法(FCKeditor_2.6.3)详细使用说明
AJAX FCKEditor Rich Editor整合篇
Java下使用Oracle存储过程(详解)
java AJAX实现级联下拉框
java去掉html标签 必须首先去掉双引号的正则

JSP自定义标签的实现过程


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 53 ::
收藏到网摘: n/a

  2001年接触jsp,当时标签库、N层结构开发、设计模式等j2ee的思想还刚刚萌芽,每个jsp文件就是纯粹的java嵌入代码、javascript、html的混杂,以实现功能为第一要务。2003年首次接触taglib,对apache组织上的jstl略有了解,但没有真正在项目中使用。随着struts的流行,jstl的风头已经被盖过,但据说core这个jstl中的标签库使用的还是很多。本次基于学习的目的,重新体验了一下自定义标签的实现过程。做一个最简单的自定义标签<mytag:hello/>,效果是打印hello world!

1、编写标签处理类HelloTag(实现javax.servlet.jsp.tagext.Tag类)

package cn.itcast.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
public class HelloTag implements Tag {
    private PageContext pageContext;
    private Tag tag;
   
    public int doEndTag() throws JspException {
        try {
            pageContext.getOut().print(\"hello world!\");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Tag.EVAL_PAGE;
    }
    public int doStartTag() throws JspException {
        return Tag.SKIP_BODY;
    }
    public Tag getParent() {
        return null;
    }
    public void release() {
    }
    public void setPageContext(PageContext arg0) {
        this.pageContext = arg0;
    }
    public void setParent(Tag arg0) {
        this.tag = arg0;
    }
}

注意Tag中定义的几个常量的含义(EVAL_PAGE,SKIP_BODY等)

2、编写hellotag.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>
    <short-name>tagSample</short-name>[Page]
    <uri>/hellotag</uri>
    <tag>
        <name>hello</name>
        <tag-class>cn.itcast.tag.HelloTag</tag-class>
        <body-content>empty</body-content>
    </tag>
</taglib>

3、编写测试jsp文件

<%@ page contentType=\"text/html; charset=GBK\" %>
<%@ page errorPage=\"error.jsp\" %>
<%@ taglib uri=\"/WEB-INF/hellotag.tld\" prefix=\"mytag\" %>
<html>
<head>
<title></title>
</head>
<body>
<mytag:hello/>
<mytag:hello>haha</mytag:hello>
</body>
</head>

测试结果应该是打印出两个hello world!

标签库的优点

1、最大限度地消除jsp页面中嵌入的java代码
2、增强代码扩展性、可读性、代码复用,简化了jsp页面编写的工作量