标签编程

更新时间:2022-08-25 18:44

为了真正实现JSP文件中不包含任何Scriptlet代码,还需要通过标签来解决。标签分为自定义标签和开源工具提供的通用标签。

简介

即便是在MVC设计模式中,仅通过使用EL表达式语言,很多时候JSP页面还是会存在大量的Scriptlet代码,为了真正实现JSP文件中不包含任何Scriptlet代码,还需要通过标签来解决。标签分为自定义标签和开源工具提供的通用标签。自定义标签通过标签编程来实现,由于标签编程较难,加上用户自定义的标签一般都很繁琐、不通用,所以实际开发中并不常用,读者只需要了解基本原理即可。真正在开发中使用的都是各种开源组件中提供。

JSP的开发是在HTML代码中嵌人大量的Java代码,但是这样使得JSP页面中充满了Java程序,修改或维护起来非常不方便,例如,下面的代码中就出现了大量的Scriptlet代码。

【示例代码1】包含Scriptlet代码的程序。

<%

int rows=i0;

int cols=10;

for(int X=0;X

%>

<%

for(int Y=0;y

%>

<% }

%>

<%

%>

本程序使用JSP完成表格的输出,但是里面存在过多的Scriptlet代码,所以这种程序阅读和修改起来非常麻烦,标签编程的主要目的就是为了减少页面中的Scriptlet代码,使程序更加便于理解和修改。

下面通过一个简单的程序演示标签编程,本程序的主要功能依然是在JSP页面上输出“Hello World!”的信息。

要想实现一个标签,可以直接继承javax.servlet.jsp.tagext.TagSupport类,如果要定义的标签内没有标签体,则直接覆写TagSupport类中的doStartTag()方法即可。

【示例代码2】定义标签的操作类。

源文件名称:HelloTag.java

package org.ixy.tag;

import javax.servlet.Jsp.JspException;

import javax.serv]et.Jsp.JspWriterj

import javax.servlet.Jsp.tagext.TagSupport;

public class HelloTag extends TagSupport{ //继承标签支持类TagSupport

public int doStartTag()throws JspException{ //覆写doStartTag()方法

JspWriter out=super.pageContext.getOut()j //取得页面输出流对象

try{

out.println(”Hello World!”)j //进行页面输出

)catch(Exception e){ //此处产生异常需要处理

e.printStackTrace()j

}

return TagSupport.SKIP—BODY; //没有标签体

)

)

在HelloTag类中,首先继承了TagSupptort标签支持类,之后覆写了doStartTag()方法,此方法主要的作用是在标签起始时进行调用,之后通过TagSupptort中的pageContext属性,取得了当前页面的输出对象,进行页面的输出,由于此时开发的标签没有任何的标签体,所以在程序的最后返回的是一个SKIP—BODY的常量,表示不执行标签体的内容。 一定标签类定义完成之后,下面就需要编写标签描述文件(Tag Library Descriptor,

TLD),在*.tld文件中,可以描述标签的名称、简介、处理类和标签使用到的各个属性等。

【示例代码 3】定义标签描述文件。

源文件名称:hellotag.tld

xmlns:xsi=”http://www.w3.org/200l/XMLSchema—instance’’

xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee/web

version=”2.1’。>

1.0

firsttag

hello

org.ixy.tag.Hel]oTag

empty

在hellotag.tld文件中,详细地描述了此标签的版本和支持的JSP版本,其中最重要的是在元素中定义的元素,表示的是标签中使用的名称。每个元素的具体作用如下:

:TLD文件的根元素,其中可以定义多个元素。

:标签库的版本,用于开发和配置管理。

:一个标签的短名称,主要用于标签的编写工作。

:描述标签库中的每一个标签。

:标签的名称。

:标签处理类的路径。

:表示标签中是否包含标签体,如果是empty表示标签体为空。

编写完*.tld文件之后,下面即可通过]SP访问此标签,JSP中调用标签的语法如下:

<%@taglib prefix=”标签前缀”uri=”TLD文件路径”%>

prefix表示的是标签使用时的前缀,uri表示的是此标签对应的*.tld文件的路径

【示例代码4】标签测试程序。

源文件名称:hellotag.jsp

<%@page language=”java”import=”java util.*”pageEncoding=”GBK”%>

<%@taglib prefix=”mytag”uri=”/Web—INF/hellotag.tld”%>

My Jsp’hellotag.Jsp‘starting page

在hellotag.jsp页面中,首先通过<%@taglib%>定义了一个标签的前缀名称

“mytag”,之后通过此前缀名称调用了hellotag.tld文件中定义的标签,调用标签的名称为

“hello”。程序的运行结果如图1所示。

此时,虽然完成了一个标签的开发,但是也存在一个不足,本案例中的程序是在JSP(hellotag.jsp)中直接找到了标签描述文件(hellotag.tld),如果该标签文件名称过长,编写起来会很麻烦,若是更换标签描述文件的名称,修改起来更加麻烦,所以,一般会采取以下方法:在web.xml文件中对所有的*.tld文件进行名称的映射,以后直接在JSP页面中使用映射名称即可访问标签描述文件,修改web.xml,映射TLD文件,如下所示:

pxxy_hello

/Web—INF/hellotag.tld

此处将“/Web—INF/hellotag.tld”文件映射成pxxy—hello名称,所以在以后所有的JSP

中直接通过pxxy—hello即可访问此标签描述文件。

修改hellotag.jsp,使用映射名称访问标签:

<%@taglib prefix=”mytag”uri=”pxxy hello”%>

此时JSP通过映射名称访问标签描述文件,以后维护时也更加容易,程序运行结果与上面的一致。

通过上述标签案例的操作可以知道,一个标签的开发包含以下几个部分。

·标签处理类:HelloTag.java。

·标签描述文件:hellotag.tld。

·JSP页面:通过<%@taglib%>定义标签。

·在web.xml文件中配置映射名称。(可选)

一个标签的操作中*.tld是一个最重要的文件,所有标签的具体信息都要通过此文件定义,此文件的导人分两种情况。当一个JSP页面第一次运行时,首先会根据JSP文件编写的<%@taglib%>中的uri属性找到对的*.tld文件,并将其加载到JVM中;而如果是第二次运行此标签,由于JVM已经存在此*.tld文件,所以不会再重复加载。

JSTL简介

使用标签库可以避免过多的Scriptlet代码,但是如果采用自定义的标签库做法,会非常繁琐且不通用,所以开发中一般是借助于一些开源工具使用一些公共的标签,JSTI。就是一种使用广泛的通用标签。

JSTL(JSP Standard Tag Library,JSP标准标签库)是一个开放源代码的标签组件,由

Apaceh的Jakarta小组开发,可以直接从http://tomcat.apache.org/taglibs/上下载。JSTL 1.2版本中主要有如下几个标签库支持,如下所示。

JSTL1.2

此时,即可使用JSTL进行项目开发

核心标签库

JSTI。的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、Url操作标签。使用这些标签能够完成JSP页面的基本功能,减少编码工作。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}