jsp自定义标签学习笔记

=====================================
jsp自定义标签概述
JSP自定义标签(有些书籍中称为JSP标签扩展)可以看成是一种通过用户编写的标签处理器(实现特定接口的Java类)生成基于XML的脚本的方法。从概念上讲,标签就是很简单而且可重用的代码结构。

一般处理相似任务的若干个自定义标签会被打包为一个JAR文件,作为一个标签库来使用。

使用自定义标签的好处:

1、逻辑与显示的分离。
在没有使用自定义标签之前,我们一般使用scriptlet来进行逻辑处理。使用scriptlet可以快速编码,但随之而来的一个弊端就是逻辑与显示混杂在一起,从长远来看,这并不是一种好的解决方案。而自定义标签则能够将逻辑与显示分离,为项目带来了长期的收益。

2、代码可重用
自定义标签很容易从一个JSP项目迁移到其他项目。一旦建立了一个标签库,则只需要将所有的东西打包为一个JAR文件,你就可以在任何的JSP项目中重新使用。
 
3.可以对JSP进行无限扩展
标签库可以具备JSP规范(JSP 1.2)中的任何特性和功能,你可以无限制地扩展和增加JSP的功能,而无需要等待下一版本JSP的出现。例如,你对JSP的include调用不太满意。你可以建立自己的include标签,该标签执行的是你自己的规范。

=====================================
使用自定义标签来say hello world!
虽然自定义标签易于使用,不过要创建一个自定义标签还是有些复杂的。之所以有些复杂,是因为建立一个自定义标签要操作的文件相对较多,而且是不同类型的文件。我们以开发一个最简单的helloworld程序为例,来看看开发一个自定义标签的大致流程及需要操作的文件到底有哪些。

(1)首先需要编写标签处理器

package com.darkmi.tags;

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class HelloWorldTag extends TagSupport {

public int doEndTag() throws JspException {
try {
pageContext.getOut().println(“hello world!”);
} catch (IOException ignored) {
}
return EVAL_PAGE;
}
}

说明:
(1)
因为仅仅是输出一个字符串,不需要与标签体进行交互,所有我们选择继承TagSupport类;如果需要与标签体进行交互,需要选择继承BodyTagSupport类。

(2)
doStartTag()方法是遇到标签开始时会呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE与SKIP_BODY,前者表示将显示标签间的文字,后者表示不显示标签间的文字;
doEndTag()方法是在遇到标签结束时呼叫的方法,其合法的返回值是EVAL_PAGE与 SKIP_PAGE,前者表示处理完标签后继续执行以下的JSP网页,后者是表示不处理接下来的JSP网页。

(2)接下来创建一个rose-html.tld文件




1.0
1.2
rose-html
http://www.darkmi.com/taglibs/rose-html

helloworld
com.darkmi.tags.HelloWorldTag
empty


说明:
该文件被称为标签库描述符(tag library descriptor ,TLD)文件。标签库描述符文件向容器和任何要使用该自定义标签库的JSP页面描述该标签库。其中,每一组<tag>…</tag>标签描述了一个jsp自定义标签,一个标签库描述符中一般会有多组<tag>…</tag>标签,也就是说一个标签库中会有多个自定义标签。

name:标签名。
tag-class:标签处理类。
body-content:是否有标签体。

(3)配置web.xml文件


http://www.darkmi.com/taglibs/rose-html
/WEB-INF/rose-html.tld

(4)创建测试页面

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://www.darkmi.com/taglibs/rose-html" prefix="html" %>


c.jsp





=====================================
jsp自定义标签的组成及开发步骤

开发完第一个自定义标签之后,我们来看一下一个自定义标签由哪几部分组成:

1.标签处理器(必选):
标签处理器是标签库的真正核心。一个标签处理器(tag handler)引用它所需要的任何外部资源(JavaBean)并且负责访问JSP页面的信息(PageContext对象)。而JSP页面则把页面上设置的标签属性和标签体中的内容都传递给标签处理器,当标签处理器完成其处理过程后,它就会把处理后的输出结果回送给JSP页面做进一步处理。

2.标签库描述符(必选):
这是一个简单的XML文件,它记录着标签处理器的属性、信息和位置等信息。JSP容器通过这个文件来得知从哪里及如何调用一个标签库。

3.Web站点的web.xml文件(必选):
这是Web站点的初始化文件,在这个文件中,需要定义了Web站点中用到的自定义标签,以及用来描述每个自定义标签的tld文件。

4.JSP页面上的标签库声明(必选):
要在JSP页面中的使用某个自定义标签的话,需要使用标签库标示符在页面上进行声明。

5.JavaBean(可选):
为了得到Java与生具来的面向对象的好处,可重用的代码应该放到一个独立的代码容器中,也就是JavaBean。这些JavaBeans并不是标签库必不可少的一部分,但它们是标签库用来执行所分配任务的基础代码模块。

6.发布文件(可选):
如果你想重用自定义标签的话,你需要一个方法来将它由一个项目迁移到其他项目中去。将标签库打包为一个JAR文件是一个简单而且有效的方式。

参考helloworld的开发过程,我们可以总结出jsp自定义标签的开发步骤如下:
(1)编写标签处理器;
(2)编写标签库描述器;
(3)在web.xml中装载我们开发的自定义标签;
(4)在JSP页面中使用标签。

=====================================
有标签体的自定义标签的开发

待总结。。。

=====================================

此条目发表在java/j2ee分类目录,贴了, 标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据