JSP入门

来源:互联网 发布:淘宝自然搜索排名优化 编辑:程序博客网 时间:2024/06/09 22:53

  JSP标签(JSP Tag Library)技术是在JSP1.1版本中才出现的,它支持用户在JSP文件中使用自定义的标签。通过JSP标签可以进一步使代码更简洁,逐渐把需要使用Java类才能处理的逻辑分离出来,放到JSP标签中,这样也可以进一步提高代码的复用程度。

  要自定义JSP标签要涉及到标签的处理类、标签的描述文件以及如何引用标签等几个方面的内容。

  一、标签的处理过程

  WEB容器解析JSP页面时,如果发现自定义标签,则会在JSP中寻找该标签引用的URI:例如JSP文件头部的引用<%@ tagliburi="/hellokitty.tld" prefix="dada"%>,此时它会找到该标签的uri ,uri的属性“/hellokitty.tld”在web.xml中已经定义了,例如:

 <taglib>
7n}p;z5?JGB2Ul.]%y0    <taglib-uri>/ hellokitty.tld</taglib-uri>ITPUB个人空间q!b^9~&JG v~Z
    <taglib-location>/WEB-INF/ hellokitty.tld</taglib-location>ITPUB个人空间!H&t!A(tca/F
  </taglib>

  此时WEB容器会通过uri在web.xml中查找到该标签的描述文件tld,例如“/WEB-INF/ hellokitty.tld”。而在tld描述文件中又定义了该标签的处理类,例如hellokitty.tld中有如下定义:

    <tag>ITPUB个人空间 Uf-lX)|.^E
      <name>sayHello</name>
!u9@0|,A#DA0      <tag-class>com.free.taglib.HelloKittyTag</tag-class>ITPUB个人空间dbBMK
      <body-content>empty</body-content>
T:a.J!WWR;J/UW0    </tag>

  要创建自定义的标签,可分为如下几步:

  1. 创建标签描述文件。

  在WEB-INF下新建一个tld文件,该文件描述了此tld文件将由哪些标签处理类完成操作,并且定义了该标签的属性。

  2. 创建标签处理类。

  标签处理类继承于TagSupport类或TagSupport类的子类,可覆盖处理标签的方法,例如doEndTag()方法,实现自定义标签。

  3. 修改web.xml文件。

  在web.xml中下添加节点,将标签的uri与具体标签描述文件绑定,例如:

<taglib>ITPUB个人空间X(`%wYk8Vu-kYf Zv
    <taglib-uri>/ hellokitty.tld</taglib-uri>
!p!U:DqD)Z!H0    <taglib-location>/WEB-INF/ hellokitty.tld</taglib-location>
+Y$Aei"A0</taglib>

  4、在JSP页面中使用标签

  首先在页面中导入标签,例如<%@ taglib uri="/ hellokitty.tld"prefix="dada"%>表示标签前缀为“dada”的标签将调用uri指定的标签,uri可以随便起名字,但一定要和web.xml中定义的uri相对应。导入标签后就可以在JSP页面中直接使用标签,例如:

  <dada:title begin="" end="footer"/>。

  二、标签的描述文件

  标签的描述文件是一个描述整个标签库标记信息和标签库中每个标签处理器以及其属性的XML文档。可以包含如下的一些元素。

  1. tlibversion:标签库版本号,是一个点式十进制数(例如1.0),最多为4组小数点分隔的数字组成。

  2. jspversion:标签库所需的JSP规范最低版本,例如JSP1.1。

  3. shortname:标签库的缩写名,JSP可以使用该名字作为库中标签的缺省前缀。

  4. uri:标签库唯一URI的元素。

  5. info:标签库描述信息。

  6. tag:加入标签,描述组成库的每个标签。

  在tag元素中包含标签及其属性的信息:

  1. name:与标签库的名字前缀一起使用的标签的名字, 是JSP容器唯一的标签标识。

  2. tagclass:实现标签的标签处理器类的全名。

  3. teiclass:标签附加信息(TEI)类的全名,TEI类给出关于标签处理器创建变量及有效性验证的信息。

  4. bodycontent:描述标签处理器如何使用标签体的内容,有三种取值:

  l empty:表示标签体必须为空;

  l JSP:表示脚本元素和模板及其它标签一样被评估。

  l tagdependent:内容被原封不动写入BodyContent,其它脚本元素以源码形式出现,而不被JSP容器解释。

  5. info:标签的描述性信息。

  6. attribute:使用标签时被编码的属性信息,用于定义标签的属性。

  “attribute”元素中又可以包含下面几个元素:

  1. name:属性的名字。

  2. required:属性是否必须。

  3. rtexprvalue:属性值能否用表达式指定。

  标签描述文件中tag和attribute是可以有子元素的,例如:

<taglib>ITPUB个人空间-G#`�ODq7nF{]}
    <tlibversion>1.0</tlibversion>ITPUB个人空间?_^rm?.{
    <jspversion>1.2</jspversion>ITPUB个人空间,u${;z[e#@7y
    <shortname>message</shortname>
S$oO_#nQ7q0    <uri>http://www.free.com/taglibs/HelloKitty</uri>
O,Bn7F�z-S0@:R0        ITPUB个人空间GKh/d*PjNb
    <tag>
8xmN8h Ii0      <name>sayHello</name>ITPUB个人空间s6j2Wl0zw
      <tagclass>com.free.taglib.HelloKittyTag</tagclass>
ATJs%E&/pL{.[$^0      <bodycontent>empty</bodycontent>
)dD#?)}9w0      <attribute>
(Y!o5uX ]sm0B"AY0        <name>key</name>ITPUB个人空间#k0W'g3Mh _m J
        <retuired>true</retuired>
6@!Q.Q_:}q3W0      </attribute>
X nMFd'Y-u_z0    </tag>
rlP0mLo!m s0</taglib>

  如果要在JSP页面中实现JSP标签,必须首先定义实现标签的类,然后在标签库描述文件(TLD)中将写好的类映射成JSP标签,最后在JSP文件中使用定义好的标签,就可以生成动态的JSP内容。