JSP2自定义标签(一)——简单标签
来源:互联网 发布:mc9s12x 串口编程 编辑:程序博客网 时间:2024/05/16 18:37
本文摘自:李刚 著 《轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发》
在JSP规范的1.1版中增加自定义标签库规范,自定义标签库是一种非常优秀的表现层组件技术。通过使用自定义标签库,可以在简单的标签中封装复杂的功能。
为什么要使用自定义标签呢?主要是为了取代丑陋的JSP脚本。在HTML页面中插入JSP脚本有如下几个坏处:
(1)JSP脚本非常丑陋,难以阅读;
(2)JSP脚本和HTML代码混杂,维护成本高。
(3)HTML页面中嵌入JSP脚本,导致美工人员难以参与开发。
处于以上考虑,我们需要一种在页面中使用的标签,这种标签要具有和HTML标签类似的语法,但可以完成JSP 脚本的功能——这种标签就是JSP自定义标签。
在JSP1.1规范中开发自定义标签库比较复杂,JSP2简化了标签库的开发,在JSP2中开发标签库只需如下几个步骤:
(1)开发自定义标签处理类;
(2)建立一个*.tld文件,每个*.tld文件对应一个标签库,每个标签库对应多个标签。
(3)在JSP文件中使用自定义标签。
提示:标签库是非常重要的技术,通常来说,初学者,普通开发人员自己开发标签库的机会很少,但如果希望成为高级程序员,或者希望自己开发通用框架,就需要大量开发自定义标签。所有的MVC框架,如Struts2、SpringMVC、JSF等都提供丰富的自定义标签。
一. 开发自定义标签类
当我们在JSP页面使用一个简单的JSP标签时,底层实际上由标签处理类提供支持,从而可以使用简单的标签来实现复杂的功能,从而使团队更好地协作开发。
自定义标签都必须继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,除此之外,自定义标签还有如下的要求:
(1)如果以标签类包含属性,每个属性都有对应的getter和setter方法;
(2)重写doTag方法,这个方法负责生成页面内容。
下面开发一个最简单的自定义标签,该标签负责在页面上输出HelloWorld:
package ppp;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class HelloWorldTag extends SimpleTagSupport{//重写doTag()方法,该方法在标签结束时生成页面内容public void doTag() throws JspException,IOException{//获取页面输出流,并输出字符串getJspContext().getOut().write("Hello World");}}
上面的这个标签处理类非常简单,它继承了SimpleTagSupport父类,并重写了doTag()方法,而doTag()方法则负责输出页面的内容。该标签没有属性,所以无需提供Setter和Getter方法。
二. 建立TLD文件
TLD是Tag Library Definition的缩写,即标签库定义,文件的后缀是tld,每个tld文件对应一个标签库,一个标签库中可以包含多个标签,tld文件也可以被称作标签库定义文件。
标签库定义文件的根元素是taglib,它可以包含多个tag子元素,每个tag子元素都定义一个标签。通常我们都可以到web容器下复制一个标签库定义文件,并在此基础上进行修改即可。例如在tomcat6.0中,在webapps\examples\WEB-INF\JSP2路径下包含了一个jsp2-example-taglib.tld文件。这就是一个示范用的标签库定义文件。
将该文件复制到web应用的WEB-INF\路径下,或者任意WEB-INF子路径下 ,并对该文件进行简单的修改,修改后的mytaglib.tld文件如下:
上面标签库定义文件也是标准XML文件,该XML文件的根元素是taglib元素,因此我们编写标签库定义文件时都直接添加该元素即可。
taglib有2个字元素:
(1)tlib-version:指定该标签库的事先版本,这是一个作为标识的内部版本号,对于程序没有太大的作用。
(2)short-name:标签库的默认短名,该名称通常也没有太大的用处。
(3)uri:这个属性通常非常重要,他指定了标签库的URI,相当于指定了标签库的唯一标识。JSP页面使用标签库时就是根据该名称来使用此标签库的。
除此之外,taglib元素下可以包含多个tag元素,每个tag元素定义一个标签,tag元素下至少要包含以下三个子元素:
(1)name:该标签库的名称,这个属性很重要,JSP页面就是根据该名称来使用此标签的。
(2)tag-class:指定标签的处理类,毋庸置疑,这个标签非常重要,他指定了标签有哪个Java类来处理。
(3)body-content:这个属性也很重要,他指定了标签体的内容。该元素的值可以是以下这几个:
a. tagdependent:指定标签处理类自己负责处理标签体。
b. empty:指定该标签的标签体只能作为空标签来使用。
c. scriptless:指定该标签的标签体可以是静态的HTML元素、表达式语言,但绝不允许是JSP脚本。
d. JSP:指定该标签可以使用JSP脚本。
注意:因为JSP2规范不再推荐使用JSP脚本,所以JSP2自定义标签的标签体中不能在包含JSP脚本。所以,实际上,body-content元素的值不可以是JSP脚本。
定义了以上标签库定义文件之后,将标签库文件放在Web应用的WEB-INF路径或任意子路径下,Java Web会自动加载该文件,则该文件定义的标签库也将生效。
三. 使用标签库
JSP页面中确定指定的标签需要两点:
(1)标签库URI:确定使用哪个标签库。
(2)标签名:确定使用哪个标签。
使用标签库分成以下两个步骤:
(1)导入标签库:使用taglib编译指令导入标签库,就是将标签库和指定前缀关联起来。
(2)使用标签:JSP页面中自定义标签。
taglib的语法格式如下:
<% @ taglib uri = "tagliburi" prefix = "tagprefix" %>
其中uri属性确定标签库的URI,这个URI可以确定一个标签库。而prefix属性指定标签库的前缀,即所有使用该前缀的标签都由此标签库处理。
使用标签的语法格式如下:
如该标签没有标签体,则可以使用如下的语法格式:
上面的使用标签的语法里都包含了设置属性值,前面介绍的HelloWorldTag标签没有任何的属性,所以使用该标签只需要用<mytag:helloWorld/>即可。其中mytag是taglib指令为标签库指定的前缀,而helloWorld是标签名。
- JSP2自定义标签(一)——简单标签
- jsp2.0自定义标签(一)
- 一,JSP2的自定义标签
- JSP2自定义标签(三)——带标签体的标签
- 自定义JSP标签的简单使用(JSP2.0)
- JSP2自定义标签的简单示例
- JSP2的自定义标签
- JSP2的自定义标签
- JSP2的自定义标签
- JSP2.0自定义标签
- jsp2的自定义标签
- jsp2自定义标签
- jsp2的自定义标签
- JSP2-自定义标签
- JSP2.0自定义标签
- JSP2自定义标签(二)——带属性的标签
- jsp2.0自定义标签(二)
- JSP2的自定义标签(2)
- 刚加工好的500W高清相机外壳
- string查找子串的方法
- ibatis2.3取执行的sql及参数
- 基础的Linux常用命令
- AVI破解及Android2.3实现
- JSP2自定义标签(一)——简单标签
- MFC Unicode 到 ansi 的转换
- 在AIX6.1下bash运行异常的解决
- 软件项目版本号的命名格式
- 存储过程分割一个字段为多个值
- EVC4安装
- u-boot-2009.08在2440上的移植详解(一)
- PCB attention_update
- AVI文件在opencore框架下的解析