1、概述:
JSP本质其实仍然是Servlet,部署JSP后,服务器会将其自动转化成Servlet进行运行。用JSP取代Servlet的原因是利用Servlet实现用户界面比较繁琐,将大量的静态HTML代码穿插于Java代码中增加了代码维护工作的难度,并且也不利于前端开发人员和美工人员参与项目开发。
JSP 2 标准为开发者提供了自定义标签库的功能。使用自定义标签库的目的跟使用JSP的目的类似,为了使系统的界面开发和逻辑处理解耦,虽然使用JSP页面可以将界面开发和负责处业务逻辑的Servlet相分离,但是JSP页面中依然存在由Java代码构成的JSP脚本。引入自定义标签库技术使得开发者可以用自定义的标签来取代JSP页面中的Java脚本。使得前端的开发更加简洁,也更容易维护。
下文现总结了自定义标签库开发步骤。
2、基本用法:
JSP 2 标准下定义自定义标签库有以下几个步骤:
JSP本质其实仍然是Servlet,部署JSP后,服务器会将其自动转化成Servlet进行运行。用JSP取代Servlet的原因是利用Servlet实现用户界面比较繁琐,将大量的静态HTML代码穿插于Java代码中增加了代码维护工作的难度,并且也不利于前端开发人员和美工人员参与项目开发。
JSP 2 标准为开发者提供了自定义标签库的功能。使用自定义标签库的目的跟使用JSP的目的类似,为了使系统的界面开发和逻辑处理解耦,虽然使用JSP页面可以将界面开发和负责处业务逻辑的Servlet相分离,但是JSP页面中依然存在由Java代码构成的JSP脚本。引入自定义标签库技术使得开发者可以用自定义的标签来取代JSP页面中的Java脚本。使得前端的开发更加简洁,也更容易维护。
下文现总结了自定义标签库开发步骤。
2、基本用法:
JSP 2 标准下定义自定义标签库有以下几个步骤:
① 开发自定义标签处理类。② 编写标签库配置文件,格式为*.tld,一个配置文件配置了一个标签库,而一个标签库中可以拥有多个标签。③ 在JSP页面中使用该标签。
具体步骤如下:
·开发自定义标签处理类:
当JSP页面遇到自定义标签时,服务器会根据配置文件查找标签处理类来处理标签,每一个标签处理类定义了一个标签的处理方法。
自定义标签处理类要求继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport。同时还有如下2个要求:
① 如果标签类中包含属性,每个属性必须要有Getter和Setter方法。
② 重写doTag方法,这个方法定义了标签的处理过程。
样例如下:
package tag;
import java.io.IOException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class Tag1 extends SimpleTagSupport{
public void doTag() throws IOException {
getJspContext().getOut().write("<h1>tag test</h1>");
}
}
为了简洁,我们这里doTag方法中仅仅有一行代码,向页面输出“tag test”的字样,通过getJspContext().getOut()可以得到JSP页面的输出流,然后使用write方法输入文本文件。这样,就定义了一个标签处理类。
·编写标签库配置文件 *.tld:
配置文件本质上是一个标准的XML文件。该文件给出了一个标签库的配置信息,其中包含了多个标签的配置信息。这里给出样例如下:
·编写标签库配置文件 *.tld:
配置文件本质上是一个标准的XML文件。该文件给出了一个标签库的配置信息,其中包含了多个标签的配置信息。这里给出样例如下:
<?xml version="1.0" encoding="GBK"?>
<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>1.0</tlib-version>
<short-name>mytaglib</short-name>
<!-- 定义该标签库的URI -->
<uri>abc</uri>
<tag>
<name>tag1</name>
<tag-class>tag.Tag1</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
mytaglib.tld文件定义了一个新的标签库,其中配置了一个标签tag1,文件中各个参数的意义如下:
(1) 根元素是<taglib>,代表一个标签库,其中主要有3个子元素:
① <tlib-version> 该元素指明了标签库实现的版本,表示标签库内部的版本号,这个标签对程序没有太大的作用
② <short-name> 该元素指定了标签库的默认短命,该名称也没有太大的用处。
③ <uri> 这个子元素非常重要,它指明了该标签库的uri,是标签库的唯一标识,JSP页面中会使用uri来定位标签库。这里我们定义为:abc。
(2) 标签库中的每个标签用一个<tag>子元素来配置一个标签,它包含以下子元素:
① <name> 该元素指明了标签的名称。② <tag-class> 该元素指明了标签的处理类,这里我们配置了上文中实现的类Tag1。③ <body-content> 该元素指定了标签体的具体内容,这里我们设定为empty,表示该标签没有标签体,只能以空标签的形式使用,该元素还可以指定以下的值:
tagdependent:指定标签处理类自己负责处理标签体。