JSTL自定义标签(三)

上篇讲解的是JSTL常用的核心标签,本篇介绍JSTL自定义标签的使用。还记得在学js的时候,我们学习了JQuery框架,同时学习了构造自己的js库,再去调用自己的js库,这就如同根据自己的需要些一个内聚性强的函数一样,我们创建一个函数后,再去调用这个函数。在学习J2ee规范JSTL标签这一节的时候,同样我们可以根据自己的需要构造自己的标签库,再去使用自己定义的这个标签。

JSTL自带的标签功能时非常强大的,但是不能完全满足我们的需要,开发标签首先是需要开发标签对应的功能类,就和写函数一样,这个函数是什么功能的呢?其次,编写描述标签的tld,并把这个文件放到web-inf/目录下,才能在jsp页面上调用自定义的标签。

自定义标签示例:

我们编写自定义标签需要三个步骤:

1、标签的功能处理程序

java源代码:

  1. package taglibs;
  2. import java.io.IOException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import javax.servlet.jsp.JspException;
  6. import javax.servlet.jsp.PageContext;
  7. import javax.servlet.jsp.tagext.Tag;
  8. public class DateTag implements Tag {
  9. private PageContext pageContext;
  10. private Tag tag;
  11. /**
  12. * 标签初始化功能。
  13. */
  14. public int doEndTag() throws JspException {
  15. try
  16. {
  17. //定义日期。
  18. Date date = new Date();
  19. //日期格式
  20. SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy年MM月dd日");
  21. pageContext.getOut().print(dateFormater.format(date));
  22. }catch(IOException e)
  23. {
  24. e.printStackTrace();
  25. }
  26. return Tag.EVAL_PAGE;
  27. }
  28. /**
  29. * 标签开始
  30. */
  31. public int doStartTag() throws JspException {
  32. return Tag.SKIP_BODY;
  33. }
  34. public Tag getParent() {
  35. return null;
  36. }
  37. public void release() {
  38. }
  39. public void setPageContext(PageContext arg0) {
  40. this.pageContext = arg0;
  41. }
  42. public void setParent(Tag arg0) {
  43. this.tag = arg0;
  44. }
  45. }

上述程序段说明:

我们自己定义的DateTag标签实现了Tag接口,如果需要处理正文的内容,即需要处理开始标签和结束标签之间的内容的时候,需要实现BodyTag接口,我们在这里不需要处理正文内容,所以选择实现Tag接口即可。

因为这里要实现的标签不对正文内容处理,所以只需要实现doEndTag方法即可,在这个方法中取出当前系统时间,并指定格式输出。

2 、标签描述文件tld文件

标签处理功能开发完成之后,需要对标签库进行配置,也就是配置对标签功能实现类的引用,JSP引擎会根据页面中的标签引用找到对应的标签配置文件,然后根据配置文件找到实现标签功能的java类,从而调用其中的功能。

在eclipse中选择新建文件,选择新建tld类型的文件,会有如下如所示:

其中包括我们.tld文件名 Name:datetag,文件的版本号 version:1.2,标签库的版本 Tlibversion:1.0,标签库要求的JSP版本为1.2,理解标签库描述性名字ShortName,URI唯一标识该标签库的URI为/mytags。我们代码如下所示:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  3. "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
  4. <taglib>
  5. <tlib-version>1.0</tlib-version>
  6. <jsp-version>1.2</jsp-version>
  7. <short-name>dateTagExample</short-name>
  8. <uri>/mytags</uri>
  9. <tag>
  10. <name>date</name>
  11. <tag-class>taglibs.DateTag</tag-class>
  12. <body-content>empty</body-content>
  13. </tag>
  14. </taglib>

<tag></tag> 描述了标签库中的一个标签,其中标签的名字是date,也就是在JSP页面上访问的名字为date;这个标签的功能处理类为taglibs.DateTag,<body-content></body-content>表明这个标签没有正文内容,即在开始标签和结束标签不能包含其他内容。

在一个标签库中,可以包括一组标签,也可以只描述一个标签,一般情况下,都是把一组功能类似标签放置在一个标签库中,可以包括一组标签也可以只描述一个标签,一般情况下都是一组功能类似的标签放置在一个标签库中,用一个描述文件,只要增加<tag></tag>节点就可以了。

3、在JSP中调用这个标签

首先把这个描述文件. tld 放到web-inf文件夹下,然后在JSP页面中使用这个标签库:

<%@  taglib   uri="/web-inf/datetag.tld"       prefix="mytags"          %>

代码如下所示:

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
  2. <%@ taglib uri="/WEB-INF/datetag.tld" prefix="mytags" %>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6. 自定义标签示例<br>
  7. </head>
  8. <body>
  9. <font size="3">
  10. 使用自定义标签输出日期:
  11. <mytags:date/>
  12. </font>
  13. </body>
  14. </html>

调用结果显示图:

4、JSP页面不使用标签和使用标签的执行过程

如下图所示:

这样终于理解了JSTL,就是把JSP页面上嵌入的java代码穿上一层外衣,但这个“外衣”不用进行编译就可以直接在浏览器上运行,更加接近于界面制作显示的要求,原来J2EE的这个JSTL规范是在解耦,如此让系统的扩展性和可维护性更强了。

时间: 2024-12-24 08:53:33

JSTL自定义标签(三)的相关文章

自己封装JSTL 自定义标签

第一步,做一个类,派生自SimpleTagSupport,"alt+/"选重写doTag()方法. public class TestTag extends SimpleTagSupport { private String outerTagName="p"; public void setOuterTagName(String outerTagName) { this.outerTagName = outerTagName; } private int count

JSTL自定义标签

这节我们总结一下JSTL自定义标签相关内容. 1. 自定义标签简介 自定义标签主要用于移除JSP页面中的java代码.Jsp页面主要是用来显示给前台的,如果里面有过多的java代码的话,会显得很乱,但是没有java代码也无法获取相关数据或完成相关操作.那么这时候我们就可以自己定义一个标签,来完成需要用java代码完成的事情,这样Jsp页面就会清洁很多,可读性也更强.JSP中使用自定义标签移除只需要完成以下两个步骤: 1)编写一个实现Tag接口的java类(标签处理类): 2)编写标签库描述符(t

超全面的JavaWeb笔记day13&lt;JSTL&amp;自定义标签&gt;

1.JSTL标签库(重点) core out set remove url if choose when otherwise forEach fmt formatDate formatNumber 2.自定义标签(理解) 步骤 标签处理类 tld文件 jsp中<%@taglib%> 处理类 实现SimpleTag接口 继承SimpleTagSupport类 有标签体的标签 不执行下面内容的标签 带有属性的标签 3.MVC设计模式(重点中的重点) M:模型 V:视图 C:控制器 4.Java三层

JavaWeb学习之JSTL自定义标签库的使用、JSTL自定义函数库(7)

一.自定义标签,步骤 * 确定需求 * <my:date /> 输出当前系统的时间 yyyy-MM-dd hh:mm:ss:SSS * 编写Java类 新建包名:com.yxl.tag,新建类MyDateTag,实现SimpleTag接口 * 只要与此接口有关的实现类,javax.servlet.jsp.tagext.JspTag * 需要实现具体的接口 * javax.servlet.jsp.tagext.SimpleTag,简单标签,JSP2.0**,选择这个 * javax.servle

JSTL自定义标签库 (二)

要定义自己的标签,首先写个java类,extends TagSupport  或者 implements Tag ,然后在类体里实现自己想要的方法,或者覆盖父类的方法. 我定义的MyTag代码如下: package com.xll.util; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.

JSTL自定义标签 实现forEach循环支持集合.数组

java代码实现 tld配置 JSP页面代码

jsp的标签库和自定义标签

1.jstl标签库 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签. 根据JSTL标签所提供的功能,可以将其分为5个类别. 核心标签 格式化标签 SQL 标签(过时) XML 标签(过时) JSTL 函数 1.1使用taglib指令导入标签库 ,除了JSP动作标签外,使用其他第三方的标签库都需要:  <%

Javaweb学习笔记6—EL表达式与JSTL及自定义标签

 前几天博客被黑了,导致博客登陆不上,把前几天应该发的东西的东西重新发一遍 今天来讲javaweb的第六阶段学习. EL表达式与JSTL及自定义标签是对上篇文章介绍的JSP的扩展,不能说是很重要的东西,但是也要了解. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 另外:如果图看不清的话请右击---在新窗口中打开会清楚很多. 一.EL表达式 1,EL简介 Expression Lan

jstl的自定义标签

1)作用:当jsp的内置标签或者jstl不满足我们,这时需要自定义标签2)三个步骤:  需求: 使用自定义标签输出客户的ip地址SimpleTag接口的方法:doTag():执行标签的方法,由web服务器调用getParent(): 得到父标签.setJspBody(JspFragment jspBody)传入标签主体内容.由web服务器调用setJspContext(JspContext pc)传入PageContext.由web服务器调用setParent(JspTag parent) 传入