启网、虚拟主机、域名注册、服务器合租
精致合租、5人、10人、15人服务器合租、freebsd合租
当前位置:站长中国 > JSP技巧 > JSP自定义标签的实现过程

JSP自定义标签的实现过程

2009 - 03 - 12  作者:  来源:  浏览:554  评论: 发布评论 问高手
推荐:启网 - 专业的主机、服务器合租提供商 17hz.net - 5年服务器合租精品服务
    

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页面编写的工作量

 



推荐教程