Java_JSP自定义标签的开发与应用

在JSTL提供了四个标签库(核心标签库、国际化标签库、数据库标签库和XML标签库),涉及到了几十个标签。虽然这些标签可以完成比较复杂的工作,但它们仍然无法满足程序中的特殊需求。因此,就需要用户根据自己的需要来定制JSP标签,这种由用户自己实现的JSP标签被称为自定义标签。

.1 自定义标签基础

自定义标签和JSTL中的标签从技术上看没有任何区别,可以将这些标签统称为JSP标签。JSP标签在JSP页面中通过XML语法格式被调用,当JSP引擎将JSP页面翻译成Servlet时,就将这些调用转换成执行相应的Java代码。也就是说,JSP标签实际上就是调用了某些Java代码,只是在JSP页面中以另外一种形式(XML语法格式)表现出来。

1.1 编写输出随机数的标签

开始自定义标签的学习之前,在这一节先来实现一个简单的自定义标签,以使读者做一下热身,同时读者通过本节的例子可以对自定义标签的实现方法和过程有一个感性的认识。

【实例1-1】 实现输出随机数的标签

1. 实例说明

在本例实现的自定义标签(random标签)的功能是输出一个指定范围的随机整数。random标签有如下几个特征:

没有标签体。

有两个属性:min和max。其中min属性表示生成随机数的最小值,max属性表示生成随机数的最大值。min属性的默认值是0,max属性的默认值是Integer.MAX_VALUE。

生成随机数的范围是min <= random < max。

random标签的标准调用形式如下:

<ct:random min="1" max="100" />

其中“ct”是调用标签时的前缀,通过taglib指定的prefix属性指定。上面的代码的功能是输出一个在1(包括)和100(不包括)之间的随机数。

2. 编写标签类

标签类是自定义标签的核心部分。实现标签类的方法有很多,但最简单的方法是编写一个从

javax.servlet.jsp.tagext.TagSupport类继承的Java类,并在该类中覆盖TagSupport类的doStartTag方法。为了读取标签中的属性值,还需要在标签类中为每一个标签属性提供一个相应数据类型的标签类属性以及该属性的setter方法(不需要getter方法)。生成随机数的代码需要放在标签类的doStartTag方法中。该标签类的实现代码如下:

Java代码  

  1. package chapter1;
  2. import java.io.IOException;
  3. import java.util.Random;
  4. import javax.servlet.jsp.JspException;
  5. import javax.servlet.jsp.tagext.TagSupport;
  6. public class RandomTag extends TagSupport
  7. {
  8. // 封装random标签的两个属性的JavaBean属性
  9. private int min = 0;
  10. private int max = Integer.MAX_VALUE;
  11. // min属性的setter方法
  12. public void setMin(int min)
  13. {
  14. this.min = min;
  15. }
  16. // max属性的setter方法
  17. public void setMax(int max)
  18. {
  19. this.max = max;
  20. }
  21. // 覆盖TagSupport类的doStartTag方法
  22. // 当遇到标签(也就是<ct:random>)的开始标记时调用该方法
  23. @Override
  24. public int doStartTag() throws JspException
  25. {
  26. try
  27. {
  28. Random random = new Random();
  29. // 生成一个在min和max之间的随机数
  30. int result = min + random.nextInt(max - min);
  31. // 将生成的随机数输出到客户端
  32. pageContext.getOut().write(String.valueOf(result));
  33. }
  34. catch (IOException e)
  35. {
  36. }
  37. // TagSupport类的doStartTag方法默认返回SKIP_BODY,表示忽略自定义标签体
  38. return super.doStartTag();
  39. }
  40. }

在RandomTag类的doStartTag方法中使用了一个pageContext变量来获得JspWriter对象(JSP的out

内置对象)。pageContext变量是在TagSupport类中定义的一个类变量,该变量通过TagSupport类中的

setPageContext方法进行赋值。实际上,setPageContext方法是在Tag接口中定义的,而TagSupport实现了

Tag接口的setPageContext方法。Servlet容器在调用doStartTag方法之前,会先调用Tag接口的setPageContext方法来初始化pageContext变量。Tag接口将在1.1.3节介绍,在这里只要知道所有的标签类都必须实现Tag接口。为了简化标签类的实现,JSP API提供了一个TagSupport类,有了TagSupport类,用户在编写标签类时就不需要实现Tag接口的所有方法了。

3. 编写标签库描述符文件(TLD文件)

在JSTL中有若干TLD文件(详见图9.1),其中tld是Tag Library Descriptor(标签库描述符)的缩写。

要想使一个自定义标签正常工作,必须在TLD文件中对该标签进行配置。在TLD文件中主要配置如下两部分内容: 标签库的配置信息、标签库中具体标签的配置信息

标签库的配置信息主要包括如下的内容:

标签库的版本:使用<tlib-version>标签设置。

正常使用标签库中的标签所需要的最低JSP版本:使用<jsp-version>标签设置。

标签库的默认前缀:使用<short-name>标签设置。

标签库的URI:使用<uri>标签设置。

标签库的描述信息:使用<description>标签设置。

标签的配置信息主要包括如下的内容:

标签名:使用<name>标签设置。

标签对应的Java类:使用<tag-class>标签设置。

标签体的类型:使用<body-content>标签设置。

标签的描述信息:使用<description>标签设置。

标签属性的信息:每一个标签属性对应一个<attribute>标签。在<attribute>标签中可以指定标签名(使用<name>标签设置)、该属性是否必须指定(使用<required>标签设置)、该属性是否支持动态属性值(使用<rtexprvalue>标签指定)等配置信息。

在WEB-INF目录中建立一个jsp-taglib.tld文件,并在该文件中输入如下的内容:

Java代码  

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  5. http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
  6. <!-- 标签库的配置信息 -->
  7. <description>自定义标签库</description>
  8. <tlib-version>1.1</tlib-version>
  9. <short-name>ct</short-name>
  10. <uri>http://nokiaguy.blogjava.net</uri><taglib>
  11. <!-- random标签的配置信息 -->
  12. <tag>
  13. <description>产生一个指定范围的随机数</description>
  14. <name>random</name>
  15. <tag-class>chapter1.RandomTag</tag-class>
  16. <body-content>empty</body-content>
  17. <attribute>
  18. <name>min</name>
  19. <required>false</required>
  20. <rtexprvalue>false</rtexprvalue>
  21. </attribute>
  22. <attribute>
  23. <name>max</name>
时间: 2024-10-05 05:12:23

Java_JSP自定义标签的开发与应用的相关文章

JavaWeb-12 (自定义标签库开发&amp;JSTL标签库)

JavaWeb-12:自定义标签库开发&JSTL标签库 自定义标签库开发 一.自定义标签简介 自定义标签主要用于移除Jsp页面中的java代码. 使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤: 1.编写一个实现Tag接口的Java类(标签处理器类). 2.编写标签库描述符(tld)文件,在tld文件中把标 实验:项目架构如下: a.tld <?xml version="1.0" encoding="utf-8" ?> &l

自定义标签库开发与el表达式

1.自定义标签库的开发自定义标签库主要用于移除jsp页面中的java 代码. 步骤一:编写一个实现Tag接口的类(建议继承TagSupport),把java代码一直到这个类中. package cn.soldier.tag; import java.io.IOException; import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.TagSupport; public class viewIP extends

自定义标签库开发(简单标签开发)

实现Tag接口,BodyTag接口,IterationTag接口的标签开发技术一般称为传统标签开发技术. 实现SimpleTag接口的标签开发技术,一般称为简单标签开发技术. JSP2.0里新增了SimpleTag. 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编写和调用的SimpleTag接口来实现标签的功能.实现SimpleTag接口的标签通常称为简单标签.简单标签共定义了5

servlet的自定义标签的开发步骤

1.为什么需要使用自定义标签 (1)与JSP页面整体统一 (2)还具有一定的业务逻辑功能,例如:循环,判段...   (3)替代原JSP页面中<%%>  2.自定义标签开发步骤(3步): (1)自定义一个标签处理类,实现SimpleTag接口 package cn.wenhao.www.web.serlvet.el; import java.io.IOException; import javax.servlet.ServletRequest; import javax.servlet.jsp

自定义标签开发

一.概述 JSP中的标签库技术可以让我们定制自己的标签,自定义标签实际上是一个实现了特定接口的Java类,封装了一些常用的功能,运行时标签被相应的代码所代替.本文将对自定义标签的开发进行简单的介绍和总结. 二.标签库 开发自定义标签库,核心就是要编写标签处理器类,所有的标签处理器类都要实现JspTag接口.标签又分传统标签和简单标签.下图为标签库中主要的接口及类的继承实现关系. 使用标签大致可以实现以下四种基本功能: 控制页面内容(标签体)是否输出 用标签控制整个jsp是否输出 控制标签体重复执

EL表达式 JSTL的标签库 EL的函数 自定义EL函数 自定义标签 JSP的开发模式 注册登陆案例

EL表达式 JSTL的标签库 EL的函数 自定义EL函数 自定义标签 JSP的开发模式 注册登陆案例 EL表达式 1.获取域对象中的值 2.EL表达式支持运算 ${ num1 + num2 } EL获取常用的WEB对象 1.pageScope 获取page域对象的值 2.requestScope 获取request域对象的值 3.sessionScope 获取session域对象的值 4.applicationScope 获取application域对象的值 * 例子:向某个域中来存入值 req

自定义标签

1 如果在jsp页面中写java代码 是很不合适的 而且坏处很多像这样: <%@page import="java.util.ArrayList"%><%@page import="java.util.List"%><%@page import="com.atguigu.javaweb.Customer"%><%@ page language="java" contentType=&q

Java Web总结十六之一自定义标签

一.自定义标签简介 1.为什么要使用自定义标签? 自定义标签主要用于移除Jsp页面中的<%java%>代码. 2.开发自定义标签的步骤: 1)开发自定义标签处理类,该类需要实现SimpleTag接口/SimpleTagSupport类,重写doTag()方法. 2)编写标签库描述符(tld)文件,在tld文件中对自定义标签进行描述,并放置在WEB-INF/目录下. 3)完成以上操作,即可在JSP页面中导入和使用自定义标签. 二.自定义标签描述 1.实现SimpleTag接口的标签通常称为简单标

12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

EL应用 自定义一个标签,实现两个字符串的相加 1回顾 1.1servlet生命周期 init(ServletConfig) service(ServletRequest,ServletResponse) destory() 1.2回话技术 cookie:浏览器端 (服务器需要浏览器保存少量的数据) 服务器创建对象:new Cookie(name,value) cookie.setMaxage(秒);  有效时间 cookie.setMaxage(0)  删除cookie cookie.setP