一,JSP2的自定义标签

来源:互联网 发布:mac重装系统磁盘成灰色 编辑:程序博客网 时间:2024/05/18 02:23

使用自定义标签的原因

  • JSP脚本非常丑陋,难以阅读
  • JSP脚本和HTML代码混杂,维护成本高
  • HTML页面中嵌入JSP脚本,导致美工人员难以参与开发

出于以上的原因,Web开发需要一种可在页面中使用的标签,这种标签具有和HTML标签类似的语法,但又可以完成JSP脚本的功能,这就是我们需要的自定义标签

开发自定义标签的步骤

  1. 开发自定义标签处理类
  2. 建立一个*.tld文件,每个*.tld文件对应一个标签库,每个标签库可以包含多个标签
  3. 在JSP文件中使用自定义标签

开发自定义标签处理类

自定义标签处理类应该继承一个父类,javax.servlet.jsp.tagext.SimpleTagSupport,除此之外,JSP处理类还要有以下的要求

  • 如果标签类包含属性,每个属性都有对应的getter和setter方法
  • 重写doTag()方法,这个方法负责生产页面的内容

简单的自定义标签,该标签负责在页面上输出HelloWorld

package com.servlet.customerTag;import java.io.IOException;import java.util.Date;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class HelloWorldTag extends SimpleTagSupport{    @Override    public void doTag() throws JspException, IOException {        // TODO Auto-generated method stub        super.doTag();        getJspContext().getOut().write("HelloWorld"+new Date());    }}

建立TLD文件

TLD是Tag Library Definition的缩写,即标签库定义,文件的后缀是tld,每个TLD文件对应一个标签库,一个标签库中可以包含多个标签。TLD文件称为标签库定义文件。

可以在Tomcat的安装目录中寻找到TLD文件的模板,将该文件复制到Web应用的WEB-INF/路径,或者是WEB-INF的任意子路径下,并对该文件进行修改。

<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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"    version="2.0">    <description>My customer simple taglib</description>    <tlib-version>1.0</tlib-version>    <short-name>CustomerSimpleTag</short-name>    <!-- 定义该标签库的URI,此处的jsp2-example-taglib跟tld文件名称相同 -->    <uri>http://tomcat.apache.org/jsp2-example-taglib</uri>    <!-- 定义第一个标签 -->    <tag>        <!-- 定义标签的描述信息 -->        <description>HelloWorld</description>        <!-- 定义标签的名称,重要的元素 -->        <name>helloWorld</name>        <!-- 定义标签的处理类 -->        <tag-class>com.servlet.tag.HelloWorldTag</tag-class>        <!-- 定义标签体为空 -->        <body-content>empty</body-content>    </tag></taglib>

taglib下有三个子元素

  • tlib-version:指定该标签库实现的版本,作为表示的内部版本号,对程序没有太大的影响。
  • short-name:标签库的默认短名。
  • uri:指定该标签库的URI,相当于指定该标签库的唯一标识。JSP页面中就是根据标签库中的uri来定位标签库。

除此之外,taglib元素下可以包含多个tag元素,每个tag元素定义一个标签,tag元素下允许出现以下的子元素。

  1. name:该标签的名称,这个子元素很重要,JSP页面中就是根据该名称来使用此标签的。
  2. tag-class:标签的处理类。
  3. body-content:指定标签体的内容,该元素的值可以有以下的几种

    • tagdependent:指定标签处理类自己负责处理标签体。
    • empty:只能作为空标签使用。
    • scriptless:指定该标签的标签体可以是静态HTML元素、表达式语言,但是不允许出现JSP脚本。
    • JSP:指定该标签的标签体可以使用JSP脚本。
  4. dynamic-attributes:指定该标签是否支持动态属性,只有当定义动态属性标签时才会使用该子元素。

使用标签库

在JSP页面中确定指定的标签需要两点

  • 标签库URI:确定使用哪个标签库
  • 标签名:确定使用哪个标签

使用标签库分成以下两个步骤

  • 导入标签库:使用taglib编译指令导入标签库,就是将标签库和指定前缀关联起来。
  • 使用标签:在JSP页面中使用自定义标签。

在页面中使用,文件index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%>    <%@ taglib uri="http://tomcat.apache.org/jsp2-example-taglib" prefix="mytag"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</head><body><mytag:helloWorld/></body></html>

运行结果
这里写图片描述

0 0
原创粉丝点击